From 7dc163318f0d37933460263f45e75b4b346761a9 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 11 Dec 2023 10:43:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E8=AE=B2=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/lib/main.dart | 26 +- .../monitoring/lockMonitoring_page.dart | 187 +- .../monitoring/lockMonitoring_state.dart | 14165 +++++++++++++++- star_lock/lib/talk/call/callTalk.dart | 111 + star_lock/lib/talk/call/g711Decoder.dart | 44 + star_lock/lib/talk/call/iFrameInfo.dart | 22 + star_lock/lib/talk/playAudio.dart | 0 .../flutter/generated_plugin_registrant.cc | 4 + .../linux/flutter/generated_plugins.cmake | 1 + .../Flutter/GeneratedPluginRegistrant.swift | 6 + star_lock/pubspec.yaml | 9 + .../flutter/generated_plugin_registrant.cc | 3 + .../windows/flutter/generated_plugins.cmake | 1 + 13 files changed, 14477 insertions(+), 102 deletions(-) create mode 100644 star_lock/lib/talk/call/callTalk.dart create mode 100644 star_lock/lib/talk/call/g711Decoder.dart create mode 100644 star_lock/lib/talk/call/iFrameInfo.dart delete mode 100644 star_lock/lib/talk/playAudio.dart diff --git a/star_lock/lib/main.dart b/star_lock/lib/main.dart index 1d34717a..24fbff70 100644 --- a/star_lock/lib/main.dart +++ b/star_lock/lib/main.dart @@ -1,10 +1,12 @@ import 'package:aliyun_push/aliyun_push.dart'; +import 'package:audioplayers/audioplayers.dart'; // import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/call/callTalk.dart'; import 'package:star_lock/tools/app_manager.dart'; import 'package:star_lock/tools/bindings/app_binding.dart'; import 'package:star_lock/tools/device_info_service.dart'; @@ -124,6 +126,12 @@ class _MyAppState extends State with WidgetsBindingObserver, BaseWidget { WidgetsBinding.instance?.addObserver(this); initAliyunPush(); + + // playLocalAudio(); + + Uint8List uint8List = Uint8List.fromList([]); + CallTalk talkClass = CallTalk(); + talkClass.getAVData(uint8List, 90); } //初始化阿里云推送 @@ -185,16 +193,8 @@ Future _setCommonServices() async { } //播放本地音频 -// void playAudio() async { -// const String audioPath = "assets/ring1.mp3"; -// AudioPlayer audioPlayer = AudioPlayer(); -// // int result = await audioPlayer.play(audioPath, isLocal: true); - -// if (result == 1) { -// // 播放成功 -// print("Audio playback successful!"); -// } else { -// // 播放失败 -// print("Error playing audio"); -// } -// } +void playLocalAudio() async { + final audioPlayer = AudioPlayer(); + audioPlayer.setReleaseMode(ReleaseMode.loop); + await audioPlayer.play(AssetSource('ring1.mp3')); +} diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart index c4cfd9c6..74128614 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -7,7 +6,6 @@ import '../../../../appRouters.dart'; import '../../../../app_settings/app_colors.dart'; import 'lockMonitoring_logic.dart'; - class LockMonitoringPage extends StatefulWidget { const LockMonitoringPage({Key? key}) : super(key: key); @@ -21,7 +19,7 @@ class _LockMonitoringPageState extends State { @override Widget build(BuildContext context) { - return Container( + return Container( width: 1.sw, height: 1.sh, color: Colors.white, @@ -30,37 +28,44 @@ class _LockMonitoringPageState extends State { Stack( // alignment: Alignment.bottomCenter, children: [ - Image.asset("images/icon_test20231113.png", width: 1.sw, height: 1.sh, fit: BoxFit.cover), + // Image.asset("images/icon_test20231113.png", width: 1.sw, height: 1.sh, fit: BoxFit.cover), + Image.memory( + state.imageData, + width: 1.sw, + height: 1.sh, + fit: BoxFit.cover, + ), Positioned( top: ScreenUtil().statusBarHeight + 30.h, - child: Row( - children: [ - SizedBox(width: 30.w), - GestureDetector( - onTap: () { - Get.back(); - }, - child: Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(30.h) - ), - padding: EdgeInsets.all(10.w), - child: Image(width: 40.w, height: 40.w, image: const AssetImage("images/icon_left_black.png"),), - ), + child: Row(children: [ + SizedBox(width: 30.w), + GestureDetector( + onTap: () { + Get.back(); + }, + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(30.h)), + padding: EdgeInsets.all(10.w), + child: Image( + width: 40.w, + height: 40.w, + image: const AssetImage("images/icon_left_black.png"), ), + ), + ), ]), ), Positioned( bottom: 10.w, child: Container( - width: 1.sw - 30.w*2, + width: 1.sw - 30.w * 2, // height: 300.h, margin: EdgeInsets.all(30.w), decoration: BoxDecoration( color: const Color(0xC83C3F41), - borderRadius: BorderRadius.circular(20.h) - ), + borderRadius: BorderRadius.circular(20.h)), child: Column( children: [ SizedBox(height: 20.h), @@ -70,7 +75,7 @@ class _LockMonitoringPageState extends State { SizedBox(height: 20.h), ], ), - )) + )) ], ), ], @@ -78,76 +83,80 @@ class _LockMonitoringPageState extends State { ); } - Widget bottomTopBtnWidget(){ - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - // 打开关闭声音 - GestureDetector( - onTap: () { - state.isOpenVoice.value = !state.isOpenVoice.value; - }, - child: Container( - width: 50.w, - height: 50.w, - padding: EdgeInsets.all(5.w), - child: Obx(() => Image( - width: 40.w, - height: 40.w, - image: state.isOpenVoice.value - ? const AssetImage("images/main/icon_lockDetail_monitoringCloseVoice.png") - : const AssetImage("images/main/icon_lockDetail_monitoringOpenVoice.png") - )), - ), - ), - SizedBox(width: 60.w), - // 截图 - GestureDetector( - onTap: () { - // Get.toNamed(Routers.monitoringRealTimeScreenPage); - }, - child: Container( - width: 50.w, - height: 50.w, - padding: EdgeInsets.all(5.w), - child: Image(width: 40.w, height: 40.w, image: const AssetImage("images/main/icon_lockDetail_monitoringScreenshot.png")), - ), - ), - SizedBox(width: 60.w), - // 录制 - GestureDetector( - onTap: () { - // Get.toNamed(Routers.monitoringRealTimeScreenPage); - }, - child: Container( - width: 50.w, - height: 50.w, - padding: EdgeInsets.all(5.w), - child: Image(width: 40.w, height: 40.w, image: const AssetImage("images/main/icon_lockDetail_monitoringScreenRecording.png")), - ), - ), - ]); + Widget bottomTopBtnWidget() { + return Row(mainAxisAlignment: MainAxisAlignment.center, children: [ + // 打开关闭声音 + GestureDetector( + onTap: () { + state.isOpenVoice.value = !state.isOpenVoice.value; + }, + child: Container( + width: 50.w, + height: 50.w, + padding: EdgeInsets.all(5.w), + child: Obx(() => Image( + width: 40.w, + height: 40.w, + image: state.isOpenVoice.value + ? const AssetImage( + "images/main/icon_lockDetail_monitoringCloseVoice.png") + : const AssetImage( + "images/main/icon_lockDetail_monitoringOpenVoice.png"))), + ), + ), + SizedBox(width: 60.w), + // 截图 + GestureDetector( + onTap: () { + // Get.toNamed(Routers.monitoringRealTimeScreenPage); + }, + child: Container( + width: 50.w, + height: 50.w, + padding: EdgeInsets.all(5.w), + child: Image( + width: 40.w, + height: 40.w, + image: const AssetImage( + "images/main/icon_lockDetail_monitoringScreenshot.png")), + ), + ), + SizedBox(width: 60.w), + // 录制 + GestureDetector( + onTap: () { + // Get.toNamed(Routers.monitoringRealTimeScreenPage); + }, + child: Container( + width: 50.w, + height: 50.w, + padding: EdgeInsets.all(5.w), + child: Image( + width: 40.w, + height: 40.w, + image: const AssetImage( + "images/main/icon_lockDetail_monitoringScreenRecording.png")), + ), + ), + ]); } - Widget bottomBottomBtnWidget(){ - return Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - bottomBtnItemWidget("images/main/icon_lockDetail_monitoringTalkback.png", "点击对讲", Colors.white,(){ - - }), - bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", "长按开锁", AppColors.mainColor,(){ - - }) - ]); + Widget bottomBottomBtnWidget() { + return Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ + bottomBtnItemWidget("images/main/icon_lockDetail_monitoringTalkback.png", + "点击对讲", Colors.white, () {}), + bottomBtnItemWidget("images/main/icon_lockDetail_monitoringUnlock.png", + "长按开锁", AppColors.mainColor, () {}) + ]); } - Widget bottomBtnItemWidget(String iconUrl, String name, Color backgroundColor, Function() onClick) { + Widget bottomBtnItemWidget( + String iconUrl, String name, Color backgroundColor, Function() onClick) { var wh = 80.w; return GestureDetector( onTap: onClick, child: SizedBox( - height: 140.h, + height: 140.h, child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -156,13 +165,15 @@ class _LockMonitoringPageState extends State { height: wh, decoration: BoxDecoration( color: backgroundColor, - borderRadius: BorderRadius.circular((wh+ 10.w*2)/2) - ), + borderRadius: BorderRadius.circular((wh + 10.w * 2) / 2)), padding: EdgeInsets.all(20.w), child: Image.asset(iconUrl, fit: BoxFit.fitWidth), ), SizedBox(height: 20.w), - Expanded(child: Text(name, style: TextStyle(fontSize: 20.sp, color: Colors.white), textAlign: TextAlign.center)) + Expanded( + child: Text(name, + style: TextStyle(fontSize: 20.sp, color: Colors.white), + textAlign: TextAlign.center)) ], )), ); diff --git a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart index 991d59bf..a38b76f1 100644 --- a/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart +++ b/star_lock/lib/main/lockDetail/monitoring/monitoring/lockMonitoring_state.dart @@ -1,7 +1,14170 @@ +import 'dart:typed_data'; import 'package:get/get.dart'; class LockMonitoringState { var isOpenVoice = false.obs; -} \ No newline at end of file + Uint8List imageData = Uint8List.fromList([ + 255, + 216, + 255, + 224, + 0, + 17, + 74, + 70, + 73, + 70, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 204, + 255, + 225, + 0, + 166, + 69, + 120, + 105, + 102, + 0, + 0, + 77, + 77, + 0, + 42, + 0, + 0, + 0, + 8, + 0, + 8, + 1, + 15, + 0, + 2, + 0, + 0, + 0, + 7, + 0, + 0, + 0, + 122, + 1, + 16, + 0, + 2, + 0, + 0, + 0, + 8, + 0, + 0, + 0, + 130, + 1, + 18, + 0, + 3, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 26, + 0, + 5, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 38, + 1, + 27, + 0, + 5, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 38, + 1, + 40, + 0, + 3, + 0, + 0, + 0, + 1, + 0, + 2, + 0, + 0, + 2, + 19, + 0, + 3, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 135, + 105, + 0, + 4, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 138, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 105, + 112, + 112, + 0, + 0, + 0, + 3, + 194, + 74, + 76, + 68, + 86, + 0, + 0, + 0, + 0, + 65, + 67, + 53, + 52, + 0, + 0, + 0, + 0, + 0, + 1, + 144, + 0, + 0, + 7, + 0, + 0, + 0, + 4, + 48, + 50, + 50, + 48, + 0, + 0, + 0, + 0, + 0, + 0, + 255, + 219, + 0, + 67, + 0, + 40, + 28, + 30, + 35, + 30, + 25, + 40, + 35, + 33, + 35, + 45, + 43, + 40, + 48, + 60, + 100, + 65, + 60, + 55, + 55, + 60, + 123, + 88, + 93, + 73, + 100, + 145, + 128, + 153, + 150, + 143, + 128, + 140, + 138, + 160, + 180, + 230, + 195, + 160, + 170, + 218, + 173, + 138, + 140, + 200, + 255, + 203, + 218, + 238, + 245, + 255, + 255, + 255, + 155, + 193, + 255, + 255, + 255, + 250, + 255, + 230, + 253, + 255, + 248, + 255, + 219, + 0, + 67, + 1, + 43, + 45, + 45, + 60, + 53, + 60, + 118, + 65, + 65, + 118, + 248, + 165, + 140, + 165, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 248, + 255, + 192, + 0, + 17, + 8, + 1, + 224, + 2, + 128, + 3, + 1, + 34, + 0, + 2, + 17, + 1, + 3, + 17, + 1, + 255, + 196, + 0, + 31, + 0, + 0, + 1, + 5, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 255, + 196, + 0, + 31, + 1, + 0, + 3, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 255, + 196, + 0, + 181, + 16, + 0, + 2, + 1, + 3, + 3, + 2, + 4, + 3, + 5, + 5, + 4, + 4, + 0, + 0, + 1, + 125, + 1, + 2, + 3, + 0, + 4, + 17, + 5, + 18, + 33, + 49, + 65, + 6, + 19, + 81, + 97, + 7, + 34, + 113, + 20, + 50, + 129, + 145, + 161, + 8, + 35, + 66, + 177, + 193, + 21, + 82, + 209, + 240, + 36, + 51, + 98, + 114, + 130, + 9, + 10, + 22, + 23, + 24, + 25, + 26, + 37, + 38, + 39, + 40, + 41, + 42, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 255, + 196, + 0, + 181, + 17, + 0, + 2, + 1, + 2, + 4, + 4, + 3, + 4, + 7, + 5, + 4, + 4, + 0, + 1, + 2, + 119, + 0, + 1, + 2, + 3, + 17, + 4, + 5, + 33, + 49, + 6, + 18, + 65, + 81, + 7, + 97, + 113, + 19, + 34, + 50, + 129, + 8, + 20, + 66, + 145, + 161, + 177, + 193, + 9, + 35, + 51, + 82, + 240, + 21, + 98, + 114, + 209, + 10, + 22, + 36, + 52, + 225, + 37, + 241, + 23, + 24, + 25, + 26, + 38, + 39, + 40, + 41, + 42, + 53, + 54, + 55, + 56, + 57, + 58, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 255, + 218, + 0, + 12, + 3, + 1, + 0, + 2, + 17, + 3, + 17, + 0, + 63, + 0, + 207, + 162, + 138, + 41, + 0, + 81, + 69, + 20, + 192, + 40, + 162, + 138, + 0, + 41, + 105, + 41, + 104, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 162, + 138, + 40, + 0, + 165, + 164, + 165, + 164, + 1, + 69, + 20, + 80, + 48, + 164, + 165, + 162, + 128, + 18, + 150, + 138, + 40, + 16, + 81, + 69, + 20, + 12, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 4, + 20, + 81, + 69, + 0, + 20, + 148, + 180, + 80, + 48, + 164, + 165, + 164, + 160, + 2, + 138, + 40, + 160, + 66, + 210, + 82, + 209, + 64, + 9, + 69, + 45, + 37, + 3, + 10, + 90, + 74, + 40, + 16, + 81, + 69, + 20, + 0, + 180, + 82, + 82, + 208, + 1, + 69, + 20, + 80, + 1, + 73, + 75, + 69, + 0, + 20, + 81, + 69, + 48, + 10, + 41, + 40, + 160, + 5, + 162, + 146, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 146, + 129, + 5, + 45, + 37, + 45, + 0, + 20, + 162, + 146, + 148, + 80, + 3, + 197, + 58, + 154, + 41, + 192, + 80, + 4, + 20, + 81, + 69, + 3, + 10, + 40, + 162, + 128, + 10, + 40, + 162, + 128, + 22, + 138, + 74, + 90, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 150, + 129, + 137, + 69, + 45, + 37, + 2, + 10, + 41, + 104, + 160, + 98, + 81, + 75, + 69, + 33, + 5, + 20, + 81, + 76, + 2, + 138, + 40, + 160, + 97, + 69, + 20, + 80, + 1, + 69, + 20, + 80, + 1, + 69, + 20, + 82, + 0, + 162, + 138, + 40, + 16, + 81, + 69, + 20, + 192, + 40, + 162, + 138, + 6, + 20, + 81, + 69, + 0, + 20, + 81, + 69, + 2, + 10, + 40, + 162, + 144, + 9, + 75, + 69, + 20, + 0, + 81, + 69, + 20, + 12, + 41, + 41, + 105, + 40, + 16, + 180, + 82, + 81, + 64, + 11, + 69, + 37, + 45, + 0, + 20, + 81, + 73, + 64, + 5, + 20, + 81, + 64, + 5, + 20, + 81, + 76, + 2, + 138, + 92, + 81, + 64, + 9, + 69, + 20, + 80, + 2, + 81, + 75, + 73, + 64, + 130, + 150, + 146, + 150, + 128, + 10, + 81, + 73, + 74, + 40, + 1, + 235, + 82, + 129, + 81, + 173, + 74, + 40, + 2, + 165, + 20, + 81, + 64, + 194, + 138, + 40, + 164, + 1, + 69, + 45, + 20, + 192, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 165, + 162, + 128, + 18, + 138, + 90, + 40, + 1, + 40, + 165, + 164, + 160, + 2, + 138, + 90, + 49, + 64, + 5, + 20, + 98, + 138, + 0, + 40, + 162, + 138, + 0, + 40, + 165, + 2, + 157, + 182, + 128, + 25, + 70, + 42, + 77, + 180, + 161, + 40, + 2, + 60, + 81, + 138, + 147, + 109, + 24, + 160, + 87, + 35, + 197, + 20, + 242, + 41, + 166, + 129, + 137, + 69, + 20, + 162, + 128, + 19, + 20, + 184, + 167, + 1, + 78, + 2, + 128, + 35, + 219, + 70, + 218, + 151, + 20, + 98, + 128, + 185, + 22, + 218, + 93, + 181, + 38, + 40, + 160, + 87, + 35, + 197, + 38, + 41, + 230, + 154, + 104, + 1, + 180, + 81, + 69, + 3, + 12, + 82, + 237, + 165, + 20, + 240, + 40, + 1, + 155, + 104, + 219, + 82, + 224, + 81, + 138, + 5, + 114, + 29, + 180, + 109, + 169, + 182, + 209, + 138, + 66, + 185, + 14, + 218, + 66, + 42, + 82, + 41, + 132, + 83, + 26, + 99, + 40, + 165, + 197, + 24, + 160, + 98, + 81, + 78, + 219, + 70, + 218, + 0, + 109, + 20, + 165, + 72, + 164, + 164, + 1, + 69, + 20, + 80, + 48, + 164, + 165, + 164, + 160, + 66, + 210, + 81, + 69, + 0, + 20, + 81, + 69, + 0, + 20, + 82, + 82, + 208, + 2, + 209, + 73, + 70, + 105, + 128, + 180, + 98, + 129, + 75, + 64, + 13, + 162, + 148, + 210, + 80, + 33, + 41, + 104, + 162, + 128, + 10, + 81, + 73, + 78, + 2, + 128, + 30, + 181, + 42, + 212, + 74, + 42, + 85, + 226, + 128, + 42, + 209, + 69, + 20, + 12, + 40, + 162, + 138, + 6, + 20, + 81, + 69, + 2, + 10, + 40, + 162, + 128, + 10, + 90, + 40, + 160, + 2, + 138, + 49, + 75, + 138, + 0, + 74, + 41, + 104, + 160, + 2, + 140, + 82, + 129, + 78, + 2, + 128, + 25, + 182, + 151, + 109, + 60, + 10, + 118, + 40, + 2, + 61, + 180, + 109, + 169, + 49, + 72, + 104, + 16, + 204, + 83, + 77, + 60, + 211, + 77, + 0, + 54, + 148, + 81, + 138, + 90, + 6, + 40, + 20, + 225, + 77, + 20, + 241, + 64, + 10, + 41, + 192, + 83, + 105, + 232, + 9, + 25, + 160, + 45, + 112, + 197, + 53, + 170, + 109, + 148, + 141, + 23, + 20, + 13, + 65, + 149, + 141, + 52, + 213, + 143, + 39, + 52, + 162, + 220, + 30, + 180, + 138, + 228, + 101, + 90, + 81, + 87, + 214, + 210, + 16, + 57, + 92, + 159, + 173, + 50, + 72, + 99, + 31, + 117, + 64, + 250, + 83, + 14, + 86, + 85, + 6, + 156, + 13, + 59, + 203, + 197, + 33, + 90, + 87, + 14, + 70, + 25, + 164, + 221, + 72, + 69, + 38, + 40, + 23, + 40, + 237, + 212, + 155, + 169, + 184, + 162, + 130, + 108, + 41, + 52, + 211, + 75, + 138, + 93, + 180, + 192, + 101, + 21, + 38, + 204, + 209, + 229, + 154, + 0, + 104, + 52, + 224, + 104, + 242, + 205, + 27, + 13, + 0, + 46, + 234, + 93, + 212, + 205, + 164, + 81, + 131, + 233, + 64, + 135, + 110, + 163, + 117, + 51, + 6, + 146, + 128, + 176, + 226, + 212, + 220, + 210, + 81, + 64, + 210, + 22, + 148, + 83, + 104, + 205, + 3, + 37, + 81, + 82, + 5, + 6, + 161, + 86, + 169, + 85, + 168, + 37, + 138, + 83, + 138, + 141, + 163, + 169, + 195, + 2, + 41, + 9, + 20, + 137, + 43, + 21, + 197, + 52, + 138, + 153, + 170, + 38, + 160, + 105, + 140, + 163, + 52, + 81, + 138, + 101, + 5, + 20, + 237, + 180, + 133, + 77, + 32, + 27, + 69, + 46, + 41, + 41, + 128, + 81, + 69, + 20, + 0, + 180, + 80, + 41, + 104, + 0, + 165, + 164, + 160, + 80, + 1, + 73, + 78, + 164, + 52, + 0, + 148, + 81, + 69, + 2, + 20, + 84, + 138, + 42, + 49, + 79, + 83, + 64, + 19, + 1, + 197, + 6, + 154, + 166, + 159, + 140, + 208, + 50, + 165, + 20, + 82, + 208, + 2, + 82, + 209, + 75, + 64, + 9, + 69, + 45, + 0, + 80, + 49, + 40, + 2, + 165, + 84, + 169, + 86, + 49, + 233, + 64, + 136, + 2, + 26, + 119, + 150, + 106, + 200, + 64, + 41, + 74, + 208, + 23, + 42, + 109, + 164, + 197, + 74, + 194, + 163, + 52, + 8, + 109, + 37, + 45, + 24, + 160, + 96, + 41, + 194, + 140, + 26, + 80, + 166, + 128, + 20, + 26, + 92, + 208, + 16, + 211, + 196, + 102, + 128, + 35, + 205, + 24, + 38, + 166, + 17, + 84, + 139, + 21, + 0, + 86, + 17, + 19, + 235, + 75, + 246, + 126, + 249, + 53, + 117, + 99, + 160, + 165, + 49, + 20, + 124, + 172, + 83, + 132, + 85, + 107, + 203, + 165, + 9, + 64, + 238, + 87, + 88, + 135, + 165, + 57, + 98, + 201, + 171, + 1, + 105, + 225, + 104, + 17, + 7, + 146, + 41, + 66, + 96, + 99, + 29, + 42, + 198, + 41, + 49, + 65, + 73, + 145, + 5, + 164, + 97, + 206, + 42, + 99, + 128, + 42, + 34, + 50, + 106, + 90, + 54, + 140, + 144, + 220, + 82, + 138, + 93, + 180, + 187, + 105, + 88, + 110, + 104, + 66, + 213, + 11, + 181, + 78, + 87, + 138, + 173, + 50, + 28, + 113, + 79, + 81, + 115, + 161, + 140, + 226, + 155, + 184, + 26, + 174, + 229, + 129, + 193, + 20, + 138, + 228, + 81, + 98, + 92, + 203, + 36, + 83, + 77, + 52, + 62, + 69, + 52, + 181, + 22, + 5, + 49, + 244, + 10, + 64, + 185, + 239, + 74, + 84, + 47, + 66, + 77, + 52, + 153, + 18, + 104, + 92, + 10, + 51, + 81, + 151, + 166, + 150, + 162, + 196, + 19, + 6, + 169, + 20, + 138, + 169, + 184, + 210, + 172, + 132, + 119, + 166, + 5, + 224, + 160, + 211, + 182, + 85, + 120, + 166, + 171, + 11, + 32, + 52, + 132, + 2, + 47, + 106, + 67, + 21, + 74, + 172, + 41, + 220, + 80, + 50, + 185, + 139, + 218, + 155, + 229, + 123, + 85, + 154, + 118, + 40, + 2, + 153, + 134, + 163, + 49, + 85, + 242, + 5, + 70, + 202, + 40, + 11, + 148, + 76, + 102, + 147, + 97, + 171, + 155, + 40, + 49, + 138, + 2, + 229, + 61, + 166, + 128, + 72, + 171, + 6, + 58, + 97, + 74, + 7, + 114, + 61, + 196, + 81, + 190, + 148, + 173, + 33, + 90, + 65, + 97, + 11, + 83, + 9, + 167, + 21, + 164, + 197, + 48, + 18, + 156, + 41, + 180, + 103, + 20, + 1, + 50, + 129, + 78, + 41, + 80, + 135, + 197, + 76, + 175, + 145, + 64, + 152, + 198, + 142, + 152, + 80, + 213, + 140, + 138, + 105, + 197, + 34, + 28, + 138, + 229, + 113, + 77, + 169, + 159, + 165, + 68, + 104, + 26, + 98, + 10, + 80, + 105, + 40, + 166, + 89, + 32, + 165, + 197, + 52, + 26, + 118, + 104, + 1, + 166, + 146, + 156, + 105, + 40, + 1, + 180, + 82, + 209, + 64, + 130, + 156, + 180, + 220, + 83, + 212, + 80, + 50, + 69, + 28, + 212, + 234, + 6, + 42, + 21, + 226, + 165, + 86, + 160, + 10, + 84, + 180, + 184, + 163, + 20, + 0, + 148, + 81, + 69, + 0, + 45, + 57, + 105, + 180, + 229, + 160, + 9, + 148, + 84, + 171, + 80, + 169, + 169, + 3, + 80, + 4, + 162, + 152, + 198, + 144, + 18, + 105, + 226, + 50, + 105, + 138, + 197, + 118, + 4, + 211, + 54, + 19, + 86, + 204, + 84, + 162, + 33, + 233, + 64, + 202, + 130, + 35, + 82, + 44, + 85, + 103, + 203, + 20, + 161, + 61, + 168, + 2, + 1, + 21, + 60, + 69, + 197, + 78, + 20, + 83, + 130, + 208, + 4, + 2, + 58, + 112, + 142, + 166, + 43, + 73, + 138, + 4, + 48, + 32, + 167, + 5, + 2, + 150, + 138, + 0, + 81, + 72, + 122, + 209, + 72, + 104, + 1, + 40, + 162, + 148, + 80, + 2, + 83, + 133, + 54, + 156, + 40, + 1, + 212, + 220, + 210, + 154, + 109, + 0, + 45, + 38, + 41, + 105, + 40, + 1, + 69, + 46, + 40, + 20, + 80, + 2, + 26, + 97, + 64, + 105, + 230, + 129, + 64, + 21, + 38, + 128, + 30, + 213, + 81, + 237, + 202, + 244, + 173, + 98, + 51, + 81, + 180, + 96, + 208, + 51, + 32, + 171, + 14, + 162, + 144, + 31, + 99, + 90, + 166, + 0, + 123, + 83, + 77, + 184, + 244, + 160, + 10, + 8, + 222, + 185, + 167, + 51, + 130, + 56, + 205, + 90, + 54, + 227, + 251, + 181, + 20, + 176, + 145, + 210, + 157, + 198, + 149, + 202, + 189, + 77, + 61, + 98, + 45, + 222, + 151, + 111, + 53, + 60, + 56, + 21, + 55, + 27, + 129, + 92, + 219, + 181, + 70, + 200, + 203, + 214, + 181, + 70, + 210, + 57, + 166, + 73, + 10, + 176, + 166, + 77, + 140, + 176, + 216, + 169, + 82, + 67, + 235, + 73, + 60, + 69, + 14, + 69, + 70, + 185, + 6, + 144, + 172, + 94, + 73, + 13, + 72, + 37, + 245, + 53, + 90, + 35, + 82, + 26, + 5, + 98, + 202, + 56, + 53, + 40, + 35, + 21, + 68, + 54, + 13, + 74, + 178, + 80, + 4, + 228, + 211, + 77, + 51, + 125, + 25, + 160, + 7, + 80, + 104, + 205, + 52, + 154, + 4, + 6, + 152, + 105, + 73, + 166, + 208, + 2, + 98, + 147, + 109, + 62, + 138, + 2, + 228, + 101, + 105, + 133, + 42, + 108, + 81, + 138, + 101, + 92, + 174, + 82, + 154, + 86, + 172, + 145, + 77, + 42, + 13, + 0, + 86, + 193, + 160, + 18, + 166, + 167, + 41, + 77, + 217, + 72, + 6, + 249, + 148, + 134, + 67, + 74, + 99, + 166, + 148, + 52, + 172, + 43, + 33, + 11, + 102, + 155, + 154, + 92, + 26, + 74, + 99, + 176, + 229, + 25, + 171, + 240, + 91, + 43, + 32, + 56, + 172, + 244, + 59, + 79, + 181, + 104, + 89, + 92, + 99, + 228, + 99, + 211, + 165, + 0, + 19, + 89, + 113, + 149, + 224, + 213, + 70, + 70, + 66, + 67, + 14, + 149, + 184, + 10, + 186, + 228, + 84, + 19, + 66, + 27, + 156, + 83, + 11, + 152, + 230, + 146, + 172, + 203, + 6, + 210, + 72, + 226, + 171, + 145, + 138, + 66, + 184, + 218, + 81, + 73, + 74, + 40, + 24, + 224, + 42, + 69, + 20, + 197, + 169, + 86, + 129, + 139, + 70, + 121, + 167, + 129, + 78, + 218, + 61, + 40, + 2, + 2, + 184, + 166, + 17, + 83, + 61, + 68, + 104, + 1, + 134, + 146, + 157, + 183, + 52, + 245, + 140, + 208, + 3, + 0, + 167, + 170, + 154, + 153, + 98, + 169, + 22, + 58, + 0, + 133, + 80, + 212, + 170, + 149, + 32, + 74, + 122, + 173, + 0, + 53, + 35, + 169, + 213, + 40, + 81, + 79, + 20, + 196, + 52, + 168, + 166, + 237, + 167, + 181, + 54, + 128, + 19, + 20, + 134, + 157, + 72, + 104, + 0, + 20, + 240, + 41, + 131, + 173, + 72, + 40, + 0, + 199, + 20, + 211, + 79, + 166, + 181, + 0, + 54, + 138, + 40, + 160, + 4, + 164, + 165, + 162, + 128, + 18, + 138, + 40, + 160, + 4, + 52, + 162, + 131, + 64, + 160, + 7, + 83, + 105, + 105, + 13, + 0, + 45, + 37, + 3, + 165, + 20, + 0, + 225, + 69, + 2, + 138, + 0, + 67, + 74, + 41, + 41, + 104, + 1, + 13, + 37, + 41, + 160, + 80, + 1, + 138, + 41, + 105, + 13, + 0, + 32, + 20, + 199, + 64, + 69, + 74, + 41, + 13, + 1, + 114, + 140, + 144, + 227, + 145, + 76, + 198, + 42, + 241, + 80, + 106, + 39, + 136, + 82, + 177, + 170, + 151, + 114, + 1, + 33, + 20, + 225, + 45, + 35, + 68, + 69, + 70, + 80, + 142, + 162, + 150, + 165, + 89, + 49, + 37, + 195, + 84, + 59, + 42, + 112, + 167, + 210, + 151, + 103, + 181, + 23, + 11, + 34, + 21, + 24, + 167, + 243, + 235, + 65, + 227, + 173, + 52, + 184, + 164, + 14, + 195, + 179, + 64, + 106, + 104, + 96, + 105, + 88, + 99, + 189, + 2, + 208, + 120, + 122, + 112, + 122, + 175, + 186, + 156, + 14, + 105, + 153, + 202, + 37, + 144, + 244, + 22, + 168, + 51, + 138, + 55, + 83, + 51, + 37, + 205, + 45, + 70, + 26, + 141, + 212, + 8, + 150, + 138, + 96, + 106, + 112, + 160, + 7, + 1, + 75, + 73, + 70, + 104, + 1, + 13, + 54, + 156, + 105, + 180, + 202, + 66, + 81, + 138, + 49, + 75, + 64, + 195, + 20, + 210, + 153, + 167, + 210, + 208, + 4, + 70, + 58, + 141, + 163, + 171, + 52, + 220, + 102, + 128, + 42, + 20, + 52, + 131, + 42, + 65, + 29, + 69, + 92, + 216, + 41, + 141, + 22, + 105, + 88, + 9, + 32, + 187, + 32, + 243, + 86, + 126, + 212, + 58, + 26, + 205, + 104, + 200, + 166, + 229, + 128, + 198, + 120, + 160, + 86, + 46, + 205, + 34, + 158, + 65, + 170, + 140, + 115, + 76, + 220, + 125, + 104, + 160, + 74, + 33, + 140, + 154, + 127, + 146, + 253, + 70, + 41, + 189, + 8, + 62, + 245, + 171, + 2, + 171, + 160, + 97, + 206, + 104, + 40, + 205, + 216, + 203, + 247, + 133, + 72, + 166, + 181, + 26, + 221, + 72, + 224, + 85, + 9, + 173, + 138, + 28, + 175, + 79, + 74, + 0, + 23, + 145, + 154, + 112, + 53, + 10, + 57, + 80, + 84, + 211, + 139, + 226, + 129, + 129, + 92, + 209, + 229, + 26, + 156, + 71, + 78, + 242, + 232, + 2, + 5, + 142, + 164, + 84, + 197, + 72, + 22, + 157, + 138, + 0, + 98, + 173, + 72, + 22, + 146, + 156, + 40, + 1, + 49, + 69, + 41, + 164, + 160, + 7, + 169, + 167, + 84, + 64, + 211, + 193, + 166, + 0, + 105, + 40, + 52, + 148, + 0, + 180, + 180, + 218, + 81, + 64, + 130, + 164, + 6, + 153, + 74, + 13, + 0, + 62, + 154, + 105, + 115, + 77, + 52, + 0, + 218, + 90, + 67, + 69, + 0, + 20, + 81, + 69, + 0, + 37, + 20, + 82, + 80, + 2, + 209, + 69, + 37, + 0, + 58, + 144, + 208, + 40, + 52, + 0, + 10, + 40, + 20, + 26, + 0, + 81, + 75, + 72, + 40, + 160, + 5, + 162, + 129, + 65, + 160, + 6, + 154, + 81, + 77, + 61, + 105, + 227, + 165, + 0, + 20, + 148, + 19, + 64, + 160, + 5, + 20, + 134, + 150, + 146, + 128, + 12, + 82, + 26, + 119, + 106, + 109, + 0, + 52, + 168, + 166, + 20, + 6, + 165, + 61, + 41, + 180, + 135, + 113, + 130, + 58, + 82, + 131, + 20, + 252, + 80, + 104, + 11, + 149, + 37, + 135, + 34, + 168, + 200, + 174, + 135, + 145, + 197, + 108, + 227, + 34, + 161, + 146, + 16, + 195, + 165, + 1, + 115, + 36, + 57, + 20, + 227, + 38, + 106, + 121, + 109, + 121, + 202, + 241, + 80, + 52, + 46, + 59, + 102, + 128, + 184, + 221, + 212, + 161, + 241, + 64, + 70, + 238, + 40, + 43, + 237, + 69, + 135, + 113, + 222, + 97, + 52, + 133, + 207, + 189, + 52, + 10, + 93, + 132, + 208, + 72, + 162, + 74, + 145, + 100, + 205, + 66, + 80, + 138, + 104, + 36, + 80, + 43, + 22, + 212, + 212, + 202, + 106, + 172, + 109, + 154, + 152, + 26, + 9, + 177, + 54, + 104, + 205, + 70, + 26, + 141, + 217, + 160, + 7, + 117, + 165, + 2, + 144, + 26, + 118, + 104, + 0, + 197, + 38, + 41, + 212, + 98, + 152, + 13, + 162, + 148, + 241, + 77, + 205, + 5, + 11, + 75, + 138, + 65, + 75, + 64, + 197, + 162, + 138, + 74, + 0, + 66, + 51, + 76, + 104, + 243, + 82, + 82, + 208, + 5, + 70, + 143, + 20, + 208, + 42, + 225, + 80, + 106, + 54, + 142, + 144, + 200, + 113, + 197, + 75, + 107, + 112, + 97, + 125, + 164, + 252, + 167, + 165, + 49, + 144, + 138, + 137, + 135, + 173, + 0, + 205, + 184, + 238, + 20, + 212, + 140, + 21, + 197, + 97, + 44, + 174, + 184, + 193, + 233, + 86, + 224, + 188, + 199, + 90, + 46, + 78, + 168, + 154, + 123, + 117, + 228, + 138, + 162, + 224, + 171, + 98, + 174, + 181, + 192, + 110, + 42, + 9, + 227, + 207, + 43, + 215, + 210, + 129, + 43, + 151, + 194, + 226, + 130, + 41, + 212, + 134, + 153, + 99, + 49, + 69, + 41, + 164, + 164, + 1, + 74, + 40, + 165, + 160, + 2, + 154, + 105, + 198, + 154, + 104, + 1, + 41, + 65, + 164, + 162, + 128, + 29, + 154, + 41, + 185, + 165, + 166, + 2, + 209, + 73, + 75, + 64, + 133, + 20, + 82, + 102, + 150, + 128, + 29, + 154, + 66, + 105, + 185, + 165, + 160, + 0, + 210, + 81, + 73, + 64, + 14, + 162, + 146, + 138, + 0, + 13, + 37, + 6, + 146, + 128, + 22, + 138, + 40, + 160, + 5, + 20, + 26, + 65, + 74, + 104, + 1, + 5, + 41, + 164, + 165, + 160, + 0, + 82, + 211, + 105, + 104, + 1, + 69, + 6, + 138, + 67, + 64, + 9, + 222, + 159, + 218, + 152, + 41, + 212, + 0, + 135, + 173, + 40, + 166, + 247, + 167, + 10, + 0, + 83, + 77, + 165, + 52, + 130, + 128, + 20, + 210, + 80, + 105, + 40, + 0, + 52, + 82, + 210, + 80, + 1, + 64, + 162, + 148, + 10, + 0, + 41, + 166, + 148, + 211, + 77, + 0, + 49, + 134, + 106, + 50, + 128, + 212, + 134, + 144, + 210, + 2, + 22, + 140, + 84, + 47, + 29, + 88, + 106, + 105, + 25, + 160, + 105, + 148, + 202, + 226, + 156, + 132, + 10, + 149, + 210, + 162, + 43, + 138, + 70, + 154, + 50, + 76, + 6, + 21, + 4, + 177, + 227, + 145, + 79, + 12, + 69, + 12, + 217, + 167, + 114, + 92, + 72, + 17, + 182, + 181, + 90, + 67, + 145, + 85, + 138, + 243, + 82, + 33, + 34, + 130, + 92, + 73, + 169, + 69, + 71, + 184, + 210, + 111, + 164, + 46, + 86, + 78, + 41, + 115, + 81, + 7, + 167, + 131, + 154, + 100, + 181, + 98, + 64, + 105, + 217, + 168, + 179, + 138, + 80, + 212, + 18, + 60, + 210, + 98, + 141, + 212, + 103, + 52, + 20, + 152, + 162, + 150, + 144, + 80, + 77, + 49, + 129, + 162, + 146, + 148, + 80, + 49, + 104, + 162, + 138, + 0, + 41, + 40, + 205, + 20, + 0, + 48, + 205, + 68, + 209, + 230, + 165, + 162, + 128, + 42, + 50, + 17, + 77, + 239, + 87, + 25, + 65, + 168, + 26, + 63, + 74, + 67, + 22, + 35, + 205, + 94, + 136, + 2, + 167, + 214, + 179, + 134, + 84, + 212, + 209, + 205, + 182, + 128, + 52, + 168, + 162, + 138, + 96, + 33, + 164, + 165, + 52, + 148, + 0, + 82, + 138, + 74, + 81, + 64, + 5, + 52, + 211, + 169, + 13, + 0, + 51, + 52, + 180, + 134, + 147, + 52, + 128, + 90, + 40, + 162, + 128, + 22, + 150, + 144, + 82, + 211, + 16, + 82, + 211, + 105, + 104, + 0, + 52, + 102, + 138, + 74, + 0, + 90, + 41, + 40, + 160, + 5, + 20, + 180, + 218, + 117, + 0, + 6, + 155, + 75, + 73, + 64, + 5, + 45, + 37, + 20, + 0, + 180, + 166, + 155, + 74, + 40, + 1, + 41, + 212, + 134, + 129, + 64, + 5, + 45, + 37, + 45, + 0, + 20, + 134, + 150, + 131, + 64, + 8, + 41, + 104, + 20, + 26, + 0, + 65, + 214, + 157, + 72, + 41, + 77, + 0, + 38, + 104, + 164, + 165, + 52, + 0, + 148, + 148, + 80, + 41, + 0, + 180, + 148, + 166, + 155, + 64, + 14, + 20, + 164, + 224, + 82, + 10, + 70, + 60, + 208, + 0, + 77, + 48, + 210, + 230, + 154, + 104, + 0, + 205, + 53, + 141, + 6, + 152, + 78, + 77, + 2, + 18, + 138, + 92, + 81, + 76, + 119, + 26, + 121, + 166, + 148, + 205, + 72, + 5, + 46, + 41, + 14, + 246, + 42, + 180, + 120, + 166, + 109, + 53, + 105, + 133, + 33, + 81, + 69, + 138, + 230, + 43, + 109, + 52, + 157, + 42, + 206, + 193, + 81, + 201, + 22, + 69, + 43, + 7, + 49, + 17, + 97, + 73, + 156, + 211, + 29, + 89, + 79, + 52, + 208, + 196, + 81, + 97, + 92, + 144, + 154, + 150, + 39, + 207, + 94, + 181, + 88, + 181, + 10, + 196, + 28, + 138, + 44, + 15, + 82, + 254, + 51, + 205, + 55, + 165, + 64, + 39, + 32, + 82, + 25, + 205, + 51, + 59, + 22, + 5, + 58, + 170, + 172, + 245, + 58, + 48, + 122, + 5, + 97, + 251, + 169, + 65, + 166, + 26, + 1, + 197, + 5, + 34, + 81, + 75, + 81, + 238, + 163, + 125, + 49, + 146, + 82, + 19, + 76, + 221, + 154, + 112, + 160, + 2, + 150, + 147, + 52, + 153, + 205, + 0, + 59, + 52, + 82, + 1, + 78, + 197, + 0, + 38, + 41, + 112, + 41, + 105, + 40, + 2, + 55, + 140, + 30, + 149, + 11, + 41, + 90, + 181, + 138, + 99, + 224, + 210, + 25, + 127, + 52, + 102, + 152, + 13, + 25, + 166, + 33, + 212, + 83, + 115, + 70, + 104, + 24, + 234, + 41, + 51, + 75, + 154, + 0, + 90, + 67, + 70, + 105, + 51, + 64, + 8, + 105, + 180, + 166, + 146, + 144, + 5, + 45, + 54, + 148, + 80, + 2, + 210, + 210, + 10, + 90, + 0, + 40, + 162, + 150, + 152, + 9, + 69, + 20, + 80, + 33, + 41, + 105, + 41, + 69, + 3, + 10, + 81, + 73, + 69, + 2, + 22, + 138, + 5, + 20, + 0, + 148, + 80, + 104, + 160, + 5, + 165, + 20, + 130, + 148, + 117, + 160, + 4, + 52, + 14, + 148, + 166, + 129, + 64, + 9, + 75, + 65, + 162, + 128, + 10, + 67, + 210, + 150, + 144, + 208, + 2, + 138, + 70, + 165, + 20, + 134, + 128, + 20, + 80, + 104, + 20, + 134, + 128, + 20, + 83, + 77, + 40, + 164, + 61, + 104, + 0, + 165, + 20, + 218, + 90, + 64, + 6, + 144, + 10, + 94, + 244, + 80, + 2, + 246, + 166, + 26, + 113, + 52, + 194, + 104, + 0, + 166, + 147, + 65, + 52, + 210, + 104, + 1, + 24, + 211, + 69, + 7, + 154, + 112, + 20, + 0, + 82, + 80, + 77, + 40, + 20, + 8, + 81, + 77, + 38, + 148, + 154, + 105, + 160, + 98, + 19, + 69, + 20, + 184, + 166, + 48, + 20, + 238, + 212, + 152, + 160, + 208, + 34, + 55, + 140, + 53, + 87, + 120, + 57, + 226, + 173, + 209, + 138, + 0, + 207, + 48, + 176, + 247, + 166, + 148, + 35, + 168, + 173, + 45, + 163, + 210, + 152, + 241, + 2, + 40, + 25, + 68, + 10, + 112, + 140, + 183, + 74, + 145, + 227, + 218, + 104, + 70, + 218, + 121, + 165, + 113, + 242, + 144, + 188, + 108, + 189, + 105, + 98, + 147, + 99, + 123, + 85, + 167, + 42, + 233, + 84, + 221, + 112, + 77, + 2, + 177, + 125, + 126, + 97, + 72, + 86, + 162, + 182, + 147, + 229, + 193, + 169, + 201, + 20, + 10, + 196, + 102, + 129, + 79, + 192, + 166, + 154, + 6, + 38, + 113, + 73, + 184, + 210, + 227, + 52, + 108, + 197, + 0, + 56, + 26, + 112, + 168, + 233, + 115, + 64, + 18, + 131, + 75, + 81, + 110, + 167, + 6, + 166, + 33, + 249, + 164, + 205, + 55, + 52, + 229, + 92, + 154, + 6, + 39, + 38, + 148, + 33, + 53, + 42, + 160, + 21, + 32, + 90, + 4, + 68, + 31, + 222, + 157, + 190, + 170, + 134, + 165, + 15, + 64, + 22, + 119, + 82, + 238, + 170, + 251, + 233, + 119, + 208, + 4, + 251, + 169, + 67, + 84, + 27, + 233, + 67, + 251, + 208, + 50, + 124, + 209, + 154, + 132, + 61, + 59, + 117, + 0, + 63, + 52, + 83, + 55, + 81, + 186, + 128, + 29, + 75, + 76, + 13, + 75, + 154, + 64, + 58, + 151, + 52, + 204, + 210, + 230, + 128, + 29, + 154, + 90, + 102, + 105, + 65, + 160, + 7, + 81, + 73, + 154, + 51, + 76, + 5, + 164, + 165, + 164, + 52, + 8, + 90, + 81, + 72, + 41, + 104, + 0, + 165, + 164, + 162, + 128, + 3, + 72, + 41, + 105, + 40, + 24, + 180, + 119, + 162, + 138, + 4, + 58, + 147, + 189, + 3, + 165, + 33, + 160, + 5, + 52, + 148, + 238, + 212, + 134, + 128, + 10, + 67, + 75, + 218, + 147, + 189, + 0, + 40, + 233, + 72, + 122, + 211, + 135, + 74, + 111, + 122, + 0, + 112, + 166, + 181, + 58, + 152, + 122, + 208, + 1, + 69, + 6, + 138, + 64, + 20, + 81, + 69, + 0, + 20, + 82, + 226, + 154, + 78, + 40, + 1, + 24, + 211, + 77, + 41, + 52, + 210, + 104, + 1, + 9, + 166, + 19, + 74, + 77, + 37, + 0, + 20, + 19, + 69, + 24, + 160, + 1, + 69, + 41, + 52, + 180, + 210, + 104, + 0, + 205, + 37, + 2, + 150, + 128, + 0, + 41, + 104, + 20, + 180, + 8, + 67, + 73, + 75, + 138, + 40, + 24, + 152, + 165, + 197, + 20, + 83, + 0, + 165, + 164, + 160, + 154, + 0, + 99, + 160, + 53, + 93, + 163, + 32, + 241, + 86, + 186, + 208, + 84, + 82, + 101, + 41, + 88, + 170, + 20, + 210, + 249, + 89, + 169, + 138, + 138, + 80, + 49, + 83, + 99, + 69, + 36, + 68, + 176, + 227, + 165, + 56, + 198, + 64, + 167, + 25, + 54, + 212, + 77, + 113, + 158, + 49, + 70, + 163, + 109, + 13, + 36, + 138, + 64, + 248, + 60, + 211, + 131, + 3, + 214, + 163, + 124, + 3, + 193, + 166, + 77, + 211, + 44, + 166, + 8, + 167, + 98, + 171, + 195, + 38, + 14, + 13, + 88, + 200, + 245, + 20, + 204, + 216, + 155, + 105, + 8, + 197, + 56, + 178, + 250, + 138, + 122, + 174, + 104, + 2, + 29, + 140, + 123, + 82, + 133, + 34, + 172, + 236, + 20, + 108, + 20, + 1, + 92, + 3, + 82, + 47, + 20, + 242, + 148, + 155, + 40, + 1, + 85, + 170, + 64, + 213, + 14, + 49, + 74, + 51, + 76, + 69, + 32, + 212, + 224, + 106, + 46, + 65, + 165, + 230, + 128, + 37, + 205, + 4, + 212, + 91, + 141, + 46, + 250, + 0, + 126, + 227, + 75, + 186, + 153, + 154, + 76, + 208, + 4, + 161, + 233, + 68, + 149, + 14, + 105, + 51, + 64, + 203, + 30, + 101, + 46, + 250, + 173, + 186, + 141, + 212, + 1, + 104, + 61, + 59, + 125, + 84, + 223, + 74, + 36, + 164, + 5, + 176, + 244, + 187, + 170, + 168, + 146, + 156, + 36, + 160, + 11, + 1, + 169, + 115, + 85, + 252, + 202, + 80, + 244, + 1, + 100, + 53, + 46, + 106, + 184, + 122, + 120, + 122, + 0, + 155, + 52, + 185, + 168, + 67, + 211, + 131, + 83, + 16, + 252, + 211, + 129, + 168, + 243, + 64, + 106, + 6, + 73, + 154, + 51, + 76, + 13, + 75, + 154, + 4, + 62, + 146, + 147, + 52, + 102, + 128, + 22, + 129, + 73, + 154, + 1, + 160, + 99, + 168, + 164, + 205, + 58, + 129, + 0, + 164, + 61, + 105, + 65, + 164, + 99, + 205, + 0, + 56, + 83, + 123, + 211, + 135, + 74, + 105, + 235, + 64, + 14, + 166, + 142, + 180, + 189, + 168, + 29, + 104, + 1, + 79, + 74, + 104, + 20, + 227, + 210, + 146, + 128, + 16, + 210, + 80, + 122, + 208, + 41, + 12, + 40, + 29, + 104, + 52, + 10, + 0, + 92, + 211, + 24, + 211, + 141, + 70, + 79, + 52, + 0, + 134, + 154, + 77, + 41, + 52, + 195, + 64, + 131, + 189, + 7, + 165, + 2, + 142, + 180, + 0, + 10, + 119, + 74, + 49, + 72, + 77, + 0, + 33, + 52, + 222, + 166, + 148, + 210, + 168, + 160, + 2, + 150, + 138, + 90, + 0, + 40, + 163, + 52, + 153, + 160, + 66, + 210, + 81, + 69, + 0, + 45, + 38, + 104, + 164, + 235, + 64, + 192, + 154, + 0, + 245, + 165, + 2, + 130, + 113, + 76, + 5, + 233, + 77, + 38, + 147, + 57, + 162, + 144, + 1, + 164, + 205, + 20, + 1, + 64, + 198, + 178, + 110, + 170, + 237, + 17, + 86, + 207, + 106, + 186, + 5, + 46, + 192, + 221, + 104, + 2, + 159, + 24, + 168, + 159, + 173, + 95, + 54, + 234, + 121, + 168, + 154, + 219, + 39, + 138, + 161, + 20, + 128, + 57, + 205, + 56, + 150, + 245, + 53, + 57, + 183, + 101, + 167, + 165, + 179, + 55, + 53, + 37, + 40, + 54, + 83, + 220, + 222, + 181, + 61, + 181, + 201, + 86, + 10, + 221, + 42, + 211, + 89, + 169, + 82, + 49, + 205, + 103, + 75, + 25, + 141, + 202, + 159, + 194, + 128, + 105, + 163, + 104, + 124, + 192, + 17, + 78, + 11, + 138, + 169, + 97, + 56, + 120, + 182, + 158, + 163, + 138, + 180, + 77, + 2, + 3, + 138, + 76, + 81, + 69, + 48, + 19, + 104, + 164, + 34, + 157, + 73, + 72, + 12, + 236, + 211, + 131, + 0, + 42, + 51, + 72, + 104, + 1, + 204, + 71, + 106, + 101, + 20, + 148, + 192, + 51, + 70, + 234, + 67, + 69, + 0, + 46, + 234, + 55, + 83, + 77, + 33, + 160, + 7, + 238, + 163, + 53, + 29, + 38, + 105, + 1, + 38, + 104, + 205, + 71, + 154, + 93, + 212, + 1, + 38, + 104, + 221, + 81, + 238, + 165, + 205, + 0, + 73, + 190, + 151, + 125, + 69, + 154, + 51, + 64, + 19, + 9, + 41, + 194, + 74, + 175, + 154, + 80, + 104, + 2, + 208, + 146, + 156, + 36, + 170, + 129, + 169, + 193, + 205, + 0, + 92, + 18, + 82, + 239, + 170, + 98, + 74, + 112, + 146, + 128, + 45, + 135, + 167, + 7, + 170, + 98, + 74, + 120, + 150, + 128, + 45, + 134, + 163, + 117, + 86, + 18, + 83, + 132, + 148, + 8, + 177, + 186, + 151, + 53, + 95, + 127, + 189, + 40, + 122, + 6, + 88, + 205, + 56, + 30, + 42, + 184, + 122, + 112, + 122, + 98, + 38, + 205, + 33, + 166, + 110, + 160, + 181, + 32, + 37, + 7, + 138, + 66, + 121, + 166, + 134, + 226, + 147, + 119, + 52, + 192, + 147, + 60, + 80, + 180, + 132, + 241, + 66, + 244, + 160, + 7, + 26, + 15, + 74, + 76, + 243, + 72, + 199, + 138, + 0, + 67, + 75, + 208, + 82, + 82, + 147, + 72, + 97, + 214, + 131, + 66, + 243, + 72, + 79, + 52, + 0, + 140, + 105, + 148, + 164, + 210, + 30, + 148, + 0, + 195, + 73, + 74, + 104, + 160, + 65, + 64, + 20, + 80, + 120, + 20, + 0, + 140, + 123, + 82, + 81, + 69, + 0, + 40, + 162, + 138, + 81, + 64, + 11, + 70, + 105, + 51, + 69, + 0, + 20, + 82, + 81, + 154, + 0, + 92, + 210, + 81, + 74, + 40, + 0, + 162, + 130, + 105, + 40, + 0, + 205, + 37, + 24, + 165, + 197, + 0, + 37, + 20, + 224, + 185, + 167, + 170, + 122, + 208, + 49, + 129, + 105, + 225, + 105, + 248, + 20, + 102, + 128, + 16, + 10, + 56, + 163, + 52, + 98, + 128, + 14, + 180, + 160, + 98, + 140, + 82, + 226, + 128, + 16, + 174, + 69, + 75, + 22, + 7, + 20, + 202, + 51, + 233, + 65, + 81, + 149, + 139, + 91, + 21, + 133, + 85, + 158, + 193, + 101, + 52, + 244, + 144, + 173, + 72, + 38, + 205, + 35, + 68, + 251, + 20, + 225, + 176, + 48, + 190, + 65, + 169, + 153, + 8, + 21, + 41, + 157, + 7, + 83, + 81, + 189, + 196, + 126, + 180, + 21, + 107, + 238, + 136, + 139, + 17, + 66, + 182, + 69, + 13, + 34, + 176, + 227, + 165, + 68, + 14, + 27, + 61, + 168, + 184, + 156, + 19, + 216, + 155, + 147, + 64, + 197, + 38, + 105, + 165, + 169, + 152, + 20, + 240, + 49, + 76, + 35, + 52, + 19, + 64, + 52, + 0, + 155, + 105, + 10, + 210, + 150, + 163, + 52, + 0, + 194, + 40, + 197, + 41, + 164, + 160, + 4, + 197, + 33, + 20, + 236, + 210, + 26, + 0, + 110, + 40, + 197, + 20, + 185, + 160, + 6, + 17, + 73, + 74, + 105, + 40, + 0, + 162, + 151, + 20, + 80, + 2, + 102, + 140, + 209, + 73, + 64, + 11, + 154, + 92, + 211, + 104, + 160, + 7, + 102, + 151, + 52, + 202, + 51, + 64, + 18, + 102, + 140, + 211, + 51, + 70, + 104, + 17, + 38, + 234, + 3, + 83, + 51, + 70, + 104, + 25, + 32, + 122, + 112, + 146, + 161, + 205, + 25, + 160, + 9, + 196, + 180, + 225, + 45, + 86, + 205, + 46, + 104, + 17, + 104, + 75, + 79, + 18, + 85, + 45, + 212, + 224, + 244, + 1, + 120, + 73, + 75, + 191, + 53, + 68, + 72, + 105, + 226, + 90, + 0, + 188, + 175, + 75, + 191, + 154, + 166, + 37, + 167, + 9, + 40, + 2, + 222, + 250, + 120, + 108, + 10, + 168, + 36, + 230, + 159, + 230, + 10, + 0, + 177, + 186, + 130, + 213, + 8, + 146, + 147, + 126, + 104, + 2, + 112, + 105, + 73, + 168, + 85, + 169, + 219, + 168, + 25, + 42, + 156, + 10, + 97, + 106, + 105, + 110, + 41, + 3, + 80, + 3, + 179, + 77, + 38, + 130, + 105, + 185, + 160, + 5, + 160, + 243, + 72, + 79, + 20, + 10, + 4, + 56, + 83, + 73, + 205, + 12, + 123, + 83, + 73, + 197, + 0, + 25, + 165, + 166, + 129, + 78, + 160, + 2, + 151, + 52, + 148, + 80, + 2, + 209, + 154, + 76, + 210, + 103, + 52, + 0, + 185, + 160, + 10, + 5, + 25, + 160, + 5, + 163, + 52, + 128, + 19, + 205, + 56, + 10, + 0, + 74, + 80, + 13, + 56, + 10, + 81, + 64, + 8, + 22, + 156, + 22, + 138, + 92, + 208, + 2, + 241, + 70, + 64, + 164, + 205, + 39, + 214, + 129, + 139, + 146, + 104, + 197, + 25, + 163, + 4, + 208, + 1, + 74, + 5, + 20, + 100, + 10, + 0, + 117, + 55, + 52, + 18, + 77, + 37, + 0, + 47, + 214, + 151, + 52, + 153, + 164, + 205, + 0, + 41, + 57, + 163, + 52, + 153, + 166, + 231, + 52, + 0, + 147, + 13, + 195, + 138, + 130, + 220, + 1, + 57, + 73, + 122, + 30, + 149, + 99, + 32, + 84, + 82, + 168, + 111, + 241, + 161, + 104, + 59, + 182, + 93, + 146, + 202, + 54, + 79, + 221, + 146, + 167, + 235, + 84, + 138, + 188, + 124, + 54, + 13, + 42, + 207, + 112, + 139, + 140, + 238, + 30, + 245, + 28, + 146, + 187, + 117, + 171, + 178, + 96, + 164, + 208, + 166, + 82, + 56, + 197, + 48, + 220, + 98, + 153, + 147, + 233, + 77, + 49, + 150, + 228, + 82, + 208, + 45, + 39, + 168, + 210, + 105, + 51, + 75, + 73, + 80, + 32, + 205, + 37, + 20, + 83, + 0, + 162, + 150, + 146, + 128, + 12, + 82, + 17, + 78, + 164, + 52, + 0, + 218, + 67, + 78, + 160, + 142, + 40, + 2, + 58, + 5, + 46, + 40, + 20, + 0, + 80, + 105, + 113, + 73, + 64, + 9, + 69, + 46, + 40, + 197, + 0, + 54, + 146, + 156, + 69, + 37, + 0, + 38, + 40, + 197, + 45, + 20, + 0, + 148, + 82, + 226, + 140, + 80, + 3, + 105, + 104, + 162, + 128, + 12, + 209, + 154, + 40, + 160, + 3, + 52, + 185, + 166, + 209, + 64, + 14, + 205, + 25, + 166, + 210, + 208, + 2, + 230, + 148, + 26, + 110, + 104, + 205, + 0, + 72, + 13, + 40, + 106, + 143, + 52, + 185, + 160, + 68, + 161, + 141, + 59, + 204, + 53, + 14, + 104, + 205, + 0, + 79, + 230, + 82, + 137, + 42, + 12, + 209, + 154, + 6, + 90, + 18, + 251, + 211, + 132, + 158, + 245, + 83, + 117, + 46, + 234, + 0, + 183, + 190, + 148, + 61, + 84, + 13, + 75, + 190, + 129, + 22, + 183, + 210, + 131, + 85, + 119, + 211, + 188, + 202, + 6, + 88, + 13, + 147, + 75, + 187, + 21, + 2, + 189, + 59, + 125, + 0, + 73, + 158, + 244, + 148, + 205, + 249, + 167, + 3, + 64, + 15, + 20, + 102, + 155, + 186, + 147, + 52, + 8, + 126, + 104, + 206, + 41, + 185, + 164, + 201, + 38, + 128, + 23, + 57, + 167, + 1, + 72, + 56, + 165, + 28, + 208, + 3, + 168, + 3, + 214, + 147, + 112, + 20, + 110, + 160, + 99, + 233, + 105, + 180, + 185, + 160, + 7, + 10, + 90, + 102, + 113, + 73, + 147, + 64, + 15, + 38, + 138, + 109, + 40, + 160, + 7, + 81, + 140, + 209, + 70, + 104, + 1, + 104, + 205, + 38, + 105, + 40, + 1, + 73, + 205, + 2, + 146, + 130, + 212, + 0, + 185, + 163, + 52, + 220, + 209, + 154, + 0, + 113, + 52, + 220, + 210, + 82, + 80, + 3, + 179, + 73, + 187, + 210, + 147, + 25, + 165, + 2, + 128, + 27, + 131, + 78, + 197, + 46, + 40, + 160, + 4, + 197, + 5, + 70, + 58, + 82, + 224, + 154, + 92, + 80, + 2, + 219, + 198, + 164, + 242, + 42, + 219, + 90, + 161, + 31, + 47, + 6, + 170, + 3, + 138, + 179, + 20, + 248, + 24, + 106, + 70, + 188, + 215, + 90, + 24, + 152, + 163, + 20, + 180, + 26, + 102, + 66, + 98, + 147, + 20, + 185, + 164, + 205, + 0, + 24, + 162, + 140, + 209, + 64, + 9, + 69, + 45, + 20, + 0, + 148, + 134, + 150, + 138, + 0, + 105, + 20, + 218, + 147, + 20, + 210, + 40, + 0, + 83, + 65, + 2, + 155, + 74, + 40, + 0, + 197, + 4, + 98, + 156, + 40, + 52, + 0, + 218, + 76, + 83, + 177, + 70, + 40, + 1, + 184, + 164, + 197, + 59, + 20, + 184, + 160, + 6, + 80, + 105, + 77, + 20, + 0, + 218, + 41, + 113, + 69, + 0, + 37, + 37, + 45, + 37, + 0, + 20, + 82, + 226, + 140, + 80, + 2, + 81, + 75, + 69, + 0, + 54, + 138, + 90, + 40, + 1, + 41, + 105, + 113, + 73, + 64, + 6, + 104, + 205, + 20, + 98, + 128, + 12, + 210, + 230, + 146, + 146, + 128, + 31, + 154, + 51, + 76, + 165, + 160, + 7, + 230, + 140, + 211, + 51, + 70, + 104, + 1, + 249, + 165, + 13, + 81, + 230, + 151, + 52, + 1, + 46, + 234, + 55, + 212, + 89, + 163, + 52, + 1, + 48, + 122, + 112, + 144, + 212, + 25, + 165, + 205, + 2, + 44, + 9, + 41, + 67, + 138, + 173, + 186, + 148, + 53, + 0, + 90, + 15, + 154, + 118, + 225, + 85, + 55, + 210, + 239, + 52, + 1, + 103, + 117, + 27, + 170, + 0, + 244, + 224, + 244, + 12, + 155, + 117, + 40, + 53, + 14, + 250, + 55, + 208, + 5, + 141, + 254, + 244, + 190, + 103, + 165, + 86, + 221, + 78, + 221, + 64, + 19, + 230, + 157, + 154, + 128, + 61, + 56, + 61, + 0, + 76, + 41, + 217, + 168, + 60, + 202, + 93, + 244, + 1, + 46, + 105, + 115, + 81, + 110, + 165, + 6, + 128, + 31, + 156, + 209, + 154, + 110, + 105, + 104, + 1, + 104, + 164, + 205, + 25, + 160, + 5, + 205, + 37, + 37, + 40, + 20, + 0, + 180, + 119, + 162, + 140, + 226, + 128, + 23, + 20, + 82, + 82, + 208, + 1, + 74, + 5, + 37, + 45, + 0, + 45, + 20, + 82, + 226, + 128, + 18, + 148, + 113, + 69, + 37, + 0, + 102, + 102, + 140, + 210, + 81, + 64, + 5, + 20, + 81, + 64, + 9, + 69, + 20, + 80, + 1, + 154, + 51, + 69, + 20, + 0, + 81, + 69, + 20, + 0, + 185, + 164, + 52, + 81, + 138, + 0, + 109, + 40, + 163, + 20, + 80, + 2, + 138, + 90, + 74, + 40, + 0, + 162, + 150, + 146, + 128, + 18, + 138, + 13, + 37, + 0, + 20, + 148, + 81, + 64, + 1, + 164, + 165, + 164, + 160, + 4, + 165, + 3, + 52, + 83, + 150, + 128, + 19, + 20, + 148, + 243, + 77, + 197, + 0, + 20, + 152, + 167, + 98, + 140, + 80, + 3, + 49, + 69, + 56, + 138, + 109, + 0, + 20, + 98, + 138, + 90, + 0, + 76, + 81, + 75, + 138, + 40, + 1, + 40, + 197, + 45, + 20, + 0, + 218, + 49, + 78, + 197, + 37, + 0, + 38, + 40, + 197, + 45, + 24, + 160, + 4, + 162, + 151, + 20, + 98, + 128, + 27, + 75, + 75, + 138, + 76, + 80, + 1, + 70, + 104, + 162, + 128, + 12, + 210, + 230, + 155, + 69, + 0, + 59, + 52, + 185, + 166, + 82, + 208, + 3, + 247, + 82, + 238, + 168, + 232, + 205, + 0, + 73, + 154, + 112, + 53, + 14, + 105, + 119, + 80, + 4, + 185, + 167, + 3, + 80, + 238, + 165, + 221, + 64, + 18, + 238, + 167, + 110, + 168, + 119, + 81, + 190, + 129, + 19, + 239, + 165, + 15, + 85, + 247, + 81, + 186, + 129, + 150, + 131, + 138, + 112, + 122, + 167, + 188, + 210, + 135, + 52, + 1, + 112, + 61, + 47, + 152, + 42, + 160, + 115, + 78, + 18, + 80, + 5, + 173, + 212, + 160, + 213, + 97, + 37, + 60, + 73, + 239, + 64, + 22, + 5, + 46, + 106, + 0, + 227, + 214, + 148, + 73, + 233, + 64, + 19, + 102, + 138, + 136, + 62, + 105, + 226, + 128, + 31, + 69, + 38, + 69, + 46, + 234, + 96, + 59, + 20, + 188, + 83, + 55, + 81, + 147, + 64, + 15, + 205, + 38, + 105, + 180, + 102, + 128, + 29, + 146, + 122, + 10, + 79, + 169, + 164, + 205, + 46, + 40, + 3, + 54, + 138, + 90, + 74, + 64, + 20, + 81, + 69, + 0, + 20, + 81, + 74, + 5, + 0, + 38, + 41, + 113, + 78, + 2, + 151, + 20, + 0, + 221, + 185, + 160, + 47, + 173, + 60, + 10, + 13, + 0, + 51, + 20, + 109, + 167, + 98, + 151, + 20, + 1, + 25, + 90, + 77, + 166, + 164, + 163, + 20, + 1, + 17, + 20, + 84, + 165, + 105, + 187, + 115, + 64, + 12, + 162, + 159, + 178, + 154, + 84, + 138, + 0, + 109, + 24, + 162, + 150, + 128, + 19, + 20, + 152, + 167, + 138, + 49, + 64, + 12, + 197, + 38, + 42, + 77, + 180, + 190, + 94, + 122, + 26, + 0, + 139, + 20, + 229, + 20, + 237, + 148, + 109, + 34, + 128, + 19, + 20, + 98, + 164, + 85, + 207, + 74, + 93, + 180, + 1, + 22, + 40, + 197, + 76, + 83, + 142, + 105, + 152, + 197, + 2, + 35, + 52, + 211, + 82, + 17, + 154, + 110, + 218, + 6, + 51, + 20, + 83, + 241, + 73, + 138, + 0, + 5, + 33, + 20, + 184, + 165, + 20, + 128, + 76, + 80, + 69, + 56, + 12, + 210, + 149, + 226, + 152, + 12, + 2, + 140, + 84, + 138, + 51, + 74, + 83, + 61, + 40, + 2, + 44, + 82, + 133, + 6, + 164, + 85, + 193, + 228, + 83, + 138, + 103, + 154, + 4, + 67, + 182, + 147, + 21, + 57, + 92, + 10, + 105, + 90, + 0, + 139, + 109, + 33, + 21, + 54, + 195, + 138, + 97, + 90, + 6, + 69, + 138, + 92, + 83, + 246, + 211, + 130, + 113, + 64, + 16, + 226, + 147, + 21, + 49, + 90, + 54, + 80, + 34, + 26, + 42, + 66, + 148, + 220, + 80, + 49, + 184, + 163, + 20, + 236, + 81, + 138, + 0, + 110, + 40, + 197, + 63, + 20, + 160, + 80, + 4, + 116, + 84, + 187, + 65, + 163, + 101, + 0, + 69, + 69, + 60, + 165, + 38, + 202, + 0, + 110, + 104, + 205, + 46, + 211, + 73, + 180, + 208, + 1, + 154, + 92, + 210, + 96, + 210, + 80, + 3, + 247, + 82, + 238, + 168, + 232, + 160, + 9, + 119, + 81, + 186, + 162, + 165, + 205, + 0, + 74, + 26, + 156, + 31, + 21, + 6, + 104, + 220, + 104, + 2, + 200, + 152, + 138, + 81, + 63, + 174, + 106, + 182, + 234, + 55, + 80, + 5, + 193, + 61, + 40, + 153, + 125, + 106, + 158, + 234, + 3, + 80, + 5, + 241, + 40, + 167, + 9, + 1, + 239, + 89, + 225, + 169, + 194, + 66, + 58, + 26, + 0, + 208, + 7, + 52, + 241, + 129, + 212, + 214, + 112, + 149, + 255, + 0, + 189, + 78, + 23, + 12, + 58, + 80, + 6, + 134, + 71, + 108, + 81, + 154, + 162, + 46, + 143, + 112, + 105, + 226, + 235, + 212, + 145, + 64, + 16, + 209, + 69, + 20, + 0, + 81, + 75, + 138, + 80, + 40, + 0, + 2, + 151, + 20, + 82, + 226, + 128, + 16, + 82, + 226, + 148, + 10, + 90, + 0, + 65, + 70, + 41, + 113, + 78, + 81, + 154, + 0, + 102, + 40, + 197, + 72, + 20, + 131, + 200, + 167, + 4, + 207, + 74, + 4, + 68, + 22, + 156, + 20, + 131, + 210, + 164, + 9, + 159, + 106, + 112, + 66, + 58, + 242, + 40, + 2, + 45, + 185, + 228, + 82, + 21, + 252, + 42, + 113, + 16, + 7, + 57, + 165, + 49, + 43, + 0, + 121, + 205, + 0, + 86, + 35, + 29, + 105, + 54, + 102, + 173, + 42, + 1, + 195, + 12, + 138, + 99, + 197, + 142, + 87, + 183, + 106, + 0, + 172, + 209, + 122, + 84, + 108, + 164, + 28, + 17, + 86, + 192, + 207, + 4, + 98, + 134, + 140, + 227, + 145, + 145, + 64, + 20, + 241, + 74, + 42, + 82, + 189, + 197, + 38, + 40, + 24, + 139, + 205, + 72, + 19, + 34, + 145, + 87, + 154, + 157, + 70, + 70, + 59, + 208, + 34, + 185, + 86, + 7, + 145, + 82, + 44, + 109, + 212, + 98, + 167, + 80, + 113, + 200, + 167, + 4, + 83, + 200, + 52, + 1, + 92, + 41, + 207, + 60, + 26, + 118, + 56, + 228, + 228, + 84, + 254, + 82, + 158, + 185, + 165, + 88, + 130, + 244, + 230, + 152, + 16, + 36, + 106, + 71, + 77, + 194, + 145, + 237, + 129, + 63, + 40, + 252, + 42, + 206, + 0, + 57, + 65, + 131, + 78, + 228, + 143, + 152, + 99, + 222, + 139, + 1, + 156, + 96, + 113, + 198, + 204, + 123, + 210, + 27, + 121, + 113, + 194, + 230, + 180, + 88, + 28, + 122, + 251, + 83, + 20, + 140, + 245, + 160, + 12, + 243, + 19, + 255, + 0, + 118, + 147, + 103, + 168, + 173, + 22, + 68, + 110, + 163, + 6, + 161, + 104, + 121, + 228, + 100, + 122, + 210, + 2, + 145, + 90, + 54, + 85, + 179, + 26, + 142, + 212, + 194, + 128, + 30, + 40, + 25, + 92, + 3, + 82, + 162, + 83, + 246, + 110, + 232, + 106, + 72, + 227, + 35, + 169, + 252, + 168, + 1, + 133, + 9, + 31, + 119, + 241, + 164, + 242, + 88, + 115, + 144, + 69, + 91, + 10, + 0, + 192, + 52, + 129, + 121, + 226, + 152, + 138, + 202, + 138, + 79, + 244, + 167, + 52, + 64, + 253, + 213, + 199, + 210, + 172, + 50, + 17, + 252, + 31, + 136, + 160, + 131, + 140, + 142, + 148, + 1, + 92, + 167, + 24, + 52, + 198, + 32, + 13, + 180, + 242, + 75, + 103, + 28, + 84, + 123, + 79, + 122, + 6, + 48, + 211, + 74, + 212, + 187, + 9, + 233, + 79, + 72, + 115, + 157, + 199, + 240, + 160, + 8, + 22, + 61, + 222, + 212, + 255, + 0, + 40, + 127, + 123, + 53, + 58, + 109, + 7, + 0, + 83, + 138, + 131, + 212, + 98, + 129, + 21, + 76, + 100, + 159, + 148, + 126, + 116, + 155, + 8, + 225, + 134, + 42, + 210, + 198, + 1, + 228, + 230, + 134, + 69, + 206, + 49, + 145, + 239, + 64, + 21, + 74, + 119, + 164, + 242, + 131, + 115, + 147, + 86, + 152, + 42, + 253, + 209, + 138, + 140, + 224, + 115, + 72, + 8, + 76, + 4, + 143, + 148, + 31, + 198, + 154, + 97, + 112, + 50, + 203, + 129, + 235, + 86, + 87, + 6, + 158, + 67, + 145, + 128, + 163, + 31, + 90, + 96, + 81, + 219, + 218, + 141, + 181, + 113, + 226, + 82, + 159, + 195, + 159, + 106, + 132, + 196, + 223, + 195, + 243, + 123, + 82, + 25, + 14, + 49, + 74, + 58, + 243, + 210, + 165, + 242, + 159, + 25, + 101, + 219, + 245, + 166, + 99, + 214, + 128, + 2, + 3, + 30, + 56, + 160, + 197, + 142, + 167, + 63, + 74, + 49, + 74, + 164, + 175, + 67, + 64, + 12, + 242, + 206, + 122, + 99, + 235, + 65, + 136, + 142, + 184, + 252, + 42, + 98, + 225, + 254, + 247, + 90, + 80, + 85, + 184, + 166, + 34, + 182, + 206, + 105, + 193, + 20, + 241, + 142, + 106, + 103, + 141, + 71, + 1, + 178, + 105, + 86, + 54, + 3, + 56, + 11, + 64, + 202, + 230, + 46, + 51, + 180, + 143, + 173, + 55, + 203, + 207, + 74, + 178, + 120, + 61, + 115, + 77, + 145, + 193, + 198, + 209, + 131, + 64, + 21, + 74, + 81, + 229, + 228, + 84, + 164, + 82, + 162, + 130, + 121, + 206, + 61, + 169, + 1, + 1, + 67, + 73, + 138, + 180, + 209, + 131, + 247, + 120, + 250, + 212, + 102, + 50, + 78, + 0, + 160, + 8, + 113, + 70, + 41, + 228, + 96, + 224, + 209, + 182, + 128, + 25, + 73, + 79, + 218, + 71, + 81, + 138, + 49, + 64, + 12, + 165, + 167, + 109, + 163, + 109, + 0, + 55, + 52, + 102, + 151, + 109, + 38, + 40, + 1, + 115, + 70, + 234, + 76, + 81, + 138, + 0, + 178, + 5, + 40, + 90, + 114, + 173, + 72, + 171, + 147, + 64, + 13, + 88, + 201, + 237, + 79, + 242, + 137, + 28, + 26, + 153, + 23, + 21, + 38, + 206, + 244, + 8, + 167, + 179, + 156, + 26, + 81, + 30, + 42, + 217, + 136, + 17, + 158, + 244, + 221, + 184, + 56, + 52, + 236, + 4, + 34, + 60, + 210, + 133, + 245, + 21, + 46, + 220, + 116, + 20, + 161, + 115, + 72, + 8, + 246, + 17, + 200, + 20, + 1, + 147, + 83, + 40, + 35, + 173, + 43, + 71, + 200, + 34, + 152, + 17, + 109, + 207, + 90, + 112, + 140, + 131, + 198, + 13, + 74, + 34, + 207, + 6, + 147, + 105, + 83, + 235, + 64, + 13, + 49, + 231, + 4, + 112, + 104, + 85, + 3, + 131, + 82, + 133, + 200, + 226, + 129, + 131, + 212, + 114, + 40, + 1, + 133, + 48, + 55, + 45, + 3, + 147, + 192, + 169, + 240, + 7, + 65, + 72, + 16, + 246, + 166, + 3, + 0, + 33, + 112, + 86, + 154, + 209, + 19, + 202, + 99, + 233, + 86, + 62, + 180, + 210, + 187, + 79, + 20, + 1, + 88, + 197, + 187, + 131, + 193, + 160, + 38, + 222, + 181, + 100, + 128, + 227, + 220, + 83, + 72, + 219, + 212, + 100, + 82, + 2, + 163, + 219, + 130, + 73, + 67, + 248, + 84, + 5, + 118, + 182, + 8, + 193, + 173, + 32, + 128, + 125, + 209, + 74, + 209, + 164, + 131, + 230, + 94, + 104, + 3, + 61, + 69, + 72, + 160, + 103, + 154, + 115, + 69, + 181, + 182, + 159, + 192, + 210, + 136, + 246, + 251, + 208, + 49, + 203, + 25, + 60, + 245, + 20, + 255, + 0, + 37, + 122, + 130, + 71, + 181, + 73, + 22, + 7, + 227, + 74, + 192, + 30, + 148, + 8, + 132, + 12, + 28, + 48, + 228, + 83, + 182, + 19, + 247, + 106, + 78, + 15, + 222, + 28, + 208, + 85, + 147, + 145, + 200, + 160, + 8, + 204, + 36, + 243, + 158, + 105, + 216, + 227, + 6, + 159, + 156, + 138, + 137, + 139, + 2, + 104, + 1, + 192, + 1, + 77, + 114, + 131, + 156, + 12, + 212, + 126, + 97, + 106, + 105, + 1, + 186, + 154, + 0, + 25, + 134, + 105, + 133, + 179, + 74, + 87, + 3, + 173, + 38, + 5, + 3, + 27, + 130, + 77, + 52, + 173, + 72, + 160, + 83, + 188, + 160, + 123, + 156, + 80, + 4, + 75, + 193, + 167, + 100, + 131, + 197, + 73, + 246, + 96, + 57, + 70, + 39, + 216, + 209, + 229, + 51, + 28, + 99, + 20, + 0, + 198, + 57, + 226, + 145, + 88, + 169, + 20, + 243, + 4, + 138, + 62, + 108, + 99, + 212, + 82, + 152, + 14, + 220, + 238, + 6, + 128, + 20, + 205, + 198, + 48, + 106, + 51, + 33, + 60, + 98, + 155, + 223, + 25, + 231, + 210, + 148, + 174, + 6, + 72, + 34, + 128, + 27, + 182, + 128, + 189, + 169, + 249, + 226, + 152, + 71, + 52, + 128, + 145, + 32, + 92, + 103, + 113, + 250, + 83, + 182, + 237, + 224, + 45, + 68, + 11, + 118, + 98, + 42, + 69, + 155, + 3, + 4, + 26, + 96, + 60, + 163, + 109, + 237, + 138, + 140, + 143, + 194, + 156, + 36, + 220, + 112, + 122, + 83, + 129, + 80, + 221, + 65, + 160, + 67, + 23, + 7, + 168, + 252, + 105, + 78, + 112, + 70, + 120, + 167, + 121, + 101, + 185, + 86, + 3, + 218, + 155, + 142, + 126, + 108, + 208, + 4, + 123, + 65, + 228, + 208, + 0, + 207, + 3, + 20, + 227, + 215, + 138, + 81, + 19, + 147, + 157, + 202, + 40, + 1, + 143, + 31, + 28, + 224, + 125, + 41, + 84, + 46, + 222, + 73, + 167, + 16, + 7, + 4, + 146, + 105, + 60, + 183, + 110, + 49, + 129, + 235, + 64, + 9, + 193, + 29, + 63, + 58, + 69, + 136, + 131, + 184, + 56, + 247, + 24, + 167, + 178, + 149, + 31, + 49, + 7, + 233, + 76, + 235, + 192, + 4, + 226, + 128, + 6, + 59, + 142, + 58, + 147, + 72, + 99, + 11, + 213, + 113, + 82, + 4, + 118, + 25, + 82, + 23, + 235, + 77, + 127, + 66, + 104, + 2, + 35, + 18, + 30, + 115, + 249, + 84, + 126, + 75, + 103, + 10, + 15, + 53, + 97, + 75, + 39, + 240, + 126, + 52, + 52, + 133, + 65, + 201, + 164, + 5, + 115, + 19, + 171, + 109, + 32, + 103, + 218, + 153, + 180, + 231, + 161, + 63, + 74, + 121, + 102, + 39, + 36, + 210, + 198, + 223, + 62, + 115, + 138, + 6, + 69, + 140, + 118, + 197, + 1, + 201, + 24, + 221, + 86, + 153, + 98, + 56, + 222, + 9, + 111, + 106, + 26, + 53, + 101, + 229, + 66, + 251, + 208, + 5, + 77, + 180, + 5, + 45, + 192, + 4, + 212, + 206, + 129, + 23, + 33, + 183, + 10, + 95, + 52, + 21, + 192, + 24, + 62, + 180, + 1, + 8, + 136, + 247, + 227, + 218, + 165, + 216, + 241, + 167, + 32, + 5, + 61, + 233, + 86, + 93, + 189, + 84, + 100, + 119, + 164, + 89, + 20, + 185, + 50, + 130, + 104, + 0, + 27, + 79, + 33, + 73, + 247, + 166, + 237, + 94, + 167, + 39, + 29, + 133, + 56, + 186, + 179, + 99, + 36, + 39, + 181, + 72, + 21, + 148, + 145, + 8, + 3, + 212, + 181, + 0, + 66, + 202, + 28, + 114, + 2, + 168, + 168, + 74, + 16, + 51, + 142, + 42, + 209, + 76, + 54, + 0, + 44, + 253, + 233, + 172, + 14, + 127, + 123, + 249, + 10, + 0, + 175, + 214, + 144, + 174, + 49, + 206, + 106, + 207, + 148, + 178, + 13, + 216, + 84, + 81, + 211, + 21, + 23, + 150, + 78, + 72, + 25, + 3, + 189, + 0, + 68, + 69, + 38, + 42, + 78, + 71, + 61, + 40, + 52, + 1, + 30, + 41, + 164, + 83, + 205, + 24, + 160, + 6, + 98, + 140, + 83, + 177, + 74, + 171, + 154, + 0, + 180, + 22, + 165, + 142, + 51, + 78, + 68, + 201, + 169, + 214, + 50, + 41, + 128, + 44, + 124, + 117, + 169, + 21, + 7, + 122, + 2, + 241, + 214, + 156, + 41, + 136, + 105, + 92, + 30, + 40, + 218, + 24, + 116, + 169, + 0, + 245, + 163, + 110, + 57, + 20, + 1, + 14, + 54, + 156, + 83, + 177, + 232, + 42, + 92, + 6, + 20, + 152, + 218, + 104, + 1, + 138, + 51, + 71, + 151, + 143, + 165, + 61, + 151, + 184, + 160, + 28, + 245, + 226, + 128, + 26, + 23, + 158, + 180, + 237, + 160, + 240, + 105, + 8, + 32, + 245, + 165, + 200, + 34, + 128, + 27, + 179, + 105, + 224, + 241, + 78, + 42, + 15, + 56, + 230, + 148, + 17, + 208, + 211, + 198, + 59, + 82, + 2, + 28, + 149, + 59, + 72, + 167, + 138, + 121, + 195, + 112, + 105, + 188, + 138, + 0, + 5, + 33, + 227, + 173, + 59, + 131, + 222, + 140, + 250, + 208, + 3, + 112, + 185, + 200, + 52, + 225, + 130, + 48, + 105, + 10, + 103, + 165, + 52, + 49, + 7, + 4, + 80, + 2, + 149, + 218, + 114, + 180, + 236, + 2, + 41, + 172, + 91, + 210, + 133, + 203, + 15, + 122, + 0, + 141, + 212, + 129, + 134, + 25, + 30, + 180, + 205, + 190, + 134, + 172, + 158, + 7, + 205, + 80, + 50, + 224, + 252, + 163, + 35, + 218, + 152, + 4, + 106, + 195, + 210, + 166, + 35, + 112, + 207, + 67, + 80, + 161, + 203, + 99, + 161, + 169, + 198, + 113, + 235, + 72, + 6, + 131, + 216, + 138, + 81, + 156, + 83, + 179, + 158, + 13, + 48, + 144, + 58, + 80, + 3, + 25, + 128, + 205, + 51, + 120, + 45, + 232, + 105, + 204, + 65, + 60, + 210, + 50, + 130, + 189, + 63, + 26, + 0, + 107, + 70, + 173, + 200, + 224, + 212, + 91, + 31, + 56, + 219, + 248, + 212, + 225, + 88, + 244, + 25, + 169, + 16, + 99, + 130, + 104, + 2, + 37, + 132, + 227, + 231, + 193, + 20, + 191, + 102, + 67, + 200, + 39, + 233, + 83, + 48, + 3, + 154, + 77, + 195, + 176, + 52, + 1, + 25, + 137, + 7, + 85, + 230, + 149, + 120, + 198, + 41, + 228, + 228, + 114, + 42, + 50, + 141, + 156, + 169, + 160, + 7, + 158, + 123, + 96, + 210, + 5, + 231, + 45, + 64, + 4, + 240, + 212, + 125, + 223, + 113, + 64, + 14, + 36, + 99, + 174, + 106, + 34, + 6, + 120, + 24, + 53, + 38, + 213, + 60, + 175, + 6, + 130, + 72, + 224, + 129, + 249, + 80, + 3, + 54, + 142, + 232, + 51, + 65, + 25, + 92, + 46, + 62, + 148, + 243, + 156, + 117, + 226, + 155, + 176, + 30, + 173, + 131, + 64, + 16, + 125, + 152, + 183, + 42, + 216, + 246, + 197, + 66, + 200, + 200, + 112, + 213, + 112, + 54, + 211, + 200, + 205, + 46, + 65, + 232, + 50, + 40, + 2, + 144, + 247, + 165, + 32, + 118, + 169, + 158, + 220, + 185, + 202, + 28, + 31, + 74, + 134, + 68, + 104, + 200, + 221, + 210, + 144, + 198, + 209, + 154, + 92, + 3, + 72, + 87, + 154, + 0, + 114, + 200, + 203, + 208, + 212, + 139, + 48, + 35, + 7, + 131, + 80, + 80, + 56, + 52, + 1, + 51, + 38, + 91, + 32, + 226, + 164, + 1, + 118, + 243, + 218, + 160, + 220, + 123, + 26, + 124, + 114, + 168, + 63, + 53, + 49, + 11, + 131, + 191, + 129, + 79, + 96, + 196, + 112, + 216, + 164, + 97, + 188, + 102, + 50, + 40, + 85, + 0, + 97, + 207, + 229, + 64, + 13, + 1, + 27, + 140, + 157, + 223, + 90, + 104, + 18, + 198, + 79, + 203, + 242, + 250, + 138, + 113, + 218, + 167, + 228, + 25, + 167, + 229, + 153, + 49, + 145, + 143, + 122, + 0, + 133, + 139, + 55, + 57, + 207, + 176, + 164, + 13, + 216, + 41, + 207, + 189, + 74, + 60, + 180, + 231, + 146, + 212, + 143, + 190, + 78, + 113, + 192, + 160, + 6, + 59, + 184, + 79, + 152, + 243, + 233, + 85, + 219, + 230, + 230, + 159, + 46, + 73, + 35, + 176, + 168, + 199, + 6, + 144, + 198, + 129, + 154, + 149, + 33, + 92, + 101, + 152, + 147, + 237, + 79, + 22, + 234, + 169, + 184, + 185, + 207, + 165, + 57, + 79, + 31, + 42, + 17, + 239, + 64, + 11, + 181, + 143, + 240, + 128, + 61, + 106, + 50, + 170, + 8, + 220, + 219, + 190, + 148, + 246, + 12, + 7, + 206, + 220, + 123, + 82, + 40, + 39, + 148, + 76, + 123, + 154, + 98, + 20, + 161, + 100, + 33, + 84, + 1, + 250, + 213, + 76, + 114, + 71, + 165, + 93, + 216, + 1, + 203, + 49, + 111, + 97, + 73, + 247, + 129, + 1, + 0, + 30, + 167, + 173, + 32, + 41, + 208, + 69, + 78, + 246, + 227, + 105, + 216, + 249, + 111, + 74, + 132, + 130, + 14, + 24, + 96, + 251, + 208, + 49, + 167, + 167, + 53, + 40, + 92, + 40, + 50, + 183, + 30, + 149, + 30, + 42, + 80, + 217, + 69, + 80, + 9, + 110, + 148, + 0, + 226, + 206, + 192, + 5, + 27, + 23, + 212, + 212, + 108, + 155, + 142, + 21, + 137, + 35, + 185, + 169, + 72, + 0, + 15, + 53, + 179, + 254, + 205, + 46, + 9, + 28, + 97, + 19, + 222, + 128, + 42, + 82, + 228, + 129, + 193, + 198, + 122, + 211, + 156, + 46, + 236, + 168, + 33, + 71, + 20, + 210, + 40, + 0, + 221, + 129, + 142, + 212, + 246, + 141, + 54, + 239, + 251, + 163, + 29, + 61, + 106, + 44, + 22, + 59, + 64, + 201, + 171, + 8, + 21, + 122, + 229, + 136, + 233, + 232, + 40, + 2, + 22, + 140, + 99, + 112, + 224, + 30, + 213, + 30, + 218, + 178, + 120, + 147, + 156, + 51, + 118, + 29, + 170, + 41, + 0, + 15, + 199, + 92, + 115, + 64, + 17, + 237, + 193, + 230, + 151, + 56, + 167, + 2, + 51, + 146, + 51, + 67, + 38, + 56, + 7, + 62, + 166, + 128, + 52, + 80, + 84, + 224, + 102, + 161, + 78, + 181, + 97, + 65, + 21, + 66, + 0, + 164, + 123, + 138, + 8, + 167, + 81, + 138, + 0, + 104, + 60, + 210, + 150, + 226, + 148, + 40, + 235, + 138, + 118, + 6, + 48, + 105, + 0, + 204, + 250, + 83, + 179, + 145, + 77, + 35, + 109, + 3, + 52, + 0, + 163, + 32, + 244, + 165, + 49, + 238, + 28, + 80, + 15, + 173, + 60, + 26, + 0, + 104, + 24, + 63, + 53, + 33, + 65, + 156, + 138, + 123, + 115, + 70, + 40, + 1, + 187, + 70, + 58, + 102, + 147, + 238, + 158, + 58, + 83, + 241, + 233, + 70, + 120, + 160, + 4, + 24, + 52, + 26, + 66, + 10, + 156, + 142, + 148, + 236, + 230, + 128, + 26, + 83, + 184, + 160, + 1, + 208, + 210, + 242, + 40, + 192, + 34, + 128, + 20, + 12, + 116, + 165, + 235, + 76, + 201, + 83, + 207, + 74, + 119, + 81, + 197, + 0, + 20, + 155, + 115, + 210, + 150, + 151, + 189, + 0, + 48, + 145, + 222, + 153, + 183, + 186, + 156, + 212, + 216, + 7, + 168, + 164, + 32, + 14, + 69, + 0, + 67, + 128, + 88, + 100, + 115, + 82, + 128, + 71, + 74, + 92, + 231, + 181, + 28, + 131, + 64, + 13, + 96, + 77, + 68, + 192, + 158, + 149, + 59, + 114, + 42, + 50, + 188, + 231, + 173, + 0, + 66, + 65, + 199, + 52, + 228, + 7, + 56, + 235, + 78, + 242, + 137, + 229, + 79, + 224, + 105, + 200, + 172, + 56, + 35, + 20, + 0, + 187, + 50, + 56, + 226, + 141, + 189, + 143, + 90, + 95, + 152, + 82, + 131, + 158, + 15, + 90, + 0, + 136, + 252, + 167, + 173, + 57, + 72, + 110, + 148, + 243, + 142, + 252, + 211, + 72, + 83, + 208, + 98, + 128, + 6, + 56, + 166, + 210, + 225, + 186, + 19, + 70, + 195, + 234, + 49, + 64, + 9, + 156, + 31, + 155, + 243, + 164, + 97, + 198, + 84, + 230, + 159, + 181, + 69, + 48, + 237, + 29, + 51, + 64, + 8, + 9, + 60, + 98, + 148, + 150, + 252, + 40, + 7, + 52, + 29, + 223, + 133, + 0, + 40, + 0, + 142, + 180, + 16, + 160, + 83, + 8, + 25, + 206, + 72, + 160, + 63, + 175, + 52, + 0, + 224, + 222, + 212, + 125, + 48, + 41, + 1, + 61, + 168, + 41, + 187, + 189, + 0, + 33, + 124, + 54, + 15, + 233, + 75, + 149, + 97, + 207, + 205, + 76, + 101, + 10, + 121, + 230, + 148, + 31, + 238, + 228, + 208, + 4, + 18, + 198, + 51, + 149, + 226, + 163, + 53, + 101, + 129, + 144, + 115, + 193, + 237, + 80, + 188, + 50, + 40, + 201, + 193, + 250, + 80, + 3, + 58, + 210, + 98, + 133, + 235, + 205, + 43, + 41, + 28, + 246, + 164, + 49, + 49, + 138, + 76, + 211, + 199, + 78, + 105, + 184, + 20, + 0, + 35, + 21, + 60, + 84, + 233, + 40, + 35, + 230, + 21, + 95, + 161, + 165, + 205, + 1, + 98, + 125, + 165, + 254, + 233, + 20, + 190, + 88, + 3, + 231, + 110, + 125, + 170, + 5, + 145, + 148, + 96, + 84, + 177, + 144, + 195, + 47, + 205, + 49, + 6, + 236, + 125, + 212, + 220, + 62, + 148, + 141, + 159, + 92, + 122, + 138, + 151, + 126, + 56, + 141, + 106, + 38, + 206, + 114, + 253, + 104, + 2, + 6, + 251, + 198, + 152, + 7, + 204, + 1, + 227, + 222, + 156, + 79, + 204, + 113, + 66, + 161, + 119, + 199, + 64, + 58, + 210, + 25, + 96, + 34, + 162, + 142, + 174, + 105, + 126, + 118, + 24, + 24, + 81, + 233, + 72, + 172, + 7, + 202, + 131, + 7, + 214, + 148, + 163, + 30, + 101, + 108, + 125, + 41, + 136, + 104, + 10, + 135, + 131, + 185, + 141, + 12, + 36, + 63, + 120, + 109, + 30, + 212, + 133, + 206, + 112, + 131, + 61, + 179, + 79, + 25, + 85, + 38, + 71, + 200, + 244, + 52, + 1, + 24, + 96, + 56, + 141, + 115, + 239, + 75, + 34, + 182, + 3, + 72, + 195, + 3, + 210, + 140, + 238, + 111, + 220, + 174, + 208, + 41, + 101, + 104, + 193, + 27, + 185, + 97, + 216, + 82, + 1, + 170, + 236, + 231, + 8, + 56, + 245, + 166, + 179, + 41, + 202, + 182, + 29, + 187, + 84, + 152, + 46, + 191, + 63, + 200, + 190, + 162, + 163, + 24, + 13, + 132, + 27, + 135, + 77, + 216, + 160, + 8, + 10, + 178, + 144, + 24, + 99, + 52, + 232, + 207, + 205, + 180, + 16, + 62, + 181, + 44, + 167, + 247, + 100, + 49, + 220, + 199, + 167, + 168, + 170, + 196, + 118, + 60, + 28, + 80, + 50, + 195, + 109, + 13, + 251, + 176, + 88, + 247, + 39, + 165, + 14, + 118, + 242, + 231, + 115, + 31, + 225, + 20, + 136, + 92, + 199, + 132, + 199, + 190, + 105, + 99, + 63, + 43, + 5, + 1, + 155, + 222, + 128, + 26, + 195, + 41, + 150, + 96, + 190, + 139, + 80, + 14, + 149, + 58, + 5, + 25, + 36, + 239, + 99, + 219, + 210, + 160, + 29, + 40, + 1, + 241, + 171, + 16, + 72, + 56, + 7, + 189, + 63, + 36, + 166, + 19, + 229, + 78, + 237, + 64, + 24, + 1, + 164, + 60, + 14, + 138, + 40, + 56, + 206, + 249, + 56, + 95, + 225, + 81, + 222, + 128, + 19, + 39, + 110, + 212, + 59, + 87, + 187, + 30, + 244, + 96, + 5, + 194, + 168, + 219, + 220, + 158, + 244, + 188, + 145, + 190, + 81, + 133, + 236, + 163, + 189, + 35, + 101, + 176, + 207, + 199, + 247, + 80, + 80, + 4, + 76, + 160, + 30, + 58, + 123, + 208, + 14, + 70, + 14, + 6, + 58, + 154, + 145, + 135, + 24, + 97, + 151, + 61, + 20, + 118, + 168, + 200, + 218, + 196, + 100, + 28, + 80, + 6, + 138, + 14, + 213, + 105, + 79, + 2, + 171, + 168, + 230, + 167, + 166, + 33, + 196, + 103, + 165, + 0, + 82, + 102, + 138, + 0, + 112, + 24, + 165, + 164, + 165, + 160, + 6, + 159, + 74, + 48, + 125, + 41, + 72, + 205, + 40, + 160, + 4, + 198, + 105, + 6, + 71, + 90, + 119, + 52, + 14, + 104, + 0, + 57, + 236, + 104, + 205, + 46, + 13, + 27, + 104, + 1, + 164, + 226, + 151, + 173, + 46, + 5, + 46, + 40, + 1, + 51, + 142, + 180, + 148, + 238, + 180, + 152, + 197, + 0, + 24, + 163, + 4, + 26, + 5, + 28, + 208, + 2, + 230, + 154, + 114, + 14, + 69, + 41, + 28, + 230, + 148, + 123, + 208, + 3, + 65, + 205, + 4, + 48, + 52, + 236, + 3, + 69, + 0, + 10, + 217, + 20, + 81, + 176, + 117, + 20, + 116, + 235, + 64, + 6, + 40, + 231, + 165, + 7, + 167, + 20, + 110, + 245, + 160, + 6, + 237, + 207, + 122, + 94, + 157, + 69, + 7, + 218, + 148, + 28, + 245, + 160, + 4, + 60, + 114, + 41, + 51, + 158, + 180, + 236, + 1, + 73, + 128, + 104, + 0, + 230, + 154, + 72, + 61, + 120, + 52, + 165, + 72, + 250, + 83, + 74, + 131, + 200, + 56, + 160, + 5, + 227, + 240, + 160, + 173, + 3, + 142, + 8, + 205, + 3, + 158, + 148, + 0, + 220, + 145, + 215, + 165, + 46, + 15, + 81, + 138, + 11, + 122, + 241, + 70, + 211, + 216, + 138, + 0, + 92, + 122, + 138, + 107, + 47, + 25, + 90, + 9, + 199, + 13, + 249, + 210, + 103, + 142, + 40, + 1, + 171, + 147, + 214, + 156, + 84, + 143, + 122, + 64, + 75, + 122, + 83, + 249, + 29, + 104, + 2, + 63, + 151, + 61, + 77, + 56, + 176, + 199, + 74, + 12, + 106, + 199, + 32, + 144, + 105, + 172, + 74, + 117, + 228, + 122, + 208, + 2, + 0, + 217, + 200, + 20, + 187, + 185, + 230, + 133, + 37, + 134, + 70, + 40, + 42, + 15, + 12, + 40, + 1, + 14, + 59, + 115, + 245, + 164, + 70, + 231, + 128, + 5, + 59, + 229, + 94, + 135, + 34, + 155, + 184, + 30, + 128, + 10, + 0, + 115, + 22, + 61, + 120, + 166, + 152, + 219, + 174, + 65, + 165, + 195, + 30, + 189, + 41, + 192, + 109, + 31, + 122, + 128, + 41, + 202, + 48, + 217, + 198, + 40, + 7, + 214, + 167, + 149, + 193, + 224, + 143, + 210, + 160, + 3, + 210, + 129, + 136, + 125, + 169, + 188, + 131, + 78, + 57, + 205, + 29, + 104, + 1, + 54, + 228, + 83, + 64, + 231, + 6, + 159, + 130, + 13, + 52, + 140, + 154, + 64, + 27, + 127, + 42, + 17, + 252, + 179, + 207, + 74, + 90, + 67, + 215, + 20, + 1, + 54, + 237, + 231, + 229, + 32, + 82, + 144, + 168, + 9, + 124, + 49, + 168, + 71, + 29, + 42, + 85, + 92, + 124, + 196, + 228, + 250, + 83, + 17, + 93, + 128, + 12, + 113, + 78, + 136, + 46, + 236, + 147, + 73, + 39, + 223, + 38, + 132, + 42, + 15, + 205, + 210, + 144, + 201, + 67, + 18, + 112, + 171, + 248, + 226, + 134, + 249, + 78, + 93, + 183, + 122, + 10, + 114, + 187, + 50, + 254, + 237, + 69, + 52, + 5, + 86, + 221, + 38, + 115, + 76, + 64, + 185, + 111, + 245, + 96, + 39, + 214, + 154, + 64, + 86, + 253, + 233, + 201, + 246, + 52, + 247, + 119, + 124, + 97, + 72, + 95, + 92, + 83, + 64, + 69, + 25, + 39, + 123, + 30, + 212, + 128, + 114, + 179, + 184, + 192, + 27, + 87, + 214, + 154, + 140, + 145, + 228, + 70, + 60, + 195, + 222, + 148, + 43, + 57, + 201, + 59, + 87, + 210, + 149, + 153, + 84, + 237, + 136, + 96, + 158, + 244, + 192, + 137, + 216, + 177, + 253, + 225, + 192, + 254, + 237, + 46, + 230, + 113, + 182, + 33, + 180, + 122, + 154, + 10, + 224, + 239, + 148, + 131, + 233, + 205, + 11, + 190, + 94, + 167, + 108, + 116, + 0, + 131, + 17, + 30, + 153, + 126, + 153, + 237, + 76, + 156, + 63, + 14, + 227, + 31, + 74, + 144, + 48, + 7, + 108, + 63, + 55, + 169, + 52, + 174, + 171, + 26, + 146, + 88, + 179, + 159, + 225, + 164, + 5, + 81, + 203, + 1, + 146, + 7, + 122, + 155, + 59, + 134, + 216, + 184, + 29, + 218, + 161, + 32, + 142, + 8, + 193, + 169, + 144, + 121, + 145, + 141, + 164, + 34, + 175, + 95, + 122, + 6, + 11, + 133, + 249, + 87, + 230, + 61, + 218, + 160, + 31, + 46, + 125, + 141, + 78, + 6, + 236, + 249, + 64, + 34, + 142, + 254, + 181, + 95, + 156, + 227, + 223, + 173, + 0, + 77, + 194, + 224, + 147, + 186, + 67, + 208, + 10, + 14, + 85, + 178, + 223, + 52, + 135, + 160, + 20, + 12, + 110, + 11, + 0, + 231, + 185, + 165, + 140, + 17, + 33, + 84, + 249, + 143, + 241, + 19, + 64, + 9, + 146, + 62, + 83, + 243, + 59, + 118, + 236, + 41, + 0, + 108, + 144, + 184, + 103, + 247, + 237, + 78, + 80, + 75, + 21, + 139, + 156, + 253, + 227, + 233, + 76, + 254, + 31, + 151, + 59, + 65, + 193, + 110, + 244, + 192, + 48, + 67, + 225, + 14, + 230, + 238, + 231, + 181, + 53, + 192, + 207, + 28, + 227, + 248, + 189, + 105, + 229, + 178, + 51, + 247, + 19, + 177, + 199, + 90, + 36, + 192, + 10, + 72, + 192, + 236, + 190, + 180, + 128, + 208, + 79, + 189, + 82, + 212, + 0, + 242, + 13, + 76, + 173, + 218, + 152, + 133, + 165, + 218, + 125, + 104, + 167, + 14, + 156, + 208, + 0, + 7, + 20, + 102, + 142, + 148, + 184, + 205, + 0, + 20, + 14, + 105, + 58, + 83, + 133, + 0, + 38, + 105, + 104, + 34, + 129, + 64, + 6, + 104, + 233, + 70, + 40, + 20, + 0, + 30, + 69, + 25, + 199, + 90, + 8, + 193, + 165, + 24, + 52, + 0, + 134, + 140, + 158, + 244, + 99, + 20, + 238, + 40, + 2, + 50, + 15, + 81, + 78, + 235, + 75, + 70, + 56, + 160, + 4, + 165, + 192, + 52, + 99, + 7, + 154, + 62, + 148, + 0, + 152, + 199, + 74, + 92, + 102, + 140, + 250, + 138, + 90, + 0, + 78, + 69, + 28, + 55, + 90, + 40, + 32, + 142, + 69, + 0, + 24, + 199, + 74, + 92, + 3, + 76, + 4, + 154, + 83, + 145, + 212, + 80, + 2, + 226, + 130, + 41, + 55, + 118, + 52, + 160, + 208, + 3, + 119, + 96, + 224, + 209, + 201, + 228, + 83, + 136, + 83, + 214, + 142, + 7, + 74, + 0, + 104, + 111, + 90, + 25, + 7, + 80, + 105, + 73, + 6, + 140, + 80, + 4, + 123, + 187, + 26, + 112, + 245, + 20, + 226, + 138, + 195, + 154, + 97, + 5, + 15, + 6, + 128, + 28, + 72, + 35, + 4, + 83, + 54, + 227, + 233, + 75, + 203, + 12, + 83, + 66, + 48, + 235, + 64, + 14, + 194, + 158, + 13, + 38, + 0, + 232, + 105, + 216, + 226, + 163, + 221, + 131, + 214, + 128, + 29, + 146, + 125, + 41, + 165, + 91, + 189, + 56, + 29, + 221, + 5, + 41, + 86, + 199, + 122, + 0, + 106, + 128, + 59, + 210, + 151, + 29, + 14, + 13, + 55, + 142, + 230, + 151, + 35, + 166, + 1, + 160, + 4, + 199, + 57, + 81, + 75, + 180, + 30, + 9, + 32, + 210, + 16, + 216, + 200, + 31, + 149, + 32, + 60, + 252, + 192, + 138, + 0, + 70, + 93, + 167, + 189, + 46, + 119, + 14, + 0, + 167, + 238, + 3, + 190, + 105, + 187, + 183, + 28, + 40, + 20, + 0, + 221, + 174, + 15, + 56, + 199, + 181, + 59, + 11, + 140, + 247, + 164, + 101, + 113, + 247, + 135, + 30, + 212, + 223, + 148, + 115, + 146, + 40, + 1, + 73, + 227, + 30, + 190, + 213, + 93, + 198, + 211, + 193, + 171, + 27, + 201, + 224, + 12, + 254, + 21, + 28, + 177, + 28, + 103, + 60, + 208, + 4, + 38, + 144, + 210, + 209, + 154, + 6, + 38, + 104, + 197, + 12, + 59, + 210, + 102, + 128, + 16, + 245, + 162, + 148, + 138, + 74, + 64, + 37, + 73, + 27, + 144, + 121, + 168, + 205, + 40, + 160, + 5, + 147, + 239, + 115, + 72, + 172, + 170, + 114, + 70, + 69, + 13, + 210, + 133, + 24, + 96, + 79, + 52, + 1, + 42, + 22, + 147, + 238, + 124, + 163, + 233, + 74, + 192, + 33, + 249, + 240, + 199, + 174, + 105, + 85, + 153, + 254, + 80, + 54, + 138, + 113, + 81, + 16, + 201, + 59, + 137, + 166, + 33, + 138, + 100, + 114, + 56, + 249, + 127, + 42, + 107, + 24, + 195, + 254, + 236, + 18, + 198, + 128, + 90, + 98, + 71, + 221, + 20, + 23, + 88, + 120, + 0, + 22, + 245, + 160, + 5, + 42, + 118, + 230, + 83, + 143, + 161, + 166, + 238, + 99, + 196, + 99, + 143, + 90, + 112, + 4, + 229, + 228, + 32, + 175, + 165, + 55, + 113, + 144, + 149, + 136, + 5, + 2, + 128, + 16, + 132, + 67, + 144, + 75, + 183, + 161, + 165, + 144, + 23, + 140, + 18, + 118, + 123, + 82, + 22, + 72, + 206, + 54, + 130, + 244, + 121, + 100, + 229, + 230, + 60, + 118, + 20, + 128, + 68, + 195, + 169, + 88, + 198, + 204, + 119, + 164, + 192, + 70, + 199, + 223, + 127, + 90, + 112, + 220, + 227, + 8, + 54, + 167, + 122, + 64, + 66, + 29, + 144, + 140, + 183, + 114, + 104, + 2, + 57, + 145, + 131, + 2, + 196, + 18, + 105, + 139, + 142, + 132, + 241, + 79, + 145, + 2, + 41, + 220, + 196, + 201, + 233, + 81, + 175, + 108, + 250, + 208, + 50, + 93, + 219, + 192, + 254, + 24, + 135, + 235, + 80, + 176, + 228, + 254, + 149, + 54, + 210, + 231, + 124, + 167, + 106, + 142, + 131, + 214, + 162, + 144, + 29, + 231, + 182, + 121, + 160, + 9, + 20, + 177, + 140, + 5, + 32, + 39, + 115, + 77, + 85, + 224, + 133, + 108, + 39, + 118, + 161, + 20, + 178, + 252, + 255, + 0, + 44, + 107, + 250, + 210, + 150, + 87, + 60, + 141, + 136, + 58, + 40, + 239, + 64, + 133, + 36, + 96, + 1, + 149, + 140, + 119, + 245, + 166, + 225, + 74, + 130, + 217, + 8, + 15, + 3, + 214, + 156, + 79, + 241, + 200, + 48, + 7, + 221, + 74, + 67, + 156, + 111, + 97, + 243, + 31, + 186, + 148, + 198, + 39, + 250, + 198, + 203, + 2, + 49, + 247, + 82, + 145, + 88, + 231, + 36, + 100, + 250, + 30, + 212, + 230, + 249, + 78, + 7, + 205, + 35, + 127, + 227, + 180, + 155, + 121, + 216, + 167, + 221, + 156, + 210, + 2, + 237, + 75, + 31, + 165, + 69, + 78, + 83, + 138, + 160, + 39, + 165, + 20, + 138, + 114, + 41, + 212, + 8, + 57, + 199, + 52, + 14, + 41, + 105, + 13, + 32, + 23, + 25, + 160, + 113, + 64, + 165, + 60, + 208, + 1, + 239, + 64, + 52, + 131, + 129, + 75, + 138, + 0, + 90, + 74, + 1, + 165, + 197, + 0, + 20, + 152, + 238, + 41, + 104, + 160, + 3, + 52, + 81, + 214, + 147, + 56, + 235, + 64, + 11, + 214, + 140, + 145, + 212, + 82, + 230, + 147, + 61, + 168, + 0, + 235, + 74, + 5, + 52, + 244, + 165, + 6, + 128, + 29, + 138, + 111, + 78, + 148, + 180, + 80, + 1, + 184, + 119, + 163, + 52, + 214, + 233, + 77, + 220, + 7, + 122, + 0, + 115, + 117, + 200, + 165, + 6, + 155, + 156, + 210, + 131, + 138, + 0, + 14, + 15, + 81, + 70, + 7, + 165, + 33, + 60, + 230, + 148, + 48, + 245, + 160, + 3, + 104, + 236, + 105, + 6, + 115, + 79, + 164, + 34, + 128, + 2, + 185, + 28, + 83, + 73, + 35, + 174, + 126, + 180, + 236, + 226, + 151, + 57, + 160, + 6, + 2, + 125, + 104, + 220, + 58, + 26, + 93, + 184, + 233, + 72, + 85, + 79, + 90, + 0, + 48, + 59, + 80, + 73, + 236, + 105, + 54, + 224, + 240, + 77, + 25, + 61, + 141, + 0, + 24, + 39, + 144, + 105, + 216, + 7, + 168, + 20, + 132, + 55, + 108, + 83, + 3, + 115, + 134, + 20, + 0, + 21, + 32, + 252, + 180, + 161, + 137, + 224, + 241, + 71, + 211, + 52, + 187, + 129, + 226, + 128, + 26, + 83, + 156, + 228, + 82, + 49, + 0, + 114, + 41, + 219, + 91, + 61, + 50, + 40, + 33, + 72, + 195, + 12, + 80, + 3, + 1, + 56, + 200, + 6, + 141, + 129, + 186, + 177, + 20, + 191, + 119, + 149, + 205, + 33, + 5, + 135, + 7, + 6, + 128, + 26, + 87, + 103, + 70, + 200, + 247, + 161, + 91, + 158, + 20, + 125, + 105, + 192, + 50, + 253, + 236, + 26, + 9, + 83, + 208, + 115, + 64, + 10, + 114, + 70, + 14, + 113, + 81, + 236, + 92, + 231, + 38, + 148, + 171, + 147, + 192, + 56, + 165, + 242, + 240, + 114, + 92, + 208, + 2, + 135, + 219, + 208, + 83, + 95, + 230, + 83, + 158, + 41, + 75, + 129, + 199, + 90, + 66, + 132, + 130, + 73, + 160, + 10, + 204, + 57, + 52, + 222, + 244, + 231, + 200, + 115, + 73, + 158, + 104, + 24, + 148, + 132, + 0, + 41, + 230, + 152, + 69, + 0, + 47, + 106, + 109, + 45, + 3, + 175, + 52, + 0, + 218, + 41, + 197, + 70, + 105, + 41, + 0, + 210, + 77, + 57, + 78, + 14, + 105, + 27, + 173, + 47, + 27, + 148, + 251, + 208, + 4, + 163, + 205, + 99, + 128, + 8, + 30, + 180, + 226, + 162, + 32, + 14, + 226, + 73, + 236, + 105, + 217, + 148, + 175, + 24, + 2, + 144, + 4, + 207, + 114, + 223, + 90, + 98, + 26, + 21, + 165, + 57, + 108, + 168, + 20, + 214, + 125, + 132, + 170, + 2, + 199, + 215, + 20, + 230, + 18, + 49, + 249, + 242, + 171, + 77, + 221, + 180, + 226, + 32, + 88, + 247, + 160, + 5, + 84, + 219, + 150, + 145, + 176, + 61, + 41, + 9, + 121, + 78, + 20, + 108, + 95, + 92, + 80, + 0, + 206, + 233, + 137, + 221, + 233, + 74, + 198, + 70, + 224, + 169, + 11, + 64, + 3, + 58, + 161, + 10, + 163, + 121, + 246, + 20, + 133, + 8, + 249, + 229, + 111, + 248, + 14, + 40, + 141, + 246, + 41, + 17, + 169, + 99, + 72, + 121, + 249, + 164, + 206, + 238, + 194, + 128, + 26, + 164, + 202, + 216, + 251, + 139, + 233, + 73, + 149, + 221, + 182, + 17, + 131, + 221, + 169, + 78, + 73, + 204, + 131, + 106, + 251, + 82, + 225, + 152, + 109, + 136, + 97, + 123, + 154, + 64, + 53, + 194, + 15, + 151, + 27, + 220, + 247, + 244, + 168, + 15, + 12, + 71, + 165, + 90, + 80, + 35, + 82, + 35, + 249, + 152, + 245, + 38, + 170, + 183, + 82, + 79, + 83, + 64, + 201, + 49, + 136, + 247, + 202, + 114, + 49, + 192, + 205, + 49, + 198, + 2, + 251, + 246, + 167, + 66, + 160, + 225, + 137, + 201, + 236, + 180, + 78, + 122, + 19, + 214, + 128, + 4, + 32, + 69, + 243, + 13, + 222, + 130, + 148, + 141, + 160, + 52, + 131, + 39, + 248, + 86, + 155, + 17, + 11, + 200, + 229, + 207, + 74, + 94, + 67, + 101, + 142, + 100, + 63, + 165, + 48, + 23, + 44, + 24, + 110, + 27, + 156, + 244, + 30, + 148, + 143, + 144, + 121, + 59, + 152, + 247, + 244, + 160, + 112, + 74, + 169, + 203, + 159, + 188, + 222, + 148, + 152, + 249, + 72, + 92, + 0, + 62, + 241, + 245, + 164, + 0, + 62, + 102, + 249, + 120, + 3, + 171, + 122, + 210, + 156, + 2, + 88, + 140, + 15, + 79, + 90, + 0, + 202, + 131, + 140, + 39, + 101, + 245, + 164, + 96, + 88, + 131, + 220, + 244, + 30, + 148, + 192, + 188, + 69, + 37, + 57, + 78, + 69, + 4, + 12, + 211, + 16, + 248, + 219, + 7, + 6, + 166, + 206, + 106, + 184, + 52, + 224, + 230, + 128, + 39, + 162, + 145, + 78, + 105, + 123, + 210, + 1, + 7, + 20, + 238, + 180, + 152, + 165, + 197, + 0, + 2, + 150, + 146, + 138, + 0, + 13, + 25, + 162, + 148, + 80, + 2, + 26, + 81, + 239, + 75, + 73, + 64, + 6, + 49, + 71, + 90, + 78, + 115, + 75, + 64, + 5, + 47, + 90, + 5, + 24, + 244, + 160, + 2, + 146, + 148, + 28, + 209, + 64, + 5, + 55, + 56, + 62, + 212, + 180, + 109, + 244, + 52, + 0, + 157, + 104, + 218, + 58, + 226, + 151, + 111, + 190, + 41, + 57, + 7, + 6, + 128, + 19, + 111, + 167, + 20, + 21, + 108, + 117, + 167, + 80, + 77, + 0, + 70, + 16, + 17, + 212, + 230, + 158, + 20, + 119, + 163, + 56, + 57, + 236, + 105, + 119, + 80, + 2, + 17, + 183, + 233, + 74, + 61, + 65, + 165, + 164, + 28, + 116, + 160, + 5, + 164, + 42, + 59, + 81, + 197, + 29, + 58, + 80, + 3, + 78, + 84, + 250, + 138, + 94, + 13, + 46, + 105, + 8, + 160, + 0, + 113, + 212, + 208, + 77, + 3, + 29, + 13, + 38, + 0, + 233, + 64, + 10, + 121, + 166, + 152, + 243, + 222, + 151, + 119, + 189, + 47, + 94, + 134, + 128, + 25, + 146, + 15, + 90, + 66, + 217, + 237, + 82, + 96, + 119, + 20, + 194, + 6, + 120, + 20, + 0, + 139, + 187, + 184, + 56, + 165, + 33, + 72, + 235, + 65, + 221, + 138, + 64, + 55, + 115, + 186, + 128, + 27, + 187, + 105, + 235, + 78, + 35, + 127, + 66, + 40, + 200, + 29, + 112, + 104, + 251, + 221, + 5, + 0, + 38, + 54, + 245, + 230, + 147, + 229, + 61, + 23, + 154, + 126, + 209, + 252, + 64, + 211, + 112, + 131, + 238, + 231, + 52, + 0, + 208, + 204, + 56, + 228, + 82, + 224, + 30, + 119, + 82, + 150, + 99, + 198, + 8, + 166, + 152, + 243, + 206, + 234, + 0, + 93, + 192, + 116, + 193, + 166, + 177, + 102, + 29, + 64, + 165, + 12, + 171, + 193, + 2, + 154, + 84, + 158, + 69, + 0, + 64, + 192, + 131, + 243, + 117, + 166, + 211, + 156, + 115, + 77, + 160, + 98, + 245, + 20, + 148, + 10, + 13, + 33, + 8, + 71, + 20, + 152, + 52, + 166, + 128, + 104, + 24, + 135, + 154, + 76, + 98, + 134, + 246, + 162, + 128, + 18, + 129, + 74, + 1, + 160, + 241, + 64, + 18, + 39, + 152, + 252, + 14, + 149, + 47, + 238, + 227, + 28, + 0, + 90, + 160, + 135, + 115, + 146, + 162, + 164, + 37, + 99, + 249, + 112, + 25, + 168, + 16, + 184, + 119, + 251, + 220, + 45, + 55, + 32, + 124, + 176, + 142, + 105, + 89, + 100, + 43, + 150, + 96, + 23, + 210, + 145, + 27, + 156, + 32, + 25, + 245, + 166, + 1, + 229, + 42, + 252, + 243, + 242, + 223, + 90, + 8, + 146, + 81, + 129, + 194, + 125, + 105, + 91, + 8, + 115, + 41, + 14, + 105, + 88, + 22, + 94, + 8, + 85, + 244, + 164, + 4, + 97, + 130, + 157, + 144, + 140, + 159, + 90, + 14, + 212, + 59, + 165, + 249, + 155, + 235, + 78, + 5, + 73, + 217, + 24, + 25, + 238, + 113, + 72, + 72, + 135, + 169, + 12, + 199, + 218, + 152, + 8, + 99, + 45, + 251, + 201, + 72, + 10, + 59, + 80, + 3, + 74, + 48, + 132, + 34, + 10, + 82, + 55, + 15, + 50, + 86, + 224, + 116, + 90, + 102, + 76, + 135, + 146, + 99, + 94, + 220, + 82, + 0, + 56, + 13, + 178, + 46, + 189, + 218, + 160, + 144, + 109, + 56, + 206, + 125, + 234, + 198, + 75, + 157, + 145, + 130, + 23, + 185, + 170, + 242, + 112, + 248, + 7, + 32, + 119, + 166, + 49, + 98, + 96, + 132, + 128, + 9, + 115, + 210, + 157, + 42, + 237, + 143, + 107, + 16, + 92, + 156, + 147, + 233, + 77, + 133, + 153, + 88, + 132, + 93, + 196, + 254, + 148, + 167, + 141, + 216, + 201, + 56, + 249, + 137, + 237, + 72, + 67, + 35, + 36, + 31, + 151, + 25, + 60, + 15, + 106, + 123, + 15, + 151, + 106, + 243, + 207, + 204, + 213, + 26, + 240, + 195, + 21, + 55, + 12, + 49, + 157, + 136, + 189, + 125, + 232, + 24, + 132, + 0, + 161, + 87, + 132, + 238, + 221, + 205, + 33, + 33, + 134, + 78, + 118, + 142, + 130, + 128, + 70, + 55, + 21, + 194, + 142, + 21, + 125, + 105, + 64, + 43, + 254, + 241, + 237, + 233, + 76, + 0, + 183, + 115, + 247, + 143, + 79, + 106, + 111, + 183, + 62, + 231, + 214, + 156, + 188, + 130, + 7, + 221, + 31, + 120, + 210, + 96, + 158, + 71, + 115, + 197, + 2, + 47, + 20, + 199, + 214, + 144, + 19, + 222, + 166, + 32, + 48, + 199, + 113, + 77, + 217, + 235, + 76, + 6, + 98, + 138, + 113, + 27, + 126, + 148, + 209, + 64, + 18, + 198, + 120, + 169, + 55, + 14, + 42, + 184, + 200, + 167, + 6, + 160, + 11, + 2, + 138, + 98, + 183, + 62, + 212, + 239, + 113, + 72, + 5, + 34, + 138, + 77, + 212, + 188, + 26, + 0, + 90, + 76, + 210, + 142, + 40, + 32, + 26, + 0, + 1, + 162, + 138, + 51, + 64, + 5, + 29, + 13, + 25, + 160, + 208, + 1, + 205, + 0, + 208, + 13, + 6, + 128, + 3, + 73, + 154, + 50, + 123, + 208, + 13, + 0, + 24, + 30, + 166, + 148, + 28, + 112, + 104, + 205, + 33, + 52, + 0, + 185, + 164, + 220, + 41, + 41, + 195, + 165, + 0, + 37, + 40, + 52, + 187, + 65, + 164, + 42, + 49, + 197, + 0, + 4, + 83, + 74, + 250, + 82, + 227, + 212, + 209, + 183, + 253, + 170, + 0, + 81, + 210, + 151, + 173, + 51, + 37, + 78, + 15, + 231, + 79, + 7, + 34, + 128, + 16, + 169, + 52, + 46, + 123, + 210, + 209, + 248, + 208, + 2, + 26, + 51, + 199, + 52, + 166, + 154, + 15, + 98, + 40, + 0, + 219, + 232, + 105, + 14, + 69, + 41, + 207, + 106, + 76, + 3, + 212, + 80, + 1, + 156, + 246, + 20, + 210, + 24, + 30, + 5, + 60, + 40, + 237, + 77, + 109, + 195, + 166, + 104, + 0, + 250, + 211, + 73, + 11, + 222, + 156, + 57, + 239, + 138, + 82, + 7, + 126, + 104, + 0, + 86, + 220, + 41, + 172, + 132, + 28, + 209, + 184, + 14, + 0, + 165, + 25, + 244, + 160, + 6, + 124, + 189, + 10, + 131, + 73, + 143, + 64, + 71, + 210, + 164, + 40, + 167, + 147, + 197, + 53, + 155, + 104, + 226, + 128, + 26, + 51, + 252, + 89, + 167, + 0, + 163, + 248, + 169, + 23, + 230, + 254, + 42, + 95, + 44, + 142, + 226, + 128, + 17, + 164, + 236, + 40, + 216, + 91, + 161, + 165, + 200, + 61, + 134, + 105, + 54, + 190, + 120, + 198, + 40, + 1, + 62, + 85, + 28, + 168, + 164, + 47, + 199, + 2, + 156, + 85, + 8, + 249, + 133, + 67, + 38, + 209, + 247, + 73, + 160, + 8, + 216, + 243, + 76, + 52, + 226, + 121, + 164, + 52, + 12, + 64, + 113, + 70, + 40, + 227, + 20, + 80, + 3, + 79, + 90, + 80, + 61, + 104, + 60, + 80, + 41, + 0, + 210, + 57, + 163, + 165, + 41, + 164, + 32, + 145, + 197, + 0, + 75, + 22, + 29, + 72, + 197, + 66, + 192, + 134, + 34, + 167, + 135, + 1, + 54, + 168, + 25, + 238, + 106, + 39, + 31, + 53, + 0, + 53, + 88, + 131, + 197, + 79, + 188, + 40, + 206, + 1, + 53, + 94, + 164, + 142, + 86, + 81, + 128, + 50, + 79, + 165, + 0, + 72, + 84, + 177, + 203, + 176, + 3, + 174, + 41, + 55, + 151, + 59, + 99, + 24, + 30, + 184, + 161, + 148, + 99, + 116, + 132, + 250, + 208, + 142, + 207, + 194, + 41, + 3, + 214, + 152, + 133, + 218, + 145, + 13, + 206, + 119, + 55, + 165, + 32, + 67, + 48, + 221, + 35, + 21, + 29, + 133, + 35, + 42, + 198, + 217, + 220, + 75, + 30, + 212, + 187, + 90, + 69, + 253, + 225, + 42, + 191, + 149, + 0, + 2, + 79, + 224, + 136, + 113, + 211, + 118, + 40, + 194, + 68, + 119, + 12, + 187, + 154, + 64, + 95, + 27, + 98, + 82, + 87, + 214, + 154, + 112, + 48, + 20, + 18, + 231, + 222, + 128, + 23, + 3, + 62, + 100, + 199, + 158, + 203, + 65, + 204, + 167, + 50, + 252, + 177, + 138, + 70, + 1, + 57, + 151, + 150, + 236, + 1, + 164, + 101, + 112, + 161, + 164, + 198, + 222, + 195, + 52, + 128, + 93, + 197, + 134, + 212, + 24, + 143, + 161, + 230, + 171, + 190, + 55, + 156, + 116, + 169, + 240, + 206, + 155, + 142, + 17, + 123, + 15, + 90, + 172, + 79, + 38, + 129, + 143, + 136, + 178, + 177, + 217, + 140, + 159, + 90, + 119, + 1, + 74, + 103, + 147, + 247, + 141, + 50, + 48, + 75, + 112, + 113, + 234, + 106, + 64, + 60, + 204, + 246, + 65, + 252, + 84, + 196, + 64, + 69, + 76, + 191, + 188, + 80, + 207, + 247, + 71, + 79, + 122, + 133, + 185, + 39, + 210, + 159, + 27, + 149, + 24, + 235, + 233, + 72, + 100, + 132, + 97, + 242, + 220, + 159, + 225, + 30, + 148, + 206, + 237, + 147, + 207, + 115, + 75, + 158, + 56, + 57, + 99, + 212, + 250, + 82, + 140, + 99, + 0, + 124, + 163, + 245, + 166, + 33, + 9, + 249, + 64, + 3, + 129, + 211, + 222, + 149, + 88, + 134, + 254, + 116, + 133, + 139, + 18, + 113, + 255, + 0, + 214, + 164, + 206, + 6, + 122, + 208, + 6, + 167, + 90, + 81, + 239, + 77, + 35, + 184, + 165, + 28, + 208, + 2, + 145, + 216, + 244, + 166, + 108, + 193, + 226, + 159, + 245, + 165, + 197, + 48, + 27, + 129, + 76, + 35, + 7, + 21, + 45, + 24, + 12, + 57, + 160, + 8, + 195, + 96, + 212, + 129, + 169, + 166, + 58, + 110, + 13, + 0, + 60, + 228, + 210, + 171, + 17, + 193, + 166, + 161, + 206, + 69, + 59, + 25, + 95, + 165, + 0, + 59, + 119, + 165, + 40, + 106, + 137, + 179, + 218, + 144, + 54, + 120, + 52, + 1, + 54, + 239, + 90, + 42, + 29, + 220, + 226, + 156, + 9, + 198, + 40, + 176, + 15, + 39, + 156, + 82, + 110, + 56, + 164, + 60, + 138, + 50, + 8, + 160, + 7, + 6, + 7, + 189, + 40, + 166, + 109, + 230, + 157, + 130, + 5, + 0, + 41, + 165, + 2, + 155, + 78, + 232, + 40, + 1, + 254, + 212, + 220, + 123, + 209, + 187, + 52, + 134, + 144, + 10, + 22, + 151, + 24, + 233, + 64, + 163, + 52, + 0, + 153, + 197, + 46, + 234, + 111, + 227, + 71, + 78, + 180, + 0, + 81, + 206, + 57, + 165, + 29, + 121, + 167, + 99, + 138, + 0, + 143, + 56, + 165, + 20, + 16, + 59, + 138, + 64, + 48, + 120, + 233, + 64, + 18, + 83, + 78, + 105, + 115, + 197, + 55, + 112, + 52, + 0, + 191, + 90, + 66, + 5, + 47, + 214, + 140, + 15, + 90, + 0, + 79, + 166, + 104, + 235, + 214, + 130, + 113, + 212, + 82, + 99, + 61, + 232, + 0, + 233, + 222, + 148, + 62, + 105, + 54, + 99, + 173, + 33, + 218, + 59, + 80, + 2, + 176, + 39, + 167, + 90, + 78, + 71, + 222, + 20, + 12, + 246, + 20, + 191, + 90, + 0, + 105, + 11, + 219, + 52, + 153, + 97, + 235, + 138, + 83, + 242, + 255, + 0, + 21, + 46, + 252, + 244, + 160, + 4, + 224, + 255, + 0, + 21, + 46, + 118, + 142, + 198, + 153, + 181, + 179, + 235, + 79, + 200, + 28, + 17, + 64, + 9, + 184, + 183, + 221, + 2, + 155, + 181, + 191, + 139, + 165, + 7, + 175, + 202, + 166, + 148, + 19, + 223, + 52, + 0, + 223, + 145, + 79, + 124, + 210, + 249, + 135, + 160, + 6, + 149, + 130, + 158, + 123, + 211, + 55, + 145, + 192, + 34, + 128, + 28, + 70, + 71, + 39, + 21, + 89, + 243, + 187, + 25, + 200, + 169, + 25, + 207, + 214, + 163, + 61, + 121, + 160, + 6, + 226, + 145, + 169, + 73, + 244, + 164, + 193, + 52, + 0, + 130, + 142, + 41, + 113, + 77, + 160, + 97, + 72, + 105, + 115, + 197, + 39, + 52, + 0, + 152, + 167, + 70, + 55, + 62, + 59, + 14, + 180, + 132, + 154, + 145, + 98, + 108, + 124, + 220, + 45, + 33, + 14, + 101, + 78, + 21, + 23, + 147, + 214, + 163, + 145, + 10, + 158, + 106, + 80, + 169, + 159, + 144, + 28, + 251, + 154, + 142, + 101, + 101, + 31, + 49, + 20, + 192, + 139, + 20, + 228, + 109, + 141, + 145, + 77, + 160, + 241, + 72, + 100, + 216, + 71, + 230, + 66, + 105, + 203, + 41, + 111, + 146, + 53, + 192, + 245, + 168, + 99, + 218, + 220, + 62, + 113, + 82, + 128, + 231, + 136, + 215, + 11, + 245, + 160, + 66, + 226, + 40, + 206, + 121, + 103, + 247, + 166, + 182, + 231, + 57, + 151, + 33, + 71, + 106, + 113, + 17, + 167, + 65, + 151, + 250, + 211, + 66, + 156, + 150, + 155, + 242, + 205, + 48, + 23, + 204, + 98, + 54, + 196, + 48, + 61, + 105, + 187, + 145, + 14, + 20, + 2, + 254, + 180, + 108, + 105, + 63, + 213, + 168, + 85, + 164, + 98, + 171, + 242, + 42, + 169, + 111, + 90, + 0, + 77, + 222, + 91, + 101, + 128, + 102, + 63, + 141, + 59, + 149, + 59, + 228, + 108, + 183, + 101, + 164, + 255, + 0, + 85, + 208, + 150, + 115, + 218, + 148, + 133, + 140, + 111, + 144, + 146, + 244, + 1, + 28, + 178, + 22, + 28, + 140, + 31, + 74, + 128, + 210, + 187, + 23, + 109, + 198, + 155, + 64, + 199, + 40, + 235, + 233, + 222, + 164, + 99, + 242, + 3, + 209, + 7, + 111, + 90, + 141, + 61, + 250, + 103, + 165, + 76, + 184, + 99, + 185, + 184, + 199, + 69, + 197, + 2, + 43, + 177, + 201, + 205, + 38, + 113, + 79, + 124, + 238, + 36, + 140, + 26, + 142, + 144, + 201, + 84, + 238, + 60, + 113, + 74, + 122, + 250, + 84, + 64, + 224, + 212, + 155, + 242, + 57, + 166, + 33, + 194, + 163, + 144, + 224, + 224, + 80, + 92, + 227, + 142, + 190, + 180, + 206, + 248, + 234, + 104, + 25, + 177, + 210, + 148, + 117, + 166, + 231, + 20, + 28, + 246, + 166, + 34, + 65, + 207, + 20, + 157, + 40, + 7, + 32, + 30, + 244, + 19, + 64, + 1, + 28, + 100, + 82, + 7, + 193, + 164, + 45, + 76, + 205, + 0, + 77, + 188, + 83, + 115, + 233, + 81, + 231, + 138, + 65, + 158, + 212, + 0, + 254, + 141, + 145, + 79, + 6, + 162, + 206, + 105, + 69, + 0, + 73, + 193, + 164, + 49, + 231, + 165, + 55, + 36, + 84, + 138, + 224, + 253, + 104, + 2, + 53, + 82, + 15, + 53, + 40, + 81, + 138, + 24, + 12, + 230, + 149, + 79, + 24, + 160, + 6, + 142, + 188, + 210, + 149, + 29, + 169, + 74, + 130, + 115, + 74, + 56, + 235, + 205, + 0, + 2, + 158, + 41, + 185, + 244, + 165, + 205, + 32, + 17, + 151, + 29, + 40, + 3, + 214, + 151, + 173, + 37, + 0, + 35, + 47, + 165, + 0, + 227, + 173, + 46, + 61, + 233, + 49, + 64, + 15, + 4, + 118, + 163, + 173, + 71, + 208, + 210, + 140, + 250, + 208, + 3, + 240, + 41, + 132, + 226, + 148, + 26, + 48, + 40, + 1, + 1, + 165, + 44, + 64, + 165, + 227, + 218, + 146, + 128, + 16, + 55, + 168, + 167, + 6, + 166, + 237, + 193, + 226, + 148, + 17, + 233, + 64, + 8, + 205, + 131, + 210, + 147, + 118, + 123, + 83, + 138, + 228, + 83, + 72, + 24, + 160, + 5, + 7, + 214, + 157, + 81, + 169, + 29, + 233, + 192, + 250, + 80, + 3, + 179, + 158, + 180, + 194, + 15, + 97, + 79, + 200, + 164, + 39, + 20, + 0, + 131, + 36, + 115, + 70, + 7, + 90, + 51, + 158, + 244, + 184, + 199, + 106, + 0, + 51, + 138, + 67, + 150, + 233, + 70, + 239, + 106, + 105, + 7, + 168, + 20, + 0, + 5, + 199, + 45, + 74, + 72, + 199, + 2, + 128, + 71, + 113, + 77, + 125, + 189, + 69, + 0, + 33, + 207, + 96, + 105, + 64, + 7, + 239, + 102, + 132, + 99, + 211, + 154, + 115, + 12, + 142, + 180, + 0, + 222, + 159, + 116, + 211, + 75, + 147, + 214, + 151, + 36, + 119, + 163, + 37, + 190, + 148, + 0, + 4, + 98, + 115, + 144, + 104, + 108, + 40, + 232, + 41, + 174, + 219, + 71, + 21, + 17, + 144, + 55, + 20, + 0, + 210, + 220, + 159, + 74, + 24, + 241, + 72, + 105, + 9, + 226, + 128, + 17, + 121, + 228, + 208, + 79, + 52, + 40, + 61, + 168, + 97, + 206, + 104, + 0, + 25, + 52, + 16, + 41, + 115, + 73, + 64, + 12, + 39, + 154, + 90, + 24, + 142, + 180, + 42, + 22, + 228, + 130, + 22, + 144, + 0, + 28, + 140, + 12, + 158, + 213, + 40, + 89, + 31, + 151, + 4, + 1, + 78, + 64, + 131, + 238, + 228, + 147, + 74, + 219, + 255, + 0, + 139, + 129, + 76, + 0, + 108, + 78, + 17, + 126, + 106, + 142, + 120, + 206, + 222, + 88, + 28, + 212, + 129, + 129, + 251, + 184, + 30, + 244, + 215, + 140, + 128, + 73, + 108, + 154, + 0, + 172, + 41, + 15, + 52, + 234, + 105, + 164, + 48, + 206, + 41, + 203, + 43, + 1, + 142, + 212, + 218, + 105, + 52, + 1, + 97, + 89, + 113, + 194, + 130, + 105, + 74, + 56, + 249, + 159, + 110, + 61, + 51, + 85, + 178, + 71, + 74, + 145, + 102, + 61, + 232, + 17, + 38, + 246, + 147, + 42, + 8, + 69, + 20, + 155, + 136, + 27, + 83, + 167, + 174, + 41, + 143, + 41, + 106, + 67, + 41, + 198, + 40, + 24, + 230, + 217, + 23, + 59, + 137, + 53, + 11, + 185, + 115, + 150, + 164, + 235, + 214, + 146, + 128, + 3, + 73, + 75, + 73, + 76, + 9, + 16, + 113, + 156, + 243, + 216, + 83, + 200, + 206, + 50, + 126, + 99, + 250, + 83, + 19, + 166, + 59, + 154, + 147, + 27, + 125, + 253, + 232, + 17, + 28, + 170, + 87, + 169, + 207, + 189, + 69, + 82, + 200, + 114, + 189, + 120, + 168, + 141, + 3, + 18, + 140, + 226, + 133, + 86, + 115, + 133, + 31, + 141, + 92, + 130, + 203, + 39, + 47, + 201, + 161, + 33, + 92, + 173, + 28, + 79, + 39, + 65, + 129, + 87, + 173, + 236, + 130, + 224, + 183, + 90, + 181, + 28, + 33, + 71, + 2, + 165, + 11, + 79, + 68, + 0, + 255, + 217 + ]); +} diff --git a/star_lock/lib/talk/call/callTalk.dart b/star_lock/lib/talk/call/callTalk.dart new file mode 100644 index 00000000..cf4985b9 --- /dev/null +++ b/star_lock/lib/talk/call/callTalk.dart @@ -0,0 +1,111 @@ +import 'dart:typed_data'; +import 'package:convert/convert.dart'; +import 'package:flutter_sound/flutter_sound.dart'; +// import 'package:just_audio/just_audio.dart'; +import 'package:star_lock/main/lockDetail/monitoring/monitoring/lockMonitoring_page.dart'; +import 'package:star_lock/talk/call/g711Decoder.dart'; +import 'package:star_lock/talk/call/iFrameInfo.dart'; + +class CallTalk { + static int POS_iframe_index = 63; + static int POS_alen = 65; + static int POS_blen = 73; + static int POS_bag_index = 71; + static int POS_bag_num = 69; + static int POS_data = 77; + static int ABUF_NUM = 100; + static int FIRSTINDEX = 1; + + int status = 0; // 假设有这个成员变量 + IframeInfo iframe = IframeInfo(); // 假设有这个成员变量 + LockMonitoringPage callOut = const LockMonitoringPage(); + late FlutterSoundPlayer _player; + + Future getAVData(Uint8List bb, int len) async { + //视频数据 + // String hexData = + // '5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030420e000002000000b33300001f000100b301b301ffd8ffe000114a4649460001010000'; + // Uint8List bb = Uint8List.fromList(hex.decode(hexData)); + //音频数据 + String hexData = + '5858584349449601075439415f396333613730323264346364a5a5a5a5c0a809a3503138363832313530323337000000000000000030303030e02900000100050080020000010001004001b30145444444444444444445454444444444444444444444434343434443434344444444444544454545444444444444454545454545454545454445444545454545454545444444444343434344444443434344444444444343434343434343434443434343434343424343434343434242424242424242424243434343434242424242424343434342424343434242424242434243434343434344454344444444444444444444444444454545454544444444444444444445454545454545454545454545454546454545454545454545454545454545454646464646464645454545464646454545454545454545454545454544444444444444444443434343434343434343434343434343434343434242424242424242424242424242424343434242434343434343434343434343434343434343434444444343434343430000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024001d044000000000001d080001000000001d18c03000000000'; + Uint8List bb = Uint8List.fromList(hex.decode(hexData)); + + // 音频数据 + if (bb[61] == 1) { + // 如果是音频数据且状态符合条件 + _player = FlutterSoundPlayer(); + _initPlayer(); + + // 解码 + Uint8List g711Data = G711Decoder().decodeG711uLaw(bb); + + await _playAudio(g711Data); + } + // 视频数据 + else { + int bagLen = getShortFromByte(bb, POS_blen + 2); + int getIframeIndex = getShortFromByte(bb, POS_iframe_index); + int alen = getShortFromByte(bb, POS_alen); + int blen = getShortFromByte(bb, POS_blen); + int getBagIndex = bb[POS_bag_index] & 0xff; + int getBagNum = bb[POS_bag_num] & 0xff; + + if (getIframeIndex != iframe.iframeIndex) { + iframe = IframeInfo(); + iframe.iframeIndex = getIframeIndex; + iframe.bagNum = getBagNum; + iframe.cur_len = alen; + iframe.bb = Uint8List(alen); + } + + iframe.bagReceive++; + int start = bagLen * (getBagIndex - FIRSTINDEX); + int end = start + blen; + + // 确保 iframe!.bb 不为 null,并且足够长 + if (iframe.bb == null || iframe.bb!.length < end) { + iframe.bb = Uint8List(end); + } + + copyBytes(iframe!.bb!, start, bb, POS_data, blen); + // 打印输出看看字节数组的内容 + print('Copied Bytes: ${iframe.bb}'); + + Uint8List data = iframe.bb!.sublist(0, iframe.cur_len); + + // 打印拷贝后的目标数据 + print(iframe.bb); + } + } + + int getShortFromByte(Uint8List bb, int pos) { + ByteData byteData = ByteData.sublistView(bb, pos, pos + 2); + return byteData.getInt16(0, Endian.little); + } + + void copyBytes(Uint8List destination, int destStart, Uint8List source, + int sourceStart, int length) { + if (destination.length < destStart + length || + source.length < sourceStart + length) { + // 处理越界的情况,这里你可以抛出异常或者进行其他处理 + print('Error: Index out of range'); + return; + } + + for (int i = 0; i < length; i++) { + destination[destStart + i] = source[sourceStart + i]; + } + } + + Future _initPlayer() async { + await _player.openPlayer(); + } + + Future _playAudio(Uint8List audioData) async { + await _player.startPlayer( + fromDataBuffer: audioData, + codec: Codec.pcm16WAV, + ); + } +} diff --git a/star_lock/lib/talk/call/g711Decoder.dart b/star_lock/lib/talk/call/g711Decoder.dart new file mode 100644 index 00000000..94d665a3 --- /dev/null +++ b/star_lock/lib/talk/call/g711Decoder.dart @@ -0,0 +1,44 @@ +import 'dart:typed_data'; + +class G711Decoder { + // G.711 µ-law解码 + Uint8List decodeG711uLaw(Uint8List data) { + List decodedData = []; + + for (int i = 0; i < data.length; i++) { + int sample = _decodeG711uLawSample(data[i]); + decodedData.add(sample); + } + + return Uint8List.fromList(decodedData); + } + + // G.711 µ-law样本解码 + int _decodeG711uLawSample(int uLawByte) { + const int bias = 0x84; + const int mask = 0x7F; + + uLawByte = ~uLawByte; + int sign = uLawByte & 0x80; + int exponent = (uLawByte & 0x70) >> 4; + int mantissa = uLawByte & 0x0F; + + int sample = ((bias << exponent) + mantissa) * (sign == 0 ? 1 : -1); + + return sample & mask; // 防止溢出 + } +} + +void main() { + G711Decoder g711Decoder = G711Decoder(); + + // 假设 g711Data 是G.711 µ-law编码的数据 + Uint8List g711Data = + Uint8List.fromList([/* your G.711 µ-law encoded data */]); + + // 解码 + List decodedData = g711Decoder.decodeG711uLaw(g711Data); + + // 处理解码后的数据,例如播放音频 + print(decodedData); +} diff --git a/star_lock/lib/talk/call/iFrameInfo.dart b/star_lock/lib/talk/call/iFrameInfo.dart new file mode 100644 index 00000000..89e0101b --- /dev/null +++ b/star_lock/lib/talk/call/iFrameInfo.dart @@ -0,0 +1,22 @@ +import 'dart:typed_data'; + +class IframeInfo { + int iframeIndex = -1; + int iframeTime = 0; + int bagNum = 0; + int bagReceive = 0; + bool isFull = false; + int cur_len = 0; + int bb_len = 0; + Uint8List? bb; + int codecMode = 0; + + IframeInfo() { + iframeIndex = -1; + bagNum = 0; + bagReceive = 0; + isFull = false; + cur_len = 0; + bb = Uint8List(512); + } +} diff --git a/star_lock/lib/talk/playAudio.dart b/star_lock/lib/talk/playAudio.dart deleted file mode 100644 index e69de29b..00000000 diff --git a/star_lock/linux/flutter/generated_plugin_registrant.cc b/star_lock/linux/flutter/generated_plugin_registrant.cc index 7111d06f..05d9a9b9 100644 --- a/star_lock/linux/flutter/generated_plugin_registrant.cc +++ b/star_lock/linux/flutter/generated_plugin_registrant.cc @@ -7,6 +7,7 @@ #include "generated_plugin_registrant.h" #include +#include #include #include @@ -14,6 +15,9 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) aj_captcha_flutter_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "AjCaptchaFlutterPlugin"); aj_captcha_flutter_plugin_register_with_registrar(aj_captcha_flutter_registrar); + g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin"); + audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar); g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); diff --git a/star_lock/linux/flutter/generated_plugins.cmake b/star_lock/linux/flutter/generated_plugins.cmake index 7fbf0d0d..b6e600e9 100644 --- a/star_lock/linux/flutter/generated_plugins.cmake +++ b/star_lock/linux/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST aj_captcha_flutter + audioplayers_linux file_selector_linux url_launcher_linux ) diff --git a/star_lock/macos/Flutter/GeneratedPluginRegistrant.swift b/star_lock/macos/Flutter/GeneratedPluginRegistrant.swift index 127e12ed..ff949269 100644 --- a/star_lock/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/star_lock/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,8 +6,11 @@ import FlutterMacOS import Foundation import aj_captcha_flutter +import audio_session +import audioplayers_darwin import device_info_plus import file_selector_macos +import just_audio import network_info_plus import package_info_plus import path_provider_foundation @@ -17,8 +20,11 @@ import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AjCaptchaFlutterPlugin.register(with: registry.registrar(forPlugin: "AjCaptchaFlutterPlugin")) + AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin")) + AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) + JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin")) NetworkInfoPlusPlugin.register(with: registry.registrar(forPlugin: "NetworkInfoPlusPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) diff --git a/star_lock/pubspec.yaml b/star_lock/pubspec.yaml index 92daab09..f6749724 100644 --- a/star_lock/pubspec.yaml +++ b/star_lock/pubspec.yaml @@ -117,6 +117,14 @@ dependencies: video_player: ^2.7.2 #控制横竖屏控件 auto_orientation: ^2.3.1 + audioplayers: ^5.2.1 + g711_flutter: ^2.0.0 + ffi: ^2.1.0 + flutter_mjpeg: ^2.0.4 + image_gallery_saver: ^2.0.3 + convert: ^3.1.1 + just_audio: ^0.9.36 + flutter_sound: ^9.2.13 dev_dependencies: flutter_test: @@ -148,6 +156,7 @@ flutter: - images/lan/ - images/mine/ - images/lockType/ + - assets/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware diff --git a/star_lock/windows/flutter/generated_plugin_registrant.cc b/star_lock/windows/flutter/generated_plugin_registrant.cc index e2cbdfa4..c3bf33a2 100644 --- a/star_lock/windows/flutter/generated_plugin_registrant.cc +++ b/star_lock/windows/flutter/generated_plugin_registrant.cc @@ -7,6 +7,7 @@ #include "generated_plugin_registrant.h" #include +#include #include #include #include @@ -14,6 +15,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { AjCaptchaFlutterPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("AjCaptchaFlutterPluginCApi")); + AudioplayersWindowsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); PermissionHandlerWindowsPluginRegisterWithRegistrar( diff --git a/star_lock/windows/flutter/generated_plugins.cmake b/star_lock/windows/flutter/generated_plugins.cmake index fda93fcf..f7d39f56 100644 --- a/star_lock/windows/flutter/generated_plugins.cmake +++ b/star_lock/windows/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST aj_captcha_flutter + audioplayers_windows file_selector_windows permission_handler_windows url_launcher_windows