From a0857bed95f8219d7a3e3b65d07dfe9ff1176ff6 Mon Sep 17 00:00:00 2001 From: ywy <641840315@qq.com> Date: Mon, 29 Apr 2024 14:47:24 +0800 Subject: [PATCH 1/4] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E2=80=9C?= =?UTF-8?q?=E6=88=91=E7=9A=84=E2=80=9D=E9=A1=B5=E9=9D=A2=202=E3=80=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E6=89=8B=E6=9C=BA=E5=88=97=E8=A1=A8?= =?UTF-8?q?UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 30 ++- .../cloudapp/common/CasCommonDialog.java | 10 + .../bean/direct/ResponseGetConnectInfo.java | 15 +- .../ui/CasCloudDirectMainActivity.java | 18 +- .../cloudapp/ui/CasCloudLoginActivity.java | 9 + .../ui/activity/mine/MineAboutActivity.java | 112 ++++++++ .../mine/MineAboutPrivacyPolicyActivity.java | 21 ++ .../activity/mine/MineQuestion1Activity.java | 38 +++ .../activity/mine/MineQuestion2Activity.java | 45 ++++ .../activity/mine/MineQuestion3Activity.java | 44 ++++ .../ui/common/ButtonTouchStyleListener.java | 31 +++ .../cloudapp/ui/common/SmoothScroller.java | 19 ++ .../ui/fragment/home/PhoneListFragment.java | 37 ++- .../ui/fragment/mine/MineFragment.java | 247 ++++++++++++++++++ .../ui/fragment/mine/MineViewModel.java | 18 ++ .../cloudapp/ui/fragment/mine/Tools.java | 23 ++ .../huawei/cloudapp/utils/CasCommonUtils.java | 18 ++ .../cloudapp/utils/CasConstantsUtil.java | 6 + app/src/main/res/anim/slide_center.xml | 9 + app/src/main/res/anim/slide_in_left.xml | 8 + app/src/main/res/anim/slide_in_right.xml | 9 + app/src/main/res/anim/slide_out_left.xml | 7 + app/src/main/res/anim/slide_out_right.xml | 9 + app/src/main/res/drawable/cae_view_back.xml | 5 + app/src/main/res/drawable/cae_view_enter.xml | 5 + app/src/main/res/drawable/head.jpg | Bin 0 -> 6711 bytes .../res/drawable/project_id_screenshot.png | Bin 0 -> 50309 bytes .../main/res/layout/activity_mine_about.xml | 182 +++++++++++++ .../activity_mine_about_privacy_policy.xml | 36 +++ .../res/layout/activity_mine_question1.xml | 64 +++++ .../res/layout/activity_mine_question2.xml | 73 ++++++ .../res/layout/activity_mine_question3.xml | 95 +++++++ .../main/res/layout/cas_phone_item_list.xml | 165 ++++++++---- app/src/main/res/layout/fragment_explore.xml | 2 +- app/src/main/res/layout/fragment_home.xml | 1 + app/src/main/res/layout/fragment_mine.xml | 245 +++++++++++++++++ app/src/main/res/layout/spinner_item.xml | 2 +- app/src/main/res/menu/bottom_nav_menu.xml | 2 +- .../main/res/navigation/mobile_navigation.xml | 7 +- app/src/main/res/values/colors.xml | 4 + app/src/main/res/values/dimens.xml | 15 ++ app/src/main/res/values/strings.xml | 9 + app/src/main/res/values/styles.xml | 14 + 43 files changed, 1630 insertions(+), 79 deletions(-) create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutActivity.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutPrivacyPolicyActivity.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion1Activity.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion2Activity.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion3Activity.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/common/ButtonTouchStyleListener.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/common/SmoothScroller.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineFragment.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineViewModel.java create mode 100644 app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/Tools.java create mode 100644 app/src/main/res/anim/slide_center.xml create mode 100644 app/src/main/res/anim/slide_in_left.xml create mode 100644 app/src/main/res/anim/slide_in_right.xml create mode 100644 app/src/main/res/anim/slide_out_left.xml create mode 100644 app/src/main/res/anim/slide_out_right.xml create mode 100644 app/src/main/res/drawable/cae_view_back.xml create mode 100644 app/src/main/res/drawable/cae_view_enter.xml create mode 100644 app/src/main/res/drawable/head.jpg create mode 100644 app/src/main/res/drawable/project_id_screenshot.png create mode 100644 app/src/main/res/layout/activity_mine_about.xml create mode 100644 app/src/main/res/layout/activity_mine_about_privacy_policy.xml create mode 100644 app/src/main/res/layout/activity_mine_question1.xml create mode 100644 app/src/main/res/layout/activity_mine_question2.xml create mode 100644 app/src/main/res/layout/activity_mine_question3.xml create mode 100644 app/src/main/res/layout/fragment_mine.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 010fcd8..0a63e55 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,6 +19,35 @@ android:networkSecurityConfig="@xml/network_security_config" android:supportsRtl="true" android:theme="@style/AppTheme"> + + + + + + + - \ No newline at end of file diff --git a/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java b/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java index 178f00d..0a21b39 100644 --- a/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java +++ b/app/src/main/java/com/huawei/cloudapp/common/CasCommonDialog.java @@ -19,6 +19,7 @@ package com.huawei.cloudapp.common; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; @@ -50,6 +51,7 @@ public class CasCommonDialog extends Dialog { private String negativeButtonText; private OnClickListener positiveButtonClickListener; private OnClickListener negativeButtonClickListener; + private int contentGravity; public Builder(Context context) { this.context = context; @@ -104,6 +106,11 @@ public class CasCommonDialog extends Dialog { return this; } + public Builder setGravity(int gravity) { + this.contentGravity = gravity; + return this; + } + public CasCommonDialog create() { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final CasCommonDialog dialog = new CasCommonDialog(context, R.style.dialog); @@ -144,6 +151,9 @@ public class CasCommonDialog extends Dialog { } TextView messageTV = (TextView) layout.findViewById(R.id.message); + if (contentGravity != 0) { + messageTV.setGravity(contentGravity); + } LinearLayout content = (LinearLayout) layout.findViewById(R.id.content); if (message != null) { messageTV.setText(message); diff --git a/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java b/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java index 8431180..77871a3 100644 --- a/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java +++ b/app/src/main/java/com/huawei/cloudapp/model/bean/direct/ResponseGetConnectInfo.java @@ -73,7 +73,7 @@ public class ResponseGetConnectInfo implements Parcelable { private int accessPort; @SerializedName("session_id") private String sessionId; - @SerializedName("auth_ts") + @SerializedName("timestamp") private String timestamp; @SerializedName("ticket") private String ticket; @@ -184,6 +184,19 @@ public class ResponseGetConnectInfo implements Parcelable { return new AccessInfo[size]; } }; + + @Override + public String toString() { + return "AccessInfo{" + + "accessIp='" + accessIp + '\'' + + ", intranetIp='" + intranetIp + '\'' + + ", accessIpv6='" + accessIpv6 + '\'' + + ", accessPort=" + accessPort + + ", sessionId='" + sessionId + '\'' + + ", timestamp='" + timestamp + '\'' + + ", ticket='" + ticket + '\'' + + '}'; + } } diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java index fda8ea2..a119b40 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudDirectMainActivity.java @@ -19,6 +19,7 @@ import static com.huawei.cloudapp.utils.CasConstantsUtil.USERNAME; import static com.huawei.cloudapp.utils.CasConstantsUtil.USER_INFO; import android.annotation.SuppressLint; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; @@ -64,6 +65,7 @@ import com.huawei.cloudapp.model.direct.PhoneModel; import com.huawei.cloudapp.presenter.PhonePresenter; import com.huawei.cloudapp.presenter.UserPresenter; import com.huawei.cloudapp.ui.adapter.PhoneListAdapter; +import com.huawei.cloudapp.ui.common.SmoothScroller; import com.huawei.cloudapp.utils.CasAESKeystoreUtils; import com.huawei.cloudapp.utils.CasCommonUtils; import com.scwang.smart.refresh.footer.ClassicsFooter; @@ -270,7 +272,7 @@ public class CasCloudDirectMainActivity extends AppCompatActivity implements IHa pagerSnapHelper.attachToRecyclerView(mRecyclerView); if (mViewType == 0) { - mLayoutManager = new LinearLayoutManager(this); + mLayoutManager = new MyLayoutManager(this); mPhoneListAdapter = new PhoneListAdapter(R.layout.cas_phone_item_list); mRecyclerView.clearOnScrollListeners(); mRecyclerView.setPadding(0, 0, 0, 0); @@ -786,4 +788,18 @@ public class CasCloudDirectMainActivity extends AppCompatActivity implements IHa getUserPhoneList(true); } } + + public class MyLayoutManager extends LinearLayoutManager { + + public MyLayoutManager(Context context) { + super(context); + } + + @Override + public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) { + SmoothScroller smoothScroller = new SmoothScroller(recyclerView.getContext()); + smoothScroller.setTargetPosition(position); + startSmoothScroll(smoothScroller); + } + } } diff --git a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudLoginActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudLoginActivity.java index c53b3e5..d3a3a37 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/CasCloudLoginActivity.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/CasCloudLoginActivity.java @@ -88,8 +88,17 @@ public class CasCloudLoginActivity extends Activity implements IHandleData setContentView(R.layout.activity_cas_cloud_login); loginView = findViewById(R.id.login); loginView.setIamEnable(CasCommonUtils.isDirectMode()); + + + loginView.setIamEnable(true); + + loginView.setListener((loginUser, loginIamUser, loginPass, isUseIam) -> { + loginUser.getEditText().setText("liuqiangqiang"); + loginIamUser.getEditText().setText("yinwenyao"); + loginPass.getEditText().setText("YINwenyao1008611++--"); + String userStr = loginUser.getEditText().getText().toString(); if (userStr.isEmpty()) { loginUser.setError("User name can't be empty"); diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutActivity.java new file mode 100644 index 0000000..cd67bc2 --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutActivity.java @@ -0,0 +1,112 @@ +package com.huawei.cloudapp.ui.activity.mine; + +import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.Gravity; +import android.view.MenuItem; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.content.res.AppCompatResources; +import androidx.appcompat.widget.Toolbar; + +import com.huawei.cloudapp.R; +import com.huawei.cloudapp.common.CasCommonDialog; +import com.huawei.cloudapp.ui.common.ButtonTouchStyleListener; +import com.huawei.cloudapp.utils.CasCommonUtils; + +public class MineAboutActivity extends AppCompatActivity { + + private CasCommonDialog connectUsDialog; + + private static final String CONNECT_MSG1 = "4000-955-988 转 1"; + private static final String CONNECT_MSG2 = "950808 转 1"; + private static final String CONNECT_MSG3 = "为您提供售前购买咨询、解决方案推荐、配置推荐等1v1服务, 助您上云无忧!\n\n热线服务时间 9:00-18:00"; + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mine_about); + + ImageView backButton = findViewById(R.id.back_button); + backButton.setOnClickListener(view -> onBackPressed()); + + TextView version = findViewById(R.id.about_version); + version.setText(CasCommonUtils.getApkVersion(MineAboutActivity.this)); + + RelativeLayout connectUs = findViewById(R.id.connect_us_linear); + connectUs.setOnTouchListener(new ButtonTouchStyleListener()); + connectUs.setOnClickListener(new MineAboutClickListener()); + + RelativeLayout checkNewVersion = findViewById(R.id.check_new_version_linear); + checkNewVersion.setOnTouchListener(new ButtonTouchStyleListener()); + checkNewVersion.setOnClickListener(new MineAboutClickListener()); + + RelativeLayout privacyPolicy = findViewById(R.id.privacy_policy_linear); + privacyPolicy.setOnTouchListener(new ButtonTouchStyleListener()); + privacyPolicy.setOnClickListener(new MineAboutClickListener()); + } + + class MineAboutClickListener implements View.OnClickListener { + + @Override + public void onClick(View view) { + + switch (view.getId()) { + case R.id.connect_us_linear: + showConnectUsDialog(); + break; + case R.id.check_new_version_linear: + Toast.makeText(view.getContext(), "检查新版本", Toast.LENGTH_SHORT).show(); + break; + case R.id.privacy_policy_linear: + Intent intent = new Intent(MineAboutActivity.this, MineAboutPrivacyPolicyActivity.class); + startActivity(intent); + break; + default: + Toast.makeText(view.getContext(), "空白", Toast.LENGTH_SHORT).show(); + } + } + } + + public void showConnectUsDialog() { + if (connectUsDialog == null || !connectUsDialog.isShowing()) { + final View contentView = View.inflate(MineAboutActivity.this, R.layout.cas_set_ui_level, null); + CasCommonDialog.DialogClickListener dialogListener = new CasCommonDialog.DialogClickListener(); + + final CasCommonDialog.Builder builder = new CasCommonDialog.Builder(MineAboutActivity.this) + .setTitle(R.string.connect_us) + .setMessage(getConnectMsg(MineAboutActivity.this)) + .setContentView(contentView) + .setGravity(Gravity.START) + .setPositiveButton(getResources().getString(R.string.cas_phone_confirm_tip_message), dialogListener); + + connectUsDialog = builder.create(); + connectUsDialog.setCancelable(true); + if (!isFinishing()) { + connectUsDialog.show(); + } + } + } + + private static String getConnectMsg(Context context) { + return context.getResources().getString(R.string.sale_phone) + + ENTER_STRING + + CONNECT_MSG1 + + ENTER_STRING + + CONNECT_MSG2 + +ENTER_STRING + + CONNECT_MSG3; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutPrivacyPolicyActivity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutPrivacyPolicyActivity.java new file mode 100644 index 0000000..32e014f --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineAboutPrivacyPolicyActivity.java @@ -0,0 +1,21 @@ +package com.huawei.cloudapp.ui.activity.mine; + +import android.os.Bundle; +import android.widget.ImageView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.huawei.cloudapp.R; + +public class MineAboutPrivacyPolicyActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mine_about_privacy_policy); + + ImageView backButton = findViewById(R.id.back_button); + backButton.setOnClickListener(view -> onBackPressed()); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion1Activity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion1Activity.java new file mode 100644 index 0000000..750fd8a --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion1Activity.java @@ -0,0 +1,38 @@ +package com.huawei.cloudapp.ui.activity.mine; + +import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING; + +import android.os.Bundle; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.huawei.cloudapp.R; + +public class MineQuestion1Activity extends AppCompatActivity { + + private static final String MSG1 = "1.若您是咨询云手机是否可安装IOS系统,答案是不可以。目前只支持安装开源的谷歌AOSP版本,其他手机系统出于商业授权缘故、架构不一致等缘由,我们不能提供。"; + private static final String MSG2 = "2.若您是咨询是否可以通过IOS系统连接云手机,答案是可以。我们支持通过任何系统连接云手机。"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mine_question1); + + ImageView backButton = findViewById(R.id.back_button); + backButton.setOnClickListener(view -> onBackPressed()); + + TextView content = findViewById(R.id.mine_question1_content_text); + content.setText(getQuestion2Content()); + + } + + private static String getQuestion2Content() { + return MSG1 + + ENTER_STRING + + MSG2 + + ENTER_STRING; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion2Activity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion2Activity.java new file mode 100644 index 0000000..3b63f1f --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion2Activity.java @@ -0,0 +1,45 @@ +package com.huawei.cloudapp.ui.activity.mine; + +import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING; + +import android.app.Dialog; +import android.graphics.Matrix; +import android.graphics.PointF; +import android.os.Bundle; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.huawei.cloudapp.R; + +public class MineQuestion2Activity extends AppCompatActivity { + + private static final String STEP1 = "1.登录管理控制台。"; + private static final String STEP2 = "2.在右上角用户名的下拉列表中,单击“我的凭证”。"; + private static final String STEP3 = "3.在“项目列表”中获取各区域对应的“项目ID”。"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mine_question2); + + ImageView backButton = findViewById(R.id.back_button); + backButton.setOnClickListener(view -> onBackPressed()); + + TextView content = findViewById(R.id.mine_question2_content_text); + content.setText(getQuestion2Content()); + + ImageView image = findViewById(R.id.mine_question2_image_view); + } + + private static String getQuestion2Content() { + return STEP1 + + ENTER_STRING + + STEP2 + + ENTER_STRING + + STEP3; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion3Activity.java b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion3Activity.java new file mode 100644 index 0000000..0989727 --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/activity/mine/MineQuestion3Activity.java @@ -0,0 +1,44 @@ +package com.huawei.cloudapp.ui.activity.mine; + +import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING; + +import android.os.Bundle; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.huawei.cloudapp.R; + +public class MineQuestion3Activity extends AppCompatActivity { + + private static final String QUESTION_DES = "如果私钥文件丢失了,可以为服务器替换新的密钥对,并使用新的私钥文件连接云手机。"; + private static final String SOLUTION_STEP0 = "以下为替换服务器密钥对的操作指导,请提前在云服务器控制台创建密钥对,并将密钥对对应的私钥文件下载至本地。"; + private static final String SOLUTION_STEP1 = "1.登录管理控制台。"; + private static final String SOLUTION_STEP2 = "2.在服务列表页,选择“计算 > 云手机服务器CPH”。进入云手机服务器页面。"; + private static final String SOLUTION_STEP3 = "3.单击左侧导航栏的“服务器管理”。"; + private static final String SOLUTION_STEP4 = "4.选择需要修改密钥对的服务器,在操作列单击“更多 > 修改密钥对”。"; + private static final String SOLUTION_STEP5 = "5.在“修改密钥对”对话框,选择新的密钥对,单击“确定”。等待几分钟,新的密钥对生效。"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mine_question3); + + ImageView backButton = findViewById(R.id.back_button); + backButton.setOnClickListener(view -> onBackPressed()); + + TextView desText = findViewById(R.id.mine_question3_content_text1); + desText.setText(QUESTION_DES); + + TextView solutionText = findViewById(R.id.mine_question3_content_text2); + solutionText.setText(getQuestion3Solution()); + + } + + private static String getQuestion3Solution() { + return String.join(ENTER_STRING, + SOLUTION_STEP0, SOLUTION_STEP1, SOLUTION_STEP2, SOLUTION_STEP3, SOLUTION_STEP4, SOLUTION_STEP5); + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/huawei/cloudapp/ui/common/ButtonTouchStyleListener.java b/app/src/main/java/com/huawei/cloudapp/ui/common/ButtonTouchStyleListener.java new file mode 100644 index 0000000..0bb3192 --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/common/ButtonTouchStyleListener.java @@ -0,0 +1,31 @@ +package com.huawei.cloudapp.ui.common; + +import android.os.Handler; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.huawei.cloudapp.R; + +public class ButtonTouchStyleListener implements View.OnTouchListener { + + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + + if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { + view.setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.cas_radio_button_unselected_color)); + } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + // 改变TextView的颜色 + view.setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.cas_white)); + view.performClick(); + } + }, 200); + } + return true; + } +} diff --git a/app/src/main/java/com/huawei/cloudapp/ui/common/SmoothScroller.java b/app/src/main/java/com/huawei/cloudapp/ui/common/SmoothScroller.java new file mode 100644 index 0000000..8552104 --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/common/SmoothScroller.java @@ -0,0 +1,19 @@ +package com.huawei.cloudapp.ui.common; + +import android.content.Context; +import android.util.DisplayMetrics; + +import androidx.recyclerview.widget.LinearSmoothScroller; + +public class SmoothScroller extends LinearSmoothScroller { + private static final float SPEED = 9000000f; // 滑动速度,单位是像素每毫秒 + + public SmoothScroller(Context context) { + super(context); + } + + @Override + protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { + return SPEED / displayMetrics.densityDpi; + } +} diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java index 19624d9..6770e55 100644 --- a/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/home/PhoneListFragment.java @@ -2,6 +2,8 @@ package com.huawei.cloudapp.ui.fragment.home; import static android.content.Context.MODE_PRIVATE; import static com.huawei.cloudapp.utils.CasConstantsUtil.COMMON; +import static com.huawei.cloudapp.utils.CasConstantsUtil.EMPTY_STRING; +import static com.huawei.cloudapp.utils.CasConstantsUtil.ENTER_STRING; import static com.huawei.cloudapp.utils.CasConstantsUtil.IAM_USERNAME; import static com.huawei.cloudapp.utils.CasConstantsUtil.PHONE_ID; import static com.huawei.cloudapp.utils.CasConstantsUtil.PHONE_NAME; @@ -73,6 +75,7 @@ import com.huawei.cloudapp.presenter.PhonePresenter; import com.huawei.cloudapp.presenter.UserPresenter; import com.huawei.cloudapp.ui.CasCloudLoginActivity; import com.huawei.cloudapp.ui.CasCloudPhoneActivity; +import com.huawei.cloudapp.ui.MainActivity; import com.huawei.cloudapp.ui.adapter.PhoneListAdapter; import com.huawei.cloudapp.utils.CasAESKeystoreUtils; import com.huawei.cloudapp.utils.CasCommonUtils; @@ -103,13 +106,13 @@ public class PhoneListFragment extends Fragment implements IHandleData, private boolean isLogin; private String selectedRegion; private int selectedQueryType; - private String queryContent = ""; + private String queryContent = EMPTY_STRING; private User mUser; private CasCommonDialog mDialog; private int offset = 0; private RecyclerView mRecyclerView; private SmartRefreshLayout mRefreshLayout; - private int mViewType = 0; + private int mViewType = 1; private ImageView mViewTypeIV; private PhoneListAdapter mPhoneListAdapter; @@ -147,7 +150,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, mUserCasRecord.getHashMapRecord(TOKEN), mUserCasRecord.getHashMapRecord(TOKEN_EXPIRE_TIME), mUserCasRecord.getHashMapRecord(PROJECT_ID), - ""); + EMPTY_STRING); isLogin = true; } } @@ -189,7 +192,8 @@ public class PhoneListFragment extends Fragment implements IHandleData, @Override public void onClick(View view) { mTVSearchContent.setText("搜索"); - queryContent = ""; + queryContent = EMPTY_STRING; + mSearchView.setQuery(EMPTY_STRING, false); mTVSearchContentClose.setVisibility(View.GONE); getUserPhoneList(true); } @@ -249,6 +253,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, mSearchPopupLayout = (LinearLayout) View.inflate(view.getContext(), R.layout.cas_search_view, null); mSearchPopupWindow.setContentView(mSearchPopupLayout); + mToolbarSearchView = view.findViewById(R.id.toolbar_search_view); mAppBar = view.findViewById(R.id.main_appbar); mAppBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @@ -459,7 +464,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, phone.setTrafficType(phoneDetail.getTrafficType()); phone.setVncEnable("false"); phone.setVolumeMode(phoneDetail.getVolumeMode()); - return new PhoneInfo(phone, "", selectedRegion); + return new PhoneInfo(phone, EMPTY_STRING, selectedRegion); } private void showPhoneDetail(ResponseGetPhoneDetail phoneDetail) { @@ -491,9 +496,13 @@ public class PhoneListFragment extends Fragment implements IHandleData, whiteIcon.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN); closeButton.setImageDrawable(whiteIcon); + // 设置弹出输入法 + mSearchView.setFocusable(true); + mSearchView.requestFocusFromTouch(); + //设置搜索下拉框 searchSpinner = view.findViewById(R.id.search_spinner); - List searchTypeList = Arrays.asList(new String[]{"名称", "服务器id", "云手机id"}); + List searchTypeList = Arrays.asList("名称", "服务器id", "云手机id"); searchTypeSpinnerAdapter = new ArrayAdapter<>(mActivity, R.layout.spinner_item, searchTypeList); searchTypeSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); searchSpinner.setAdapter(searchTypeSpinnerAdapter); @@ -536,16 +545,16 @@ public class PhoneListFragment extends Fragment implements IHandleData, return false; } - if (!queryContent.equals("") && selectedQueryType == 2) { + if (!queryContent.equals(EMPTY_STRING) && selectedQueryType == 2) { getPhoneDetail(queryContent); } else { getUserPhoneList(true); } - List searchTypeList = Arrays.asList(new String[]{"名称", "服务器id", "云手机id", "状态"}); + List searchTypeList = Arrays.asList("名称", "服务器id", "云手机id", "状态"); mTVSearchContent.setText(searchTypeList.get(selectedQueryType) + ":" + queryContent); mTVSearchContentClose.setVisibility(View.VISIBLE); - mSearchView.setQuery("", false); + mSearchView.setQuery(queryContent, false); mSearchPopupWindow.dismiss(); return true; } @@ -582,7 +591,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, mUserCasRecord.getHashMapRecord(TOKEN), mUserCasRecord.getHashMapRecord(TOKEN_EXPIRE_TIME), mUserCasRecord.getHashMapRecord(PROJECT_ID), - ""); + EMPTY_STRING); } IUserModel userModel = new com.huawei.cloudapp.model.direct.UserModel(); UserPresenter userPresenter = new UserPresenter(this, userModel); @@ -622,7 +631,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, PhonePresenter phonePresenter = new PhonePresenter(this, phoneModel); phonePresenter.restartPhone(mUser, selectedRegion, mUser.getUserProjectId().get(selectedRegion), - "", null, Collections.singletonList(phoneId)); + EMPTY_STRING, null, Collections.singletonList(phoneId)); mDialog.dismiss(); } @@ -631,7 +640,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, PhonePresenter phonePresenter = new PhonePresenter(this, phoneModel); phonePresenter.resetPhone(mUser, selectedRegion, mUser.getUserProjectId().get(selectedRegion), - "", null, Collections.singletonList(phoneId)); + EMPTY_STRING, null, Collections.singletonList(phoneId)); mDialog.dismiss(); } @@ -843,7 +852,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, return; } Log.e(TAG, "onLoadMore: "); - if (!queryContent.equals("") && selectedQueryType == 2) { + if (!queryContent.equals(EMPTY_STRING) && selectedQueryType == 2) { getPhoneDetail(queryContent); } else { getUserPhoneList(false); @@ -859,7 +868,7 @@ public class PhoneListFragment extends Fragment implements IHandleData, return; } mPhoneListAdapter.setNewInstance(new ArrayList<>()); - if (!queryContent.equals("") && selectedQueryType == 2) { + if (!queryContent.equals(EMPTY_STRING) && selectedQueryType == 2) { getPhoneDetail(queryContent); } else { getUserPhoneList(true); diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineFragment.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineFragment.java new file mode 100644 index 0000000..20966eb --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineFragment.java @@ -0,0 +1,247 @@ +package com.huawei.cloudapp.ui.fragment.mine; + +import static android.content.Context.MODE_PRIVATE; +import static com.huawei.cloudapp.utils.CasConstantsUtil.COMMON; +import static com.huawei.cloudapp.utils.CasConstantsUtil.IAM_USERNAME; +import static com.huawei.cloudapp.utils.CasConstantsUtil.PROJECT_ID; +import static com.huawei.cloudapp.utils.CasConstantsUtil.TOKEN; +import static com.huawei.cloudapp.utils.CasConstantsUtil.TOKEN_EXPIRE_TIME; +import static com.huawei.cloudapp.utils.CasConstantsUtil.USERNAME; +import static com.huawei.cloudapp.utils.CasConstantsUtil.USER_INFO; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.graphics.drawable.RoundedBitmapDrawable; +import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; +import androidx.fragment.app.Fragment; + +import com.hjq.toast.ToastParams; +import com.hjq.toast.Toaster; +import com.hjq.toast.style.CustomToastStyle; +import com.huawei.cloudapp.R; +import com.huawei.cloudapp.common.CasCommonDialog; +import com.huawei.cloudapp.common.CasRecord; +import com.huawei.cloudapp.model.bean.User; +import com.huawei.cloudapp.ui.CasCloudLoginActivity; +import com.huawei.cloudapp.ui.activity.mine.MineAboutActivity; +import com.huawei.cloudapp.ui.activity.mine.MineQuestion2Activity; +import com.huawei.cloudapp.ui.activity.mine.MineQuestion3Activity; +import com.huawei.cloudapp.ui.common.ButtonTouchStyleListener; +import com.huawei.cloudapp.utils.CasCommonUtils; + +public class MineFragment extends Fragment { + + private static final String TAG = "MineFragment"; + + private CasRecord mUserCasRecord; + + private User mUser; + + private boolean isLogin; + + private CasCommonDialog mDialog; + + private LinearLayout mLayout; + + private CasRecord mCommonCasRecord; + + private Button logoutButton; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + Log.e(TAG, "onCreate: "); + super.onCreate(savedInstanceState); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + Log.e(TAG, "onCreateView: "); + View view = inflater.inflate(R.layout.fragment_mine, container, false); + getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); + mUserCasRecord = new CasRecord(getActivity().getSharedPreferences(USER_INFO, MODE_PRIVATE)); + String username = mUserCasRecord.getRecord(USERNAME); + if (username == null || username.isEmpty()) { + finishAndReLogin(true); + } else { + mUser = new User(username, + mUserCasRecord.getRecord(IAM_USERNAME), + mUserCasRecord.getHashMapRecord(TOKEN), + mUserCasRecord.getHashMapRecord(TOKEN_EXPIRE_TIME), + mUserCasRecord.getHashMapRecord(PROJECT_ID), + ""); + isLogin = true; + } + return view; + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + Log.e(TAG, "onViewCreated: "); + super.onViewCreated(view, savedInstanceState); + mLayout = view.findViewById(R.id.fragment_mine); + mCommonCasRecord = new CasRecord(view.getContext().getSharedPreferences(COMMON, MODE_PRIVATE)); + + // 圆形头像 + ImageView headImage = (ImageView) view.findViewById(R.id.head); + Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.head); + Bitmap bitmap2 = Tools.makeBitmapSquare(bitmap1, 120); + RoundedBitmapDrawable roundImg = RoundedBitmapDrawableFactory.create(getResources(), bitmap2); + roundImg.setAntiAlias(true); + roundImg.setCornerRadius(bitmap2.getWidth() / 2); + headImage.setImageDrawable(roundImg); + + RelativeLayout aboutLinear = view.findViewById(R.id.mine_about_linear); + aboutLinear.setOnTouchListener(new ButtonTouchStyleListener()); + aboutLinear.setOnClickListener(new SwitchFragmentClickListener()); + + RelativeLayout question1 = view.findViewById(R.id.mine_question1); + question1.setOnTouchListener(new ButtonTouchStyleListener()); + question1.setOnClickListener(new SwitchFragmentClickListener()); + + RelativeLayout question2 = view.findViewById(R.id.mine_question2); + question2.setOnTouchListener(new ButtonTouchStyleListener()); + question2.setOnClickListener(new SwitchFragmentClickListener()); + + RelativeLayout question3 = view.findViewById(R.id.mine_question3); + question3.setOnTouchListener(new ButtonTouchStyleListener()); + question3.setOnClickListener(new SwitchFragmentClickListener()); + + logoutButton = view.findViewById(R.id.logout); + logoutButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showLogoutUserDialog(mUser.getUsername()); + } + }); + + fillUserInfo(view); + + fillSdkVersion(view, getContext()); + + } + + private void fillUserInfo(@NonNull View view) { + if (mUser != null) { + TextView iamUserNameTextView = view.findViewById(R.id.iam_user_name); + iamUserNameTextView.setText(mUser.getIamUsername()); + + TextView userNameTextView = view.findViewById(R.id.user_name); + userNameTextView.setText(mUser.getUsername()); + } + } + + private void fillSdkVersion(View view, Context context) { + TextView sdkTextView = view.findViewById(R.id.sdk_version); + sdkTextView.setText(CasCommonUtils.getApkVersion(context)); + } + + private void finishAndReLogin(boolean isPrompt) { + if (isPrompt) { + //提示客户需要重新登陆 + getActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + ToastParams params = new ToastParams(); + params.text = getResources().getString(R.string.user_info_invalid_need_login); + params.style = new CustomToastStyle(R.layout.toast_error); + Toaster.show(params); + } + }); + } + getActivity().getSharedPreferences(USER_INFO, MODE_PRIVATE).edit().clear().apply(); + Intent intent = new Intent(getActivity(), CasCloudLoginActivity.class); + startActivity(intent); + getActivity().finish(); + } + + @Override + public void onResume() { + Log.e(TAG, "onResume: "); + super.onResume(); + } + + @Override + public void onDestroyView() { + Log.e(TAG, "onDestroyView: "); + super.onDestroyView(); + } + + public void onLogOut(View view) { + if (!isLogin) { + finishAndReLogin(false); + } else { + String name = mUser.getUsername(); + if (!mUser.getIamUsername().isEmpty()) { + name = mUser.getIamUsername(); + } + showLogoutUserDialog(name); + } + } + + public void showLogoutUserDialog(String username) { + if (mDialog == null || !mDialog.isShowing()) { + final View contentView = View.inflate(getContext(), R.layout.cas_set_ui_level, null); + final CasCommonDialog.Builder builder = new CasCommonDialog.Builder(getContext()); + CasCommonDialog.DialogClickListener dialogListener = new CasCommonDialog.DialogClickListener(); + + builder.setTitle(username); + builder.setMessage(getResources().getString(R.string.is_exit_account)); + builder.setContentView(contentView); + builder.setPositiveButton(getResources().getString(R.string.cas_phone_cancel_tip_message), dialogListener); + builder.setNegativeButton(getResources().getString(R.string.cas_phone_quit_app_tip_message), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finishAndReLogin(false); + } + }); + + mDialog = builder.create(); + mDialog.setCancelable(true); + if (!getActivity().isFinishing()) { + mDialog.show(); + } + } + } + + class SwitchFragmentClickListener implements View.OnClickListener { + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.mine_about_linear: + startActivity(new Intent(getActivity(), MineAboutActivity.class)); + break; + case R.id.mine_question1: + Toast.makeText(getActivity(), "问题一", Toast.LENGTH_SHORT).show(); + break; + case R.id.mine_question2: + startActivity(new Intent(getActivity(), MineQuestion2Activity.class)); + break; + case R.id.mine_question3: + startActivity(new Intent(getActivity(), MineQuestion3Activity.class)); + break; + } + } + } +} diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineViewModel.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineViewModel.java new file mode 100644 index 0000000..be6118d --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/MineViewModel.java @@ -0,0 +1,18 @@ +package com.huawei.cloudapp.ui.fragment.mine; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +public class MineViewModel extends ViewModel { + private final MutableLiveData mText; + + public MineViewModel() { + mText = new MutableLiveData<>(); + mText.setValue("This is mine fragment"); + } + + public LiveData getText() { + return mText; + } +} diff --git a/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/Tools.java b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/Tools.java new file mode 100644 index 0000000..10a3d80 --- /dev/null +++ b/app/src/main/java/com/huawei/cloudapp/ui/fragment/mine/Tools.java @@ -0,0 +1,23 @@ +package com.huawei.cloudapp.ui.fragment.mine; + +import android.graphics.Bitmap; +import android.graphics.Matrix; + +public class Tools { + + public static Bitmap makeBitmapSquare(Bitmap oldBitmap, int newWidth) { + Bitmap newBitmap; + if (oldBitmap.getWidth() > oldBitmap.getHeight()) { + newBitmap = Bitmap.createBitmap(oldBitmap, oldBitmap.getWidth() / 2 - oldBitmap.getHeight() / 2, 0, oldBitmap.getHeight(), oldBitmap.getHeight()); + } else { + newBitmap = Bitmap.createBitmap(oldBitmap, 0, oldBitmap.getHeight() / 2 - oldBitmap.getWidth() / 2, oldBitmap.getWidth(), oldBitmap.getWidth()); + } + int width = newBitmap.getWidth(); + float scaleWidth = ((float) newWidth) / width; + Matrix matrix = new Matrix(); + matrix.postScale(scaleWidth, scaleWidth); + newBitmap = Bitmap.createBitmap(newBitmap, 0, 0, width, width, matrix, true); + return newBitmap; + } +} + diff --git a/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java b/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java index ccdd736..d074b4a 100644 --- a/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java +++ b/app/src/main/java/com/huawei/cloudapp/utils/CasCommonUtils.java @@ -1,6 +1,10 @@ package com.huawei.cloudapp.utils; +import static com.huawei.cloudapp.utils.CasConstantsUtil.EMPTY_STRING; + import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.media.MediaCodecList; import android.media.MediaFormat; import android.os.SystemClock; @@ -128,4 +132,18 @@ public class CasCommonUtils { public static boolean isStringEmpty(String str) { return str == null || str.length() == 0; } + + public static String getApkVersion(Context context) { + if (context == null) { + return EMPTY_STRING; + } + try { + // getPackageName()是当前类的包名,0代表是获取版本信息 + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + return packageInfo.versionName; + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return EMPTY_STRING; + } } diff --git a/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java b/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java index a1f20bf..3ecbdc9 100644 --- a/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java +++ b/app/src/main/java/com/huawei/cloudapp/utils/CasConstantsUtil.java @@ -235,6 +235,12 @@ public class CasConstantsUtil { public static final String SERVER_ID = "server_id"; public static final String STATUS = "status"; + public static final String EMPTY_STRING = ""; + + public static final String ENTER_STRING = "\n"; + + + public static final List REGION_NAME; static { REGION_NAME = new ArrayList<>(); diff --git a/app/src/main/res/anim/slide_center.xml b/app/src/main/res/anim/slide_center.xml new file mode 100644 index 0000000..b7c9c02 --- /dev/null +++ b/app/src/main/res/anim/slide_center.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml new file mode 100644 index 0000000..dd2f0ab --- /dev/null +++ b/app/src/main/res/anim/slide_in_left.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml new file mode 100644 index 0000000..302bdac --- /dev/null +++ b/app/src/main/res/anim/slide_in_right.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml new file mode 100644 index 0000000..1274f23 --- /dev/null +++ b/app/src/main/res/anim/slide_out_left.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/anim/slide_out_right.xml b/app/src/main/res/anim/slide_out_right.xml new file mode 100644 index 0000000..a820739 --- /dev/null +++ b/app/src/main/res/anim/slide_out_right.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/cae_view_back.xml b/app/src/main/res/drawable/cae_view_back.xml new file mode 100644 index 0000000..da97870 --- /dev/null +++ b/app/src/main/res/drawable/cae_view_back.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/cae_view_enter.xml b/app/src/main/res/drawable/cae_view_enter.xml new file mode 100644 index 0000000..6451cd0 --- /dev/null +++ b/app/src/main/res/drawable/cae_view_enter.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/head.jpg b/app/src/main/res/drawable/head.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0567a98c26223d2db9948a6e1c67c398616e210 GIT binary patch literal 6711 zcmb_hc_5VC+a}pdjP*^H7~9BJwk*j$V>k9}8Dt-6Y>|DGv1AW}kX?4dRCs9+A#1il zQ6m(QrEGo2`&+)hzW=^IW;^%uoO7Q0oO4~*eGSgUNcTL$MFt8Ait`A#77~2!pT6j5 zzw;A}L#2|GwC~AitF(gSLon>X+;U0(=M^5@Ia|+r>L`; zD0OSBx~9OiS4DZwZiPoEFPJ8-3_*R4yyC zN=HaoYla~nK}ox|!pD4Swf8WX$uh%Sb0ee2c%^`!crNT<$248U*m5!a zutq8HTlNhl2&el7^YyTU=3B1157 z`##tDd~3PyxlYnW9M16A>ig^qOvl+R?x$GVp?sRfu>JgjfdS;?b1TmDtnFH1Lwp52 zt8m5f;r@D)esnZ>@9k#ipIY)zZu#0&os_VcMX;Rjf?e3rR^L%RFSBeA<;UF#B97JK z%Rpuiwj|mL2NBAfidY%WA2;P+y@@IRI8kXf{AvMNs)wV8$JULN>MPeVN;!5^7i%2d z#Jo}r-K!4y{Uxi%rTA)bJiB<6P1BuKI+nT-68^bWostzUO-MhUUdPoTVEu!|yC)Lk zEP~YPm_KUIEo+b#RpuDFbn)ncgHNgzHfG(?}nWLKWw2JTEs4H`4tYq z5%Gs_Qw4{Q+{OGvG1x~>wS-g23$O1t!E9Tqv#(^_@AkZ2Yk4SzySC5i_@F4BO-w+T z-nF*AapUV~vC_a<=m5#N?=d@TOrs`vN;BIQ@6l0VoQwiro{(nt{KF*(^fGyPc$kAV zs?n?`fiuX#SD0sg=y-3=H-Y}4vS?gEe!j`$A#|OKpkxCc3)~~OEHb2ays8q`- zaD;!POkneeU9Y#B)<0l<=GNPga-~`v*d4*9Vgj zFyvh^PcRiF{j?|xaxa_K$#5C6QX`fDhcENYB+xQl5~ay}wk>=6Z;E`0J?A9C=!Oo1 zur?txL#*mU_F<|nFAEjI6zx>$3#soWiC(`#o%#&v@u@pjDfC-UFvhVn+#ci>agJZR z6q&CS;7>D?utk2V8rs685)Xs7EjRsDJQQ}g=d;3X&2UMZ9l9f`%QO=|N(Rf(Z?5IcaBT@KKnxBbbJGOp~3kP*OmBfaa-lYi(VTG?V$-#&qO;f zs)jTV!(K^`k%Escs;y;YOxV6y$$3tgM4bFCAC?RS0mq2r7hKSIJ*!-KpRpO&3p)5$ zzKb2GNKu%5ky5P>m)nNg$*-7sjf%fxgBDtx@(2pv)BH4#o-sTpk?ita18?UMMt>PH zoYQ8vG%GV0wYfvvo5S5|jJz#cRqwgj(LQ`tS$cpZV*HdXM#EH{?!166sjaAK=t1Ju z{YKY!#6lBulUuFm{9*Z@G6SS=_|DU;lNB!lJL4 z)4MVTiQeqforjVZg}K|m3N&=fpW$-e$jiGV!_3Cs9RBMQZGONV=S0G9>7;nQg0Q`u zVWlRSUXs-7AJJTN@eH?GsyF3(Nj|g9EL7^I>d!;>Hnt>NAe)z+qBGWXApDK?&XXTE*IF0D$43tz)!4SiNAT&^*b$JMF9=*t8?6f=`sXOv)l_#zG@mv6 zlrGgzJTDQRB)$J@Yx#6o2rQ?~w`bma;kC^rZiS(oYr2~a;6Aj9U*?&cJ-Wp@N!uiu zpQTw2kX9Cvnflr}I!x#GfH;bxV(@wJ){;@Hg<76kghQsdl@ZCo&gBi8x!~Y@XGDYy zh54PyCb##^j(>&y`t)c?e)$=Tpw3rSIZhBSH|9HyPZX-hXh*h#WqZi(y#>=p zl;L&y1vws{$_rP)%q8~|Eh{V(zF` zKk)nPWTk(MM+fZ%-U&C=TTAkUSgVb=w-de_Ym?8F+xw-9D6M3!+*Y4rg{S}!#oTE{ z_`Su_oWEGIKM1A}1em6W0$W7O_rS!}%}rTHc=X=Ejz@WOJzG{qW@cvT{=n%~Y}fF3 zSr1eXigFxatE2f4Uap5ryVB{+!&TL*AR9@(reYN8bYF5!2nU*gwDgeId|y?i|1*W~ z-D&6KN&xh0HIVeUkY|hua#})&0UmLo~WJTM9i{V{4Tx&Fwsx#41Ux0pY+iFWmveiRx&J)p;m?JCVRG?=4EB z0l6c?vUKN^kw8F>?lh3A;44YfT_d0!f7a3}ce)3hZ*g*>t`f=i{*4+ruxL;na3&+1#3YLx5e_hpLS{rK`>x#r8<5+ z<5hp#*@a>ib0aktZHr0wk{q~y%#GxyVq>Nl&%*vpgC~7@9aF|d*ZMSU&qg&mB_f8D za<5l{jkbZ(d9dB3A0oqy{#2=S86t73nHke7!Ch5P0RldA@*psCRVw>z@|4)%TRCpf zceznMgz7SV0u3D@-L@5tBM8uAMtwlGsl=Gmu1;2_5wifNgXVsY#H+1SJ%V5peh{Sl zognA+A&#*0#4x?^v|ac}o-IS9>#B3_ITy z(Zu$&OS3D~T96PG)-x%L$j5MvpAo066c&c1g>5f_w@|9lP@cLbZm^Eeb*H2J$a}Yj zws)r-rv%|+{XltOh!S&8C%N3vD)d=rmN}*Z(p7*c;wQ)1T0=Zpdvii(8eLJhNifrA z*m2K?P;LWdZCf!hU6RHdM6UEO$!$1~g-Xx^U`q%a0tU7L2SyVzYdM4UBhxsP7a0}Y zuutYkxDI59q0nssK=7`!?A(0cal4;yO2vhgh zqzdY;u|Pe}@hF)O(zklAo+tNOV?ymOKa|&k<^+fRh_9-UM^zKDB<*1|dJu9+x=Tao zK3awo>a>AP;_})6K#>rY=AvJDYl){WV510-*{W%vQ#C>TaPNE1ZGx-5vjT`n6f{_N zStiQwlL(leNQ9E#5|&rn+ikHU48;W3_(#v|U1Q&!4_cfoj{BbY*EO9%N(85*-AM7b zH}0624>h(4>X_$#%e^6I8~)n4Q)gQIFq;ZJ({XPk7;~6Y^KecMr2w=F#94}7BFv{3 zG_Go04g6-U8b3V%u&ZZUzwwy8atmabbJ-b5)xi0BtXnBuY!B_Ej{9!yw4t5AfuqdW z8B$pMYD$!UEzcWiVl@<4ExkXKtDu@y>-t+rxhqDty8j7kgCpMinMMM*2_0#~g5(zh z5??=ApylHWPA+UT4)OOz4Bw3h*5^t}R-T3$od$LZj4t{K3(@txq(U$bN?K^f{K1XY z&t!7E%o8BkMN|jEtFJ0tWPwv=5?_+{A|VK5qEJz!CbE8jRCp>>P3B?tFPobh6SIem z)sCUPR!9IPyA>|C^9i7`@sX)dQ>^THaImu~*lRfkDw2PNOhaeASVE5Gfppr1qb^qH zOZ8YFC#x)2w+_~gs;?>hxD`zg%8UYDZG&R3salkQkkfgMvHCF**k5M*Bup}wOY26* zA$oT?S#2$q$ku|MhxM94gca?9WKA|;0&4m7sZuBu5?bAjlaTe9HBT%p30kA4R698J7hiNdY+PvvrHW2+KmX_5#1ueVxWq{qHJtP1Gy&aqK z`7Cn}mwFPOa%S8Fh1&-~gkAr@0K{2@p53OtLbTG_2mP@e$%tOQ0Eh#0+i;3U=t>vo zKT>MezUW9>wAimSlk_AaYu%UlqLAISRnvYU7P12nli3uNL}8jO=bf*ksA{Cga&Jf#MBuX+$Ivl6h5O!Wyto?;>5Ef<*m( z$>rnN=V&P0>{bz4L9xEYT1aw%soh0!3sH8twuCM1w-YVaSp= zj6VG8o7eY$65C23@c}6j@C-s1IE_6-xRC7czQcPEiEzsY>O%TY{KG?1Bj9<2E>MIJ z&mu}C?O!TR${}PwzGHK&LS8}QT9^L_rILH?oaupz9-wg*7Njyr_SeN!-h^GFs=QdGsmp$nw8(x0>MuNw!fO*C|9 zx@7#y=RK#oMPv<;MQAS#oj`z6J4w2`;tnm|Hd}V&@}R{qE8nQ#C~{!bMf>yI@@(niYM{6o z&6(BPcI$~}?_jVZdwd-!3SlIQ%eGQH#ZFb*m>D!4VQDqjr|PC`FQdy0a+bX81E1C( zaRgZq`DB9_P7RDI^GX3>TXnpQ^TP#(ek#?`QjA3kZ^V&bJM|JLUYTzMN8B7Isi^)r z`WYhLPxD^j$E=BxF7@iCM|@=QI*pqc&cB~X*yaUxBDdM0DhM?Id<)3!zdvXAcV60x zz3I%!grB1d=1ZVvKted623E&lId-3vd~D!Lg^0B>;`-;zJeuz_0Wg{Z}JE zw28e;%=kHxZ1ll|nK7<^)dE0U>so%Wk&)4?n(a1r%06#^`-*H3{+9}3g874~dYTfJwXDJr)LZZC8{TcC(?!t|m0(T*=V{GMp z!Bj!Y^^slw>3Sy*i5++;dj4g@hRs=Ub<|kjc)78$m#G%)ld9ibi_avW5kWbnC(dAr z7Va-z`EK>H`XYU)4Y7eHy$J}>5fy!z~j3sf>XUvVZD2DdJ znlaS$CgxFO#EoJwXlw%C+?!>%u=IkOCc;%yQy=amGXUwKewRr39RC&xf_ z;Of*e6UQQ$XX9DHJYJ|yRZbJg=#LXSk_S zcJ$wA%|!cqr~NxoEl}H($AO@DhW{PNTU|*W0lfumxfFdzv{Ok6w1X^=UIT>N4ZDA-hVT0{1}RqCdQ780n=uGeqcC1n;^ zR$CY8=3J<1g!g^5Y(Vu)%rv>}ibCXNgCc{!AK*0TtZMB>iw9Q#t}XfLofb2^+T9Py zOmq{hnk#x@Mf0atB(Lj*ByI(cCVeJs)0~|E_jgnhm5Xf0{-qO0N$_AFu@f z1>yc!&cxggw~?GCb3p z#JvlL(0~i3n?2GuQL*w4FMj?A-PJMG$)OLpM5vF zybD-@Y^>u6CK`%jg9U1iDzpw@Ckw6E)dBm$H>reisD==*{=}@4+t|-90GPe4RiL_s z-Ds~k(>o2mZb66t$5X=iDQZ(E&VCE)%1^(!P89W?1MiTw{2UOfu3X2cM z5#6VrYd<@7go*B2TUswLW%Hb~h7rtFR&`I;7TRAqhY%q$LVtR1VHWQTJ;cSlhJ;$A z3mfJ^jbZKxwz97IrOcB>F5eBsY-{9LQoim4O%^nV*D7Sr&^M8=?1@4I8v;W?u6^a~ zO7}W)S~SxwOc(OC%PqVNR(G+g(P;(r!e^Q1g)j)*w6xEaiHy3J>C3&?x zH-JBj6Y0|`64?X7em6DM-{ys9=D4_>QlBu`Djo-KuNu3MZv_7+48Cf>thbL6U^vt2 z`i>(^3+jFs?e}==WY&xDS#b?0;DflU`YvQ%weZ)$0!t-;94bKRT>%`Miu*swmB3Zn zt_-5-Qo;Nu$?$mlJhm((GBsz;xb$(o1t_2<8(sDPV~)GoZvm*>d79Q1V}1Ef91kka zTA&PBeXXcS^U<2>(3RAj&{H1_NB56MyO#OMsShaK{KcSeAx=_p5*&H_AL6c~k}sv) z6Etw5_qr4}NaB0&BPv)R+9Xv#JCD#CoGQc;GD7|><>xc^P)kId z(PMtAlxs*y>LLPWWzG0K7>!%RT8Sk*mR3TPP8!Jml>mm>edaW#w>+OmvSpm}n55NJ ziEr?Gip)6#%9q}75lskh-p2q|SnN{NK#R{@TS@_z>E1cQ!#vH6%e2QT#COBPA8ZFy zQt{k{S^pS!H=HUwqiF?VXwD;n>17GZ`j2lUAj&D}Zw)_--ebR>u-g09>GM5MgG@Zr zPS|nmi+MX_NC)^Rms!7vK;OXj|MUe?dO|A-?-Js>GJX~O*+YTQHqxrqxE=jJAgA&O literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/project_id_screenshot.png b/app/src/main/res/drawable/project_id_screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..15455abfe8f22d1de134ea8ae30ae00ba2a57b74 GIT binary patch literal 50309 zcmdSBcUV*V+9-(If{K8O6hS~iK}0|VjC3oAG!X%j5|JuZN~kF+A|fRM(wm5Y(jpxK zBr3gkLJPfzgc1@UA;}HytJ`zFbMHLQJoC++`7bM3YyIBd--O)L(_}x)f0%`ZgPgoIYPhY zJu1(uGPdGAx5+P~t@G{Tjlr6)A;)DuO3y$CnqNAsK6zOX)MRnnxFLRj&4HIMj>#P~ z2>A>aK(QZr^H*H{_QrNkcBfwok+A9XnD6!E+UM-8)Ko%mHWh-TcF#k`RLA)b+`HsU zId$gM(HjR(Qo-8(C$EK6FETIAym}{l5XEs}J?kd(^U)g(r?-?oHzjfWeP`eV?t_S% z((Y4dY>vD{1it-mehA=jAeck&)K#z5y6*4GCO;20Ir9^w4u$3beO=1;R@Rvf$DGXV z{s4V$yQ&{xGPPe{y26LD8~~o%!A8rVs6+3P!+%2jAn+%|VW)xBWS?j;T?Pr|MR~ys zn~<-XtAY`I^l7f0TI#i^ID6g1jlO_x5z_n3xKFJ{7yV>Rr%^2!T!{AL7-8&YtkT6 zxV@N{)r$+nSxRsipT1eKWP&S%2Fvqfgk}H}PYsf)6x6p7(I{1FDa8B0Bu=j?C~hQ` z#PP!gs(`E4pY<~A;2c02ITYi9&^3%TUWV6?YVT>Q2wx}ljqFl3LKruHX7Uo z02y|e9O1j+LcODmTPyCS5_|#cSs5Lu{$6of{|;>H`zK{srE01xMAc~i#bzoc*Rf1+ z4z!F*hlBT_#;jJ`njo~^QkZ(cn%UktQnr9lsw{QPl#TA)uxyGRhBkGqZksW@R>l!n z(KwM^-kePFS|f#ym^|nKudL?-Euzp!iuowo+p3hDh63H9A81IfUUVRKCoXDy&oA9v zehW2PC4JY&BtAv(HM@ebIvcf*W2@uBKSp}>`NSQgQpQS)p{qYQsQ4a1wCN=r5b7pR z>m{kD(zh7fqaBwjh?T-!^?JKfn;RpIf^OtD7NpApM@nz%jCsBHgKeio(;e%n*`4@p z5-e#WC3`G4I6DqP({~~yY~XE2+HlT0NFu3Z=Ly4~M(WLa=C%VW6kQ{A0#u-#=pD5b z->KR-Vf5yApo{WSb~RO|nAiE8;Py{3%s37fd@!S{853Ov-8NyKQ;9bQ2;#@-Lo0gy z=yotI)FRg&7SIEu&2L5|2+NFPY7rW>7SciN4zQ-XY0IUv!*X?) z4mSPCIZ4i+3YgInpbx1Mf)frD!Kj4{-_SZROPx$fqZJ84RK3!8-=H23PvMSj zv-m`2B*FYTqsp=OKuI*le0Fi#7=Nc+SCtL9r(I<*a##LM&iz!J2$5|1bfH_-_e-vC zPac`Rb1LO%1i5B&bN* zjhqjongj^#Tc`{gb{hrtcNi%qu6P3F6l7_*R>o0iz!Vmi02?nJfwyG-v^^T)CKI^0 zhz+&vF7+J>oE2T^0Il}5*+hyHU=AdLr$<9;mJ9w;*^F+s6AFwM7SpA;#k5cep3$ng zlGs%0aGc%iRx-)v38kxHGw#(H*#Qg?+)^<07EBwRh{U%FC#&LsWnkB|c@&p^=s~5dm zyFs3TiGV_waY*GEhWyO`M z`Ti$11$NRHOlLK*PTlqDg>2*G1&f_Q2ionP2&Z6KaW^GvAtE^brDHZcR6=#Nkj>+7 zL$db1l|-6Of>Mfg&jE$UYWRU^&u4V)k67!fLXAatZCw*P*H2vt{wXA3*H=OJA_0QC z0(128fl70x8N&6dTf*+?2}(x*=c!p-&wsm(rdbMQ)gA}ise>iQ?xOvOR4!Qt6BP#v zrC>O$b;rE^W&__$5d^Z;7to4gj0&UgGCnMJ1B9t`G&ETU`PU<+8- zn>)|gz}s!LtfuyF(w%F&`z8>t21;w=qy7X9?X}j&YX*d>5J_lY_sHhZ7lZrc|4ELY zYHoAnvIkJzbD{>+I!9kkuS7q@j=*M~e4Nvm!pOj;s4!~R=q%1h7`>3a4(Y|E{e#&- z2yIk2jXwFqer$0d5V|pa_3w@sX_m7 zxnXUXTw%?}owUyI$8*QGC|hTKJK)Qgfec4nFC}up?)%orXHiz5u=DoNnS@^QN^Mbwc zLJa((%KNUit{oNU6|NsSll;;DAkaI7i)iTX#aP|#V{=9JTiAnD>N|OS3R+R#jUB08 zA}Fi~d1dd6cEkE6rhxny=OtMQfMVE^Q!T z*mj_lLu^zE&gw*f%2l;3{|A@N4gYvXiHd|lwR`a{gF}Xkr6uanR=GVKh(G)_OT@HV^i!zTpRRg$~rKkRQm z2(A%op9=muB2DB#StdvA3<_%?G2VpN1Mxk~TkrgHYj_97r5q{jVEMG%0Pl#TvfVX^ z^IO8jbZP281O#?xoRR&Gahe9?K2~YlI`=R9bK;F-n%xL*H+&IHm2&?}KVfDi{(wlg z+etaD%#l@}3gjO+lx!(oyZO(l|99jwR{*vvuod6mshxQ7ON2ogHO;%~pmS+>mi3pg zE@=cr?+SkW)QVs(0GUC z<%B}|tK@?$EP&(x_K3!YjNjv0S;ay-`%c}d^8WXkw6%S;-(H_|ed2ot8o*RBh@Ug9 z`kZn-LXf8In(ASw=sLvZB3%3yo)qbXeTqg#6~ap#tw$M`6_k40q)5*$Zg&ML+Ap}99Ly^w(| zlE(3Jxf&Q_lS7o3y5bp!#2K`C;hlhCe@P&WaFd~wz^GN-Qet`j!2+s8q0nVGqH*%; zHK*ABr)ZUlIVn|VMt)jzP0@8bz8Q5TYYN}KLE_P!y$iv{3RC?HY%_Y$(h$hzk}_&@ zqOY>%=GqZ}ekFbgp5)iD@^B-?%x!T3=MD7}OC;hLPf@w({jK7*d!J{5Tj*3 zh10Tat1F3&muRK~k?Dbm)}*)c-FTokOk}YdrZL!~muJC`z^zj-X63nGr8K(I0_b~( z+=W1Cy=V@W581lVM_|FzVn0=QS8P*@(zqo!lh%+tRHQ-lL$5~%knx`tkjprag4|y8 zSh?5mIyQJf?dt^TyTj{BHajeelA#T4>B_oYt~ylw^}L_pYvb~^fJzGZ{VoQ73g1o94`P>=E>}PUZ{gu;n39kZ9cy&K_ zI!ut|n*P5@NGyk##btOALfI%MNDCQoh37|z$rA&;KBYVN-{0M52n43d+&@0sdTxzG zROZ1}QZiba0MZ93w)TTa{MrbvU6D!|t%`GV)>smM4|y3>x)qx92O4^PNF$`K`|6eD>b|K!v}Am z`u2)C05Y@a8$W0Ay?YJB!lL?by6UgF_-Ue6P?u0ErjUQL?J>SmQeTFJ5t_jWuyOd_(1h0l+^K#K8A_C<&rMz6|%3G3-C=cTqoahEvsQ0Vn>+A64`>!bQCrNl2#J&IV zWWOZN)$8o>=<}h^+-1HiC&}o})#TU92tKMt$P@w(A3<3z4PS(uxO77Vs6L{sKBi7r z&Vs(y7M4LnhGL1etd^;!uzUB0wKM6{lhOb_RI>H9RCxAK+iGUpuq)yl##X_+g@$u| z@-T=9GMnsb1l}9e$-t|u>y~&8x*Zb4B_lq^_*)G5=6qHJS(+5mQ^uQ%gJ_vj0$m;6JOVXlU~MFq%HE92=iU#mWDZe9jsRlI9FHnvQc zg$dh9!j-JbLSHFk61MrQEEQHy|J9`qoOT(E;!h$~_wnY>Yau*Nu*rM*R%aBBG=z&} zcuW~-4n~=Ek(-e2#H`Ct4HR!+jz?ZFz-^@~^b#yl0J^SGc~#s>1Q-kM-59uSCKDeg zx(;&hythFry2g74qFU+HGM=~KQaY~4k-Ol#mk0ZGmP>VwSKb;Jm)TF!GI5E-=hvr4 zciPV!JTEa2R26!pxPaYA(Mg$v;Jxc~MX~Q|mnu-RY)@}G{rk)17dWXdriJYKcQ^I= z7D52AuGBv@TWO-$f)avp_b|E8rC^Qx?rf8dIF{089xkhG8>W>8jW)hWMCaZrGZD4% zDI$`-3OfgpNX{!jx39Bo?#=|&q7>&4oANHS5Pp6KnsJliUrF;7fxDf|h`N|M&i&>` zX4m}S+zeq)Q9$5w&B4upc7m>J`CXe$XPEz30upvl=S(MTc+KR@BJj?BW&reW)aIE` z`e4SO^nWllfmlmW>-VrcuI~9i7S1pOpZ{gtmF7k(PXk-t);n;gc{g?WzmBxbZvznw zJ5YOYz(@3T$VBC;2t&DFEP#GO>M$nxXA<*gV5K>UgN-TEG-)dw3S9IJ@Yw;P+7>YB z0P1qIBr#%NO%ZXP^AvXDy7OcwWbnk4-5aQokkFRbi#T6CpP#|%pD|{4KSqYOU61mE zLsy&Tdadry;@GaFY^WcBtc|`DWZ-CS_ksFY)fK1mQ`i#mgf|Gd^&cTVa+?AZ@^$?_ zrY=nP`rZS{UV0jW0H`0(-1Q^lYk+>o*%1(-HPty*DVYHMq= z$1R7w-uWy78PD`dX3Q)Ex-o52oniuYV;2GnH~tx5Qz?LvRN6#o;GEGp0?|@=E~{Z0 zvyuQ5LKF6>o?MjHEDS~@YoIJUxi-gZeNX=p%J*Y})dDUW<8KRBtpvYayQHum=$1Ky z+d#lg{y=CLOzWHD&|56@6F=haA#V^s)<418 z^3Uvs;K%@V7)g(@!OO`Gufrq_UEtkBS&mc&tRs(kfoV#ALQ{+o-r3S*e8rHnF%Q%% zbhq_W5J}$`7U5$UoYf^^!Xz~dbLf1rXoC(iQzj|}m5H1^et-gtgJ05r2pDLy|#P%gPbo9oa zX+7C$+G_IJ6PS{_MH$5?jDrnty9zO(3lsYNo(ELoOmpO|VUWGj-Abu1a^1=K1N4}F zZ+m}mNU zLAOX>LmcOz0-dMo4GGW%a8zhhm6CHx#?m(B6~rWEGRHGHRJl8-$>*<$N6&wyUf)+& zL#7**=U+94P{!X!i|dIQJm%>+`j*J65)dvISKc>--`^$?@YTE0kLA*EvZ^PtB_aLB z6LxZznYf6;BmH5((K}g5LV=%pPm{JduE+$9DMDz&v@5BKZ?m1}@T#1t)w!Yz0S^E^ z&|GXyz53(*zK#9}ojEJ_p2F$~=PeYExUmW5 zm(@?KZg|~cgnyMXZlbafU?J(_L7W;JU8_qoPA*jx9Y6HkY0s~$QsK&}p{=I2h`fd9 zVqxfXq~_Swi`g0*`N>0SwQsI^Z+w<++!x-?`=)BqaHr;)B&nKy*S_Exd5K3dK>qRp zVDO=q$#Bl>`L`%;ITMPZ2I%8KM6TzJ$emlV7wqBby@3NAtQLAz$(N7uk2ZPcRK3`_ zS@T!(kxcrFjSN)XqBfTJv`*#eI=_IDNhy~%6zIM}(9ItmYCngZ4pGm)YAtv6U!cuQ zM_yB_mPMl2U7(J0$>Yl|Vh;s@6@*s1metjI7yZs7(w6OA@9$YW7r2cmsHjAY7^xMl zy-8j=4~&oIj|j`yyBB$in=i2QEJ}=!rN2fWzpIKs_asOr*C74u%LgoBj^>+1)QDY{ zV`SSGf22t|0s-?c9u45(L2??)U5*?uovXW@!Qg#c`OF;#v4 zn_D&e627-`?%b_eFKh{h6)(;)Pz}17p-_UJA;=|kFcAO|DEo21O!6i~^cWU*A_jX4 z#l?d8>sLOn9ms5*l=H|utawIXqcKeN-LdnYmTykbr^vvL#O-fyz%`F_#g`-t%?!LE z%O33Kk?!|D5OL~h`?U`?c;lhgDa&`H(LUVB9w0c-?3=|zTWPz+;3}vh{cCpU(l_7` zFV#O2JEexcIOWcud`?x>OH*2ubC}v!GqAxGD6V^7v;1(1qpRnmRW0>y;{2Y-1)FHC z>N|xdsKV`qacAT<8sToZxa?*3Y(8hM+UVOrwc_pJ!ve__n&n*St?Cb{kNYspr~ehD zn@hNUBhNKA_-1}G@diw_+58}{4Bb!O)`7_7X`J_vXB$}^c10dFmLAu-nVfKAITXch zkY;M8UmYbH%vnD7Cgan}`j7XPdZLNBh2lLMVOi!?c~vC|Y-Yso?kX3=jJ#3s{ahhM zh}KFZ8388`S)YKY%B^pyOzQ0wSyXJ`j%oH!9Uk`dfoHR|>VqxreRe#iEP&$RI`o_B zH>YqwRMA98`_0-~noQdv6J1X!^R= zNId58@URk!nk(aUm;ysJDPrQox>`fy^$-^x| zrphRe>6cf4<297RvFRr*%W0@{{s+AC6X~O_j3;DOkzAilIZjUD@r~ZaqKBF#N~RCW z?(;eQbQhUt$Rrt{=~gSA7n_@=QbVgwae&mU?2xnVD<%5Rc~43L6J_2ipvJsHKxB~L zIgUHPmDO&tt;bf^nK)7DhHfkxv6l=SR+*;m*SI88Oq8qP~4&@{9Qfe7Xgk_lN8sC zRu^52u_*|Xd}~s2HVoE%wI)HGMDi_se_t4UqX#|Kyrg_FcMp)258(?0t~E^BsOa?U zpIF%1V^O=1qPj{tUYR$IyCnN`6ExkDOVKU&7aKAP%b16(vWFu8Juqh1&~e)vu$M6I zm|AfP3>p2qfXx0K!zgA1RZ5O|axw}QV2h3V3F*udVen@4rTKX`7a(=I9xYhJJ3L$; zeI{Fwf??yGIN_5I*@}!Bkd*FEIVlB1$V9!EIX?d;MiqIw@mA*W?KbXSj_0ItfD0H) zw~C~EiD0_xhi!$x@e+(U*IG<(M9nfG@A9xcC%ER8G>-YB4szT7=11&{VNCr&9_8#! zl2w(nLQ?rEvkz77NV0|sHLmIALdo&Kfwo%T`2SfLmEQ+MSgO!c@diH25UY-<@&lqk zK*q>?TY`W_{nnSYU`z^FH6>ea)^)43a_T@q7DC%rA58na3Zjaj>MHNI1+fEz1$cZK z7Kr2QF0OQ(gw$Ep{TY5_2b7y5ms!9fHEV1*a1TIypEx=^2on;C4iBrAKAUdTD`2{b z9F<~!qHw^pU*vlqykETD4&Tv-4Gs>^^P!_8Iz3;xU$+Nt?tO5h+y?-3^RL4xIsp-y zH6wn`g>#M5nh{xhr{E~k-~~n=Ck4|e_%r(HnSjuCtr~brJ*wAsyd@z^vStlL)a^}x zJ`Y$0xtmH+{1xDLG0GhIC%3r)?>_tGEH(!U)|fZOrO))lc$)=D-oG)R&kan*hi)z5 zV%KsAwpjJHLZKtkO-Nd<7Sn4M*hkq{SFD5-j4pIa%{g~vEwAf~hK~(p^kekBNu&o5 ztU;Qe-&M)8kwvbta7%%PF3e3(lv1{W+Z?IL730QMPCL4#WDa8%u(jn!Z*$!Aam`-? zX=YA?HY+oa`?wLI+*=gize`fq&ljfFQLfHoQR+7NG2OT`Z2PVYfA*MpHnm_7?0**5 zzP|~`ComdZb<+EZH%Su6GQB?9qt)q8T;0_prS;{>hMJPANP(@M>vftd%g5-J_vt3l zVfF{y0R(7IXqAEwOzBO8dw|&2!!lEy2SmPjR?TL>ux#pqinD_;+q_!GtK~6>`V;y! zFZZF#K6N~8Px8YBJimuhE%q}khj9)h`7bZ*)STrDUVx}>6P`YE3P)5;uEcnTy04a| zj3`box+#pSGGlp!;!pOxTv$0Ln1A`%r;`ea-k&usZny70&*inrH+e)^wu%xX^W5Ff zb+N9mHQ!e4yn}O(|yn<=mEZ%HDN}MuFaN5t>;v zr6fumeCl0vDD{v@JVHy^vI`f3$(4Jh?!@2h&zDW`Kld^D%l(wC8Rb3Cq`J0{q!nhD zlAq+q3s#j~ZoTuEBn5ce#k{oBUTqGrCpILJ~AW(=Il72pF$y&U%~5Pf)H@lzhn5?TH}`XqdMEo z#XA=P=FbyzjlCgkn6$s<;?{yjj$0hUht5PT@;d8aEB#%T()F?Hq)LSD%-o)D4xZ$; zdw25RTaF4$%4@nT6G%@#D1H+peC`xPs!2A1q!0MwZ6LF&cA#} zR$tfRz09Bz(!MDPsoWU!KwKFxCi64!cEaryg>*c3+6y^F313 z$dLoXK=KNH=6yyKRP(5i%Fwg$xUXM+aFFlbT8n%%d-QNMK34>|;q#XYw2lUh_%nmTebF*$(&~jd#CpyM1vg*<>Z2x+A_?Wi# zJu=x!(F(toWM&y>nqqN*|G0Hx%qA(CY3@=Am4QA#m=jO@RV0wWe<9WcP9j`Gd(xW` z_ZL>R5X{C4hg}qtY!~sdDq$R+5fG?};{gk@ut@Ly6_(;OY*n_9^$8%Uk;%q8y_sKF z*B41A%o5Lfv?Oa}WIn56Xulw&K12nDHmdU&@=i(4<;3HEILPoc0j~JVNSTad;8%c( zs>finC2OSN!F&X>fHK9bJx}xfbHaY0{!{r!hs&w3rK!Zabt!WddSN{BC{Wg<-kDb; zpzs>1ush)Ccg*BEpOQsQ(B*7Bc4S|?{(}o`0V}fb50~}R9arrWR=MA1(D|;aJgd_z zsTS4bNPuw)U;ZMV6`btUMLO9AxUpICF@73!b`9fG*L{pb19t7ax4Sg}9P##GC8=H{ zRI-a};Qb1rdc9znFnu)uxeD}m7iXu|^9GE46^~fzvwEWbAy*_x!d&-v2efdqsX^1u z+vav!GHq1=uCm@>r3iYkxCJrvSEO&`mL}RaHWpY<92^|p=G~SKBR|OI|2=c}BH0Ox}NYRRdR6yrAYMg5cgAtKcTv!ON~Plb-N*-i>@ zIR_2pguYKvuB)-eY34t+GhH|4fS9nnh>=%Sn@X(s=E)CQs@>%cUHf_m#^l%cWmI2@ znmPT3<618{Bd{ZH@X4)_R=*1i+^n3?ryk#Cu5rN=+GzqF3)i}64oS7w?VgRy0K_lb zz(-og0^9#2>~!?|bFy1k3$E!uG(=SqTQC&M5^qo7f}S9Gc~bv0Ar<}BIqR9i?^2We z1Ky@!fCg_(db@smGBK&9eP8Z08wN6@b5aOZfnQAcUY~n1@pul~vy6p)Zonp}szvjP zP^4k)>`?XRgi?okv$P1`s#Vf8XExGo<#snP>*J!xn#dZwxnJsTD`Lve*%`kR3f`5$ z=c5k|J#P5BlwzFx`d$B|?iS^9ce3FS~+3RFt`O80Jou zv2O=IzJ;>P&*GxrO*VI@Wm2ZPQcZX|A62j2v-lX1OWTZ!a!RSS&}>DWl-B7e&R}~Y zJ^NzEB)I*oC(XP5)BB|a3&^^>nai}8z1U;RhR~VWu(Rz;Q=!?Te%?K+xCcZ z_yx2LXclaXt4=MmnVs_&&ivw77vEJ>Vs(q$p z!DK6lZCY4i0vEe{JUV;GQ2?N5K2huH&Ir1_?x7K72U^>&N2neYue*gVt|e1)0#-@5 zH@jtq-A<-0Go7P#k>+txUk(2vjpd9-PzJpb(}APWX_Zl1q%F+47Y}#W(X#zO;g#Rx z7W~J7jP;oP`p!c9LIjwVUPaSMLEwL?GXM(^t@W_+xZ^sH95-^(%SGf+oH+IygRiR3|K-JQ%MhP7|h{;e-m{IE^$Bk_1iw$KfP2ps} zAkdNH+i?xOF?{vKjS><#(j~rW+~nN&7E(RtmTrz%$-QxZM~zNQZQ=OQfka_*-Jpp0 z;U>=>&>U{aohhY=#{~8 zID&IOP(2UH_V3o9w0i@{c^0acUe8gtTIDO+HAQM?94W88|-Y#sw zB(d4p1LI7lSWpp&k(7Bdu!i?0N49#y8}>R30>JFgcKg+)vLg-JRo*hWB?tuE5)Zn+ zq%ai2P4>{etc-%D{ElUwzA3N|fXRuY4y)C)=Ts3%%xXrzXDXd`dwRo;-iMj4zke69 zddMULrV55yz|=1qkyqIZw@PHp<xxA)`VyCyYJgiY;efkt?Dl^L?}Q;MDNZ zru<<`wql9PB<}9^i!N7FA8N+l`!t=}`bH*WG4@eZICp>XIL$MVTj!&&VcY#<^zeKw zW2}6jzXdtR4CqrkKRl%`7IH>bx~O^V!{3#VK}@eSi)JI|!YQVutDvAPvu_VYS9pHw z-yqGLIw3(#|FNl?`Mtd1^pytJTh>eM8gGhCAXgjbPX(*6*}m5kgBp4Q-Mnp)H*2*} z$^N?Dwm~)K(XK|GW8W~1a{n;lnJTrD&O2A&+X+_0_Aq+jX_s$WzeI4Z_*r#yjt`^A zjiE4Q8<~>QQ1P33${Pq?>2FbbCZnx>e<6k!+*hGErLzvN5{gw zl-S=gMP8_Wfq>ipa`qRQg`QkqeYAZ*pI`tmzIZGDdlRO8fvo5`_u4=f>bNrr5(nzf zOBf=jEa$j{4zTLSCvQktI^hthSqCsr5)$4v=q)jhzpcJ8%ytdxmnRc32RugtN#C&K z{h0eQ_x_WfS@{u*x>i>wk)9vedWkR58DDdM)ECVD;ElGF$2L&-s|xkTGQ;%BC+zi> zgdHDZZ-<{8L+f(!=%qoa27(Uhn$f6u(of*$V7inVKV4^)_cqw0%@g*s8PvU7Wlan}*$S ztN&|n5PR{K-0ShrJ)62xnVL$8D@p4rjk5cHWnh0)YII=!#H1KGT@(Ll++0$Y9F1jj z0ykCkXoKXKT7XQoba%3o^7Wr?O8XFo7`f1_t#hW`o3|OSqJQg=FC??|{Bq7SQzOeK zv)r=IEGQ_%{i@1zJ!GH#32=sbdAyu{Qjv-H=XIi0!SeDX#NvFwf~`+ODygW7eB#l4 zjo#F|uz?aqZTUl7G?nyY!`=_S3A<16g>~HD|0qHM{ltAK$9?`|TN8EzOgz>8;+&&n za|G7)R5<5YA{mc=IS47Mri>#KZzJ;*uy+F0Z6|QkKPQ}bXGfim+&NHt1hZSenWDB8 zG^Cwz{!aDJUvB=)H;F526w8`rR&!}}F{_`qo%k!EVkT1?Pv$S0KlHQLSjH`avJHP2 z17!AACITc#pdrDN+|n{u1^(9`9hNmaR^xicoUCfKx5$a^&P!DX@U_qes~HJJ08)t& zzQnQ|Gph7zR~qIzQ!3OiL?FbQii3;sJeq);_WT-GFIhA%_6DkD>&yUkJ)qnn0k<4L z>8ksuGDPGv&JTU>($N_~N?nh2eag}HZf5Xeu%A@5ffK^8;R<8pymTZcPc_x180#)kz4J=HSd_bNe*HZ; z+$H0SiG_kHc7UII@ya)aH1h$hRxJfdTMF$o*`mbnZYKTgm}5T=rhWzA2~%ylW^>&Ga3;iV0sHkdYtDPsU4I1-KvI4#_v7@w1ep0ezhqx*|j!E)+ zsiAFJo+K)1T1{`@GIZLcenZu#=R9RDu7q^HI|+Z6b<9We=w{O>t`I*a&gSLdZ6Q)< zoI0J43CYX9{%-i)<*XZb^M$ok)}JdA`cxheUsX;QKK1_e(%0esU1~#FcVBKnVydfC z_**Z5qdKa|lKh4~!29L33vF7p5HpJ_h82mwV*d6Ql4^_J}eO`b zT?Ap@;E?l+)v5-J^{mU36VK;-jFIxdnmn}k#&J_bxzA&Hi0Y`vSyEoE|Jg@wgXN@0 zVd)jP!pbAT!A09_&mg3FOryGe`<+)}v4hwe6kt8I=kupVTuSI|KIaq-F_$0jqbNf? zEk8!Mi{F{uiyhW5#+IG^l;d=0Zd&@TY*)tW=81@tdTzDXnrKUhL|CkbUzQa9g`Lq z={M!VRmE++(wNvAZj^P0NMw}NwV5{D$xm#0t*K*|=c087%|4+Od@B6;C5`4!qQfpF za>#R2!xkJVn|bG}#wH&13K*8#9~w`igQS*#MBd28KNRaWy`D>wpfS|W`jOl_Jd8d5 zWZKK7MG{<=AaQK7X}#J@1FrvW4*!)fc9st!w)FauZOZj4O~V6kE`)}^@yPQNJmwwE zH_spL-5!JOJ|Ex@H2nB@#_xC(;CxN)9l@IYa`xd^`sa?=`}_G#eNY5V7I{<$@zfrc z0>fY4F;9RSta|%_sq?K9VAU_hnGg0bD-Vx9{-I&XO6R~>cA)d?I{Azz{I$hDVg>AP zWtF#&Hr|(V*^xFNQ-U^Djv4S;uTmZwu96=2)Sn%hoRK?I?kQX~f8SPJ>}~!bV+-$1 z4vO>%Q`g1k??C8GP^og0zwfJ?zQ+zU$R`~&8o6I#bP$(sl1(IeGOK>yDt-?@{~ucr z_!a&9+mOR<(eb})C*i;UNMv(ez8H4kqWG%YLXiHucB8#sB8k*2x|W zFy$m=sSU#m8V_@Dd-Vt2-+Vvn#za6W{N}Y}ZKsojg|x-kIbrL;;myvlA!i}VT5wJG z*~T%SE190Lie;X~zR)||<&W1)t_&^ZFJ5z zd5w%76UD8>0L=uhVr0o(Qp8(cSrTlXGs#TS7=NzvE$)qH8c7=HyRtE~Sux7!(g*HL ze{mh4J8Fy8VXkZan)h$u!spD47E%C2Yp(2=Lin&^ei%Qj{cJ@>nDLEMZ`rkJww~T@ z_wsXXc3_bQl1DrrSfLfuSMRnLbF+&ZxvY_*aM^vKgCl&!B8DUF(74x-bGiJPx`amF zdGCBm)zCPDF|eYxQ@Xv@Q*Q{|AtVIbjaT{hb{pHmN=yF>g)herdCASwa0QYz%?*GI z`U-&YwX$f{*ByO_bq~A6aKXH?UY`lJACn(p&ylhb$EgX}>%nE2Upm$qZPHK|5NKA;ROx@dB@S8q?xPOt~!q%G;iDXU?iy+>;#F^BG_HdIV*O$ zX5|j1L~sTQ)tbYRra};L=IB2A71o(}>D3=1RyQLcTTs9?g~0Z~RkWxCvjP!ItKVMZCTExmWpcOb zf@w^f(x;na+o7dKG9N7cBp1Q+G9B0DFnM$GhAqRYNYvQV$6=X-9@p3w&GbRt^PyY0 zlcFzs27L_P1LGErX6t(hbTe*sy!2(}O0wK2*Am zME7g0?7KTcc(Xk2`gGgQI=P22TB8nLo1WUdtIr^GFY0g1ZJH_|%C6k_6=iB`PUB)6 zwLz)JAE0o)@jslirp+nHS9B1|bAi|1MsL9uNH--B^KNvinrv2=p(Q*DVWT7%Sg->0 zA&piSZYXqp7`AN3tzB|Gc-L_IQI>!LyrDPyI3u`bnR7CgnmnhG zd@9!KbMWmpe|*;VcDNQGNE1bX4p5m>ha5K9-e47QuuC<^Rt}?bML&(PG2rn0TV^_z zL20V#wO3yoyC)}`@rR97I*dXUH|n1Jf@nnGY(0VcyW0m7uhT7J!kh?seLJ-rG+cV; zLo%YOK538Cto@Jp#ma{P5Kh{7cTs8Gd?YHh{qga9ZM9L03#gNcAAJe!O<+jH_NR{} z?~@iFSaL<2_i)8ruBsDb(#?LHS{nqH2GTaB+0eimsKXE!<0>_Ek!S)LG#CQ@p{KDN zr3ib$NlVyLp$YZ5otn&)>&WYO23IZk`JB=^2lqy-h@1cWu3+4U)>Zss-G zw79AowV})DwVwqkshWLgLQ`X1V-2_kZ#q5Jz;zB|EMXyqW3$0J|DGnOJXKrKt$D& zc9B{#^MfWfo|iyAtz)&rgtm?eElb05vc{WVxls5)%)HbCWq&p6O*(1ID&ko9f<0$w zoA_VM?XRr+nGByVTbiyc4KH)HCvle!{~Bz4tg@Dkg?Wz)pPPA<>G-P1;$J-ee_5OS z!&U$Pr}-KVLy_{=xS0mG;>Gp-*Zy8EZBU=S8`)@N%l!6n+wX6Y?sKD=PElW%?nV;F zEpx+iTi&^+I{9uL^(ehb6ys9<5w!0Y35)^j8Y))~flH1Ao!W8^6{Q)+eIl~F}IQ^VnJ z!ERaj;+7=gQ=N0-HfNu@jYWov%-Bgm^Zl!mkoS!xXw+T8=;})++WKeatqJeIks2U~~))>J#r_G}mD zNY?EDcgV!(A%9PxdL^}Ab51%rW+nuNrG-CyH~M_hW2=emXXM4vL;Oybh zuP)S;=w(`%JN{ErSD2naN2qQ~xroOGaq~78o(g_0cDLXn6OIjpz$6)!I{M7G44_?Ay7eCf>k)911`u^mi9kW0PSh$CXQ^+5 zN@>;?RU$Z@x90TjUJ0`*KfMhGghsQ za((1{u`3cW(lEM#ND>vUDM{_=eG;d{KHYr9cIbD0?K%_g z>wMf85`;=kd1=Air64m@Jt;e><8ffx#Mtaiq)T_1qltTaK*JO;qlqK|4h>G;2ExlVKdJ)X$FP*_3lRo?H*V;ZZ z5-?S$^$-+_80lRrUi7Tem{MBbzQh&)rDk)ImuWPC&W`PsV)Ujyn&x}20An=wt*X_2 zfET`(LBEx5|5;!9j_WrsMX*LD`+R+3GPZ_%NLi=#O%t`VmF(BKA#SN0FLS%;AQL>= zB|e5VaXDkK8>>PH{S-8~oq|A%wTMV#gE~;!3$avDlt9f+I^YAj(Z5(mVZR{*~l7 z^Z8=N)_lSy!!6@#Hk+<|TH3o~nfZQIgjM7@GZ48vB@#h}$M6?#=GO>a;o9~$WB3qt z2Nte;P}4~r>b9K_Ve0IO{|J(5coknA{PdeNV*eOGadmdSN?ld{8M&ufG;L+9cry?i z;KSG^?#-UPa06-l`rT35q~|%8_;*fGWpgy!ak*w;9@UNE+95u^-ZGcQvNe)@n(R$e z^Jwpzz$rQ@wodbU%?Dk%vtoW7qGyKxgJnY+MMhr_mo_o7eI$AF&T;Id+yL|K1|bE0 zTpl$V|3SO{_M%N!I~7#G2P=ou{h~tz{{v!h$=gCEF=wV#FsrL)W*md(bj7^?gPN!o zobWR@dL2eIudNM!mn)bENErMV*(zj&)?&_P>!pEYF5K>b1>|4;>3eSoh}ld9?Y{KW zk<8z&cRI~2JbU_yxzPcpmv1=rfaUMMhj7|4WcuRWzwa9T_TjJp&7Va4a`pe8s{x&a zXlJ)Qgo&hhKf&)cj9u2r4rkNbP*d{kX*aZUIl&$K{>lXnvku?Mo}l#aY#vkn=_3VI z(7_?k-n{}5&0i#}E379Ee1L_xc}(7ZfyyKfa15F#2Ox!=+ErX^IXIo;-90TXeslP} z@^6uCu2kq!Uo8=xJ-U&S5PC&$ovZzje~YdfT?aysW)IE6LVMfG^%6)unoyj~a)4jA z;P{uhO2|@%8Hf40HtSvJKs|=j`O%er-U_QUv(`$QlW^rqY*O~opj90M5=n~@hVGHT1Il(4rp*2}(2fHn_g=gcg*G$uVc z2b#3Y^$EaBx=aK?aKh-^;n-%F>hv}}J(gVsWxXBdI3y9BB^5wp12k9jmbt1zpkg;m zU+9*`k(0FII4YBl8ctAX^BD=D$uOTGsZ2KT7gh8B!Q6XBHMMr(qHa-95m8ZT0xHs_ zHw6Jv1d*mx0U^?R6G90DR1`#-(px|ULMQY<0zpN3uc3tqp$9@sC<)~*-TT|${=PfT zx%Z57#~sHXhT#ay_0Bcl`OfE=b3RM`%F>Dn*0&k6JWZVCWbhc3zRpz(2Hy?$S`^rY zIDF+CsP{O+`7ievrnL1oA4l%>Oj;+*!$!+ywo;ta+YIF;3+4Jg{vITrdm$VR3=;cx z5EO(Q6&k>!A_GPoo^{?n9a+dZ`?c82Dk^HFRRUakd~$v7pk1AoI0BUIY1ivtoJe1Lk#2%5jIiSOSc;hwhk3c)q$cjzLbn41m^Q!&`Sl z_Q#dVI44Q(FHo&qeRs0i#6%7?7TzEDB`i+VQ%cm0#C9{bDS5fIB#~$t2V!|zWcSvg z)ka9Ox5#)#x}$12_Y4yMyFh$D7v^KcQ!2esc;<)=_DOA^f zzv^%z>)_b)5trpkg$#3Co~tD`N;XNy#YA3e_s(Ys57!E={CizE;KIb>@tE93_pBHz z2u@vMD743Py?rfrn!{yVACQwl-f`1QGP0lzvg@MtL;>`P#K~_Dl#oL!@npZ zZQ#Z5Ndi;v1rU<^lq^iJYg9}1@<|Wgf7oBc-PeP()D-W?lIt7~h^ct}wI}+=@CpwKxJg7s+|BCFyAur=5q|!v+A{pb>}r1(l!>V98J~pr z_2OP6i1RB@QJQB3=WDNB$hw`Mf{7ZMwJ@+`Q#_@L-LUCs_HUL)E)`v`)y6+6%T^FBMWrwMPQP|!yT;ed}Te5m}MkFe)`2vmVZiVz6%r9A~MXVH~faW44V?|#WMNRuAO zL<8w!gUpIA!x5mx_0QuNFwlaJ1WWZDdD}j8{*fG6$5JioGKxi+fTqHM>JypEPMR%oWP5 zd?G_X+>6k5$c6vAWoeYuh&a^7-RAoDpso)w6rRnBH)bc)e}Q(a3kb4Q`7a4d*BK3PKPq zE6S-OB%*%T$2jvv*> zJtsH0s_dZhY}#r8!4OTBP%TH`TM~0-^f7LVct<*pEkp{t(%sgr&6EQfv2B|BH=~3G zC`Emi<7Gjpub4j;>h@Fi$DkCdN5Z7Mf>6St7<)jO^0My%2~oXO7m;K{Bjs*{C^|-- z0VCSnd8_l)&1M7|l$}blPzMI%+W#G9_;c*TlRvlh@t7>vV#pq`c2B(q8r-N>xSy*I zbuVl`AiGO@>>QgB##?tNIZ(UN`-q-~akdyik1?n1);cEQ&G3uiBu0ZZ!4A$n zu5kgKaoh|9Y*kNK{;kymdkDrIEGIR~SmaA6Lnh&5U16h}XBUZPb83w>?oxR9TjR7i zv;8;^QBKp%mkso^rWx8qh}GFT%!2G_BM`Lxu~9;^>qHSH^Szb3l0i7P8ZxD{ZT14d z7CpNSztlGVQ+n=h#fGcJMH)5-F)rEV9qNjP`#}A)6x~hQ?*L zCT1Yf+OK@P)%W~1Lh37)OH(uk5{tpQ&Sf)MzNclb7%2xUR+rdq=60D{Dx@)R%+izO zJ`#R1`tvfmkh5M+ceQ0OWd$ElKVyS!=yQJPs)@P&+=U6xMuTlkO;*bsMC_@!4>vaB zw=XFyvs?;gaw+eD9(IRxAh+!@AF7)7y)~B`yO_x|Fg?H-WEQBT^=yg`A(rgDS*%&@ z%fY?c>T~n!CH*B(j9N#0V7mqRaN%5=x)bHc9C+Qa_(&4{KMITb(p`suk*T>WTY1s63X`4i8{e}hgSng2hyE*oXN73`V(OFq#ik|*lM-~Cj- zxv!h$Lci`F`@bSz_pj9R|2SkKG2eX_789)0M*})sWz0@9JWmX_Ef!*_ZZ# z^2w$3xk|4;aZ9{DLI$^_Tx#1_Iqr_~|3++?b$5H_vo%5f8fyJQ=<86{e`6H8qE!!7 z`c(h1_A6W?;)FTW$eRORKz=G;-}LmccYnJ>iM}Xor20GSrZzsM)?wh9a$owV#uRL3 zeot`uH^_LgzFj@}35qh0H}}!J_1Rd+nnkPRa)2@3ht`hK93@Jb%{i&A^&iL#z$YpP z6`*B&E!BvOb)1{cFRSVTzn+}YBBq65*s1IwhWW;|G0jj zY5yk#5l+GMBFUtDVQN?>+|^v#f2=^)#bg)$ARS+|QDVXoc`PRHtDP6bKG1%0tf#0o z<91r$*XItKlo%s}x4|x#cdc-dZ5`FH)zX|HuCzPuD=gJknz^{@Y3nCC98F6PD63`= zqN^@RoMWd=Q=eaX(itZW5oRh*@gY9LGP>I>NF*LMq4M3-8JSiCEayZhibJZ|!5V@3 zW9I5QbxMV(sKuRVIspmjY3%?nA(sSsg^AM`3z&p_)ewM4nl7XJBYpx^k$<03{{SOi zg$mHjVBeIw3(Mxv@om{F9*CIj=GgtdiUE?J4>(IQ@duX3C2j<109L+Y z)6flW`k7dZH>nJ4x&zA5(+-stK`pj%1|66SyGta!-*@JEN`{!{xW?$3>}-urO~a21 zDPsbjtbX#(7ZIPVd^H7iCJCP;|MC-Y=!~yoIizj7t{!%1gPTwwL~lOo;(iv;EArSs z16Ev_GgPdpUj}4hcnp-ali=f0Wbo}b#Ay<3>%i@8ttcpP+3SWc>R1E(lubUfN= zyHCY(z^MQ<8svRwYV!P9rV~)R_Rit-xKOwIOKY#*+Oc8f7GB)C95+7ido%UU0Jw+S z&vr69(}nH5uj5DntXg^pl9#+V1LSUztKJQS-TfTHi-k#p!T8OAz(Xnvae3T{uN~RH z4!Gg!v;8OX?DhbvUiFhjo7YmW`1!-#Z`=FatQ`m`Gc0_R0=*B7vz$=JPBKQTcP7(E6ZP zh{o2xM{PZcO!=#kL z&T%J!x`erY3*4Cu9_iq2SBM;cwK2y~r8vIV8RVX{RWXJw zJndp?7mCrsxKC9m4!AbWOo}!nD~6@C|DzeR7|8IXGZB zmTL}>`*u6*`{4s(k}{r;L$Lu(J@8pr_4e%-1wE7YcAZq?(Fc zF$m&xn%yXJ4uc+EW~x|Zh?JWL9zg~v(D&BKvX6BT7v22eeSkZZVj&Z-%t~gyScA>v zr0n2&p|xk8z~gVCh~cDexX+G4&9s&4b0!nN0nE%gO`LYs%H<&y8`cAp(azHk=*S&J zsFwxT%SZq4d{Q&@N6i(RFvuIP+1H2&38}MQnqvQk2weIiLlxP9>ZYhajtKnSlxCg@ z)$vi9JG&AE4Ty41g(k()&Fwm zDau{yPfl6_-4wAQIS@4U`L6#iBLIdHEW1CHo88df|04_fWck-5Lx*&O$QFVYK77DE z(kpjv7xJ`s;QFjc!_kNT$Xed_fMU3%Ep%@xG1Seq1CrQ#q@+&kCVo89V}IC?NmUV^ z==V~+jBk|CPt>)$KQW!7EeuJh{%U~je12)$gPdd5W!_r~wW}>&F^_S1N?~qD+?x_v zng;>_u`DZ;?~oFCNnuYY)UYRvP1Fd;LRjh}mI*^$-6joq9M=tZTbU4OAUc0WG&sQP zd6w`%QLA!BV5FcDH~iOP`-szh3V zhjiL~8|`MYtnY}x7XHI7|Gy;ndxtBqeRso_+SNn$px2q~CIu4@Tk?h87<^f1H#VR= z>HchdmOea=Mkk=xZy>1Z^zh=tgfI6kAhDV}@6V|^9({k>X&~eryST`ydhVFYxns2*AJs0< zf#@G(U$)>fG2-c03&dV8{M|t7f%y9uersbNx%l_@ej|t@0w*wM-#-+oyYr{8_L0YD z0y!^!H1+fUQ$730C)OQ#f$LRk8-J>DAG!NKzGEj#w+j^&LRwKNz@H4Gl#JBWjP&%> z_%*CSM=D7*dDW8WGhH|rIK*)<;>_Y<=o@# zIqGaPfZDTwfmi$E`ZL7CrI_)&_Hi=P7VQj~Vwj76i@#E2{xn!96UpCVaNnSRXrivG z#MDr$D#Qx2aki(+gNiz=FO(>&~%+ z{PxWBFT4dZu#C^CYwg{*I*o+%tSVT8b^_L!CTD?dY7n^)?7P=^EymU(bJ{n5vMD0i zIAEgM)v2GMM5EB>3wxwfTLD|opn+JIIhj0jtZKw_XvDkY%5388dz@9I!mu#y(B)vl z2-j7TVNKF-J?Ya@l>r`{g#hJjtAX6z@p3}=iN}kJi~FegG+>l}t`HG`p%%=`&k~8) zhJ)bRXALFzPm_CHSn@XxMPRvujD|%*&qVHRCswMG_|4~g%3vb(ukiWG)6>eD`%+-a z{rd&uY#g7J!lGNk!v(>0x_uH)H(Rc9zbt5}0S8z-AYJo_0XF@=oYf=);k+J;al0up zOf^FE2;JA=zU&o$s%SdDhUj30}xEDU%{gGj{MN*tr7q# z`W+5uKEg^@440Lsfn(wo!(}Kxu&#=6whtJFFx{Hhti>@(i90AKHz`UW?qq<#Qs@tC z0wolqlnbr5gF@xkz_FCY#a^t*aBgH#96}#Zfr4c}%dd^690g@&N4$YU75SGpo}Sni ze1It#Yc3W7Wu^j`oC<`ce)&k@3pBqnh8ln?wNoW_<-@DCz=;%hNChS%6&1BjL14OR z@{ZdDH0qhaddlA$uJG+E1V>sCu%R$#LG*aJkQ@AIxAQm-I;~oR|3JHS}W%xL~<^>^>CP@Ti)}^~>{I`Uu&G zO@^unDce}YKy4fp8VNNwKdYnT4>HzSd4r?MbD-BLgCj76GlD7592Vk^I}-@wZ|p4C zl-@;UoRPYu9eT|qv$DKf%CfaD%Te5DxISxO=|;QTWapP2jM8T)bc~AfJ&s^lqtM5O zVsygp(t&c@#GA1pZQ`Gc_@hZOib|cZqJdYP^?7M$q`sExV01!Vp|ISl(qLzkTn(|Z ztiy)L^56&UI+-h<@8#Xypm2Od*vI22NGO%60&m6gZ(>SfRCXXlppWRUfX6@w3PUtv zr-(nfjsic0-26MJR*7$aMC4L4#{AiNh-(y&Vr(5^KqCnXjShsR-}0@NWe?0np0`VYdpcSj}czGY5Uw>P@vKAi*>oFU{MwRCdb5S7&{?WI65g))x zh+}RmEHlS(8LH-r51`r75yr16jO~%qxEpsO#xrpWA;mTY@g}Gq&Al*Ob$Z?nj&uIe;6NNvJ`mc~*NctFm|q~t$<%v$bU3bwx7-L^9-sVr zWzb@@BhXwo{2BSKZP>;0aot#d z*HP>uLdhS57zFQ7O+S|*(u|7J$XCFllUVz~DXH7%bpVU`(h1)i^`ZxRJJ3SLwx%YM zQYB7iAg(9C+*uh(@{Glbr|@>EaTFyHq7k|_OwPQJv!j<1US#fFJ2n_qM9kn%JtLJ- zKPp}GJQRVv_)jmQ42IVCsR6Rtzb(1(>+|j>rj!4$^cFa38!X4m2hHYzoq1@~3DYXc ziXr!zX02Lw1!rZ$OX5-?h8I-amx&4GZn~z8V>i3PqYm@*M`}S9X^LD-bP1kLMkU56lghVO_z31N+GfYBFQqE z)P2WV7C9d|k*u7ks(d?^Z?IsS14ib&d+DH`8fUPB8$D#$^ROfbJ6w2Ed&hJ6+@(E$+*4 zR{}y5wA0qXI?62#plxLy;9o6K-^^W4Z<0qed@CHquW56>^a_$Z6S$v2I16aq{5#g5 z44?kB6aVPeIVkf9G(TGwRt_93;FB?cpy)#qfSE-V8&*#4zuQ_@piaGRx#69XeA#3mH_(1n_(ZXv@zdtgJjx2h3nsw|_| z>YcUYv@_&+l=DDVKsmwtZ7uhytH3Z9la0$6iYIdKN6c<3ji zc>f0#RlV^8yLf4ZXyjZsIsupyPzP!gztLqh%%9sfc;6(mw7h$avsIq0He4Jy$SJPy zZfs+lxW3f1W%NhH0Hyh;dB9gJ_m%Wd4(hcX7_KXQ823~0=G#N25gMbrCHmz)&@hMY zvD-QmRiE_t+;_X~FvGD*&3(!Xi8R*%vv%Rbo%9Rrfw%O&Dl#G1eQkpzJ5_Ht ze8rkYu08!nW&-dm*qr>|$A{?ju?GsLfslUi^#a$)rE~xImg5XjnztGMLg>&b7HF@; zni&hPfq6zR!6$o|yu4$G1&^+h_CSKfNvyW}WF#UcGCEsK@7|^ELzSHNcToc)gCTKw zK*u%+)*1_b^`tCl=vf`iKF)Bfbu4R^>gDv58A&!=2h%l#SMf=6phn}n+sClEZ3%=n zanoV`xD;`tf%+_CN0fmN4;9!|@4PM+3wBVz`wv_C0dFgMiP&Zb%{Rc}H^JMGw}^2^ zant~xiQGXKOk)H$iVlN8|W40snu z={5KX9CY+iYXZG1-2Z|HMVCY889a_!A~3V@+%N3is=fGf1NKU@u+5hR10tyMnR#C- zl8_@$l4j2E>u?n+wil(R-=wCStk@yv#gP_3uaB@K<>@G$XOEx)_FCCi zFBVq~?S;aKk7tR24K52r(}|x%XZBpdF$1FxY+-`p0CFY)=Tm1iy4$QT!8@nMq?jjB z?nPLTpK}dN6T~~VKUlY6B{lkc<_FuO(1G4bB{Vrq6%5Vp#rndS;JyRT>fwAjjCF6s zuAZMh_t^CxD>{K8rH>o~vNK@eXkg)wjeakj(f8y+Ga^;-ALdb9b2AK7G}`)vXG&0{ z8OPOC$-O7xDd9I{z&d^v`P-CIuOxd!I)cC5jf=*b&cFPFwRrh6S`0fFwr9N%`AymiG#Hm()pjC$70$D%-9cpqRs_7XtTH zTG~*F3B6bf;Sn9E!F-B1z}%OqRZuf4edmo-{UgXNygP=3X2;de@;9y>_abB4Cu~?D zaG}6`uBo$s?8rMr|AvxImOqJl?|#MI9r>DwTPE1@UulwZa?SncANd>eWSRbbq)Vwg z6t1^hR3OuJ(CYHBUTaCTy@xG8ZXU2{?gTsn$I!B>ikjTv4EDf1uY$QJ6U>ZFLsr4Y!1_!VNYyouK1rQ&iuJ2bkF`~y;IO}aHP|?3`NgP zXT@NL6!7qpxG5fAFtXCe8tYQ7|fhKTBtj6P-_jij@4g){1pOy zz=_E?fyrnEvcV$h?%`hvBYi^YzE=wnrkj4l^FLvC>r|jQC|?NF0Hw+P?Pk9ifg@ML z)+le^{)*?k|3KYmcjTWc{euU1@fG`RL*o~0FS-oR^*sl$04nEZL|gI!lyNij&!?_B z_HNbG#_;!5N!Nk&CGhus{>cN(0I_X0?%z27D*fNT_?tL5a{DLo`R+gO7*ONu;QxPh zOTS;yb>ssb=4_(wZ*HSXb~AB&6M5fF!plp@OU}@(U?SZxrQReBRy-si6+hOg6~EZt zDV^j<108G+a;maODw<1$3tzDr&V~nna9d;Dhkdm5_nvp1`mhh27-Kf!J{FxT7 zEiQKCQh3&O>LhfuHKxW@ukvx)bI*%TQiCt-@-OAj{a9H_bh1XeKdI0!cDJ;k^fKT@ z0}FRJDt3?$y6`NAlP@2TX7jV=F&3XsKRKS?pVxUD0KL<)GA~RgMA}{3i^skAklqHk z*9&&;k{oZ1bA|S}XevVOK#z;9>7rlp3M8%SZ122eOTY4r${CXTkF!1sN=`#44dPaj z=~?8=_{5jI#TOhAsm}d3DV9$^nqUiC_FvxqV&2dK8<7Tk>JP*T#p&zE=`-sOFf+%+ zF~<>>=GRZP|M-#IHd7Pj{}wNSlCg|Icu002fX%I^hu{e?XeY7Srxi4-l2Gk$i&xILUC1a8v2f;a%%is! zsTO8A?Tqd#xN%UB)t~}a4iigVm`s;q+k1AgFFY;i&O?a#HC?8yXS~MWV3m)U4S5Q5 zYd&S4b^JlAI5nC1aWPQuP$!AiT`?u^DEz7XwzDS-ow<(XzCeKZ1J%O!;4P2$C!JAe z6&QWj@#Vue;H2h3I_(|?`Kqn!Vk~ydVZp*UoM`|V_d0`%aAIpZT*59vINqGA=_h8E z`(w!=ZU^N!qBGnj%_>*k{bjLbFb8gb@lNer58uB{Zl zs~%l3YUejiDm!IzzrH4$9WLpqt!4ZAXrWVVOrAfk$EeL)sVtD@F4ceh$&Z5^?HdJC zmz{nna?MKSYVjk4NkpHskz7XD@)Gp{=gC1Hb*B12Csg86&B2(8#mt+-Gng)M;SQo^ z;T3@Zd6tuygS-88h|SIiilz6u1jWH(3tMRt14?lWLH_5te2-ch^FZz>it5C=9)k{! z-PYXw+558lWykY|-x1|j9`7U?ec6{la+^>zSi9S$ouny|`GQ*x*3fX|XY@Oxs2J_y zWy`}j9s4i@9;~$q9C5b)@);(0fSt(aeBI4AFWi^la!hJT=G>-Y;a{@}1f09CHcTnbxk>zHo^7XP?o5ruk{y--wH1x2 z*~uXITl|k^>xNVhz%I@$Akkufj0zBY>Rxe0LNL@_zwh@I`Ey5 zbChCi?tJxm?qVurdI1jQ%Nh(SlGnZ^J4IC-C#2jKY4j0*I=qpAjyTB|`YY!kf=+ld$^q1`ADTG!OA{?mW&5nW^a%;AFM1V{@_1a%MZrEF{pc_;o8Ds-X=aHd& zl0&L-3AtR%>gJL6IrsuwOzyb)%Q#Z1UTx%`mdac|qR9$u+9wX8>}fKwRh$K88i#fP zBIjMd)F@f?IsRpsGDY-BL8QHdl7@Zu9TR~Ti-13ka_R?8o1c=aMQf^zGnUux-}~V4 z;+?Fq`?7@Tu!-}*oZWX;lbHFhtoqnE3qLJj{odZhS%Q3iQdp9lY2ml||&#c;SQy6`bH%~6_}FBa^)bmtRE8kRF5=of4A z@H?;4QWhy1BIQG@%U4iY%_8ezPTfQFB1Ui~6DuA84l7gA+n)xat%R(XtP5x6Mv}Yn zl&uK{He0!@Wq(_2{fFp@C(mU()nB^p{^KCK*@Ff5aFG{3cA(zqrJbS_9Jpmu**-=7 z=tJya&Fwjx&(=#n-ufyjWx8zK8|9!9K(o+Cq6`?+x5lzZLn04Xv-kZ0rGswVz`Ab9j?xNLaPWt z-|hy*6^jLOKHO8P_X5e)S8}TOuIRJ-Utc)zL)K>!*R??Q0o8vvF5MtPw9L~`Rhu06 zz&O?Vg(h<*Bz=2HZcB~-%B3uktsmcTMFZXimzqq`E4yH0WqG@RYfyvlShKUf#}*R* zae`^zBsLEh7ZFp$AzU^V!}qnBM20B^vWsHzyCz}^?UR~Ncl2O`o1CdaDE$4x49Mw@<^DD(2wKbCMl1p+nhKvMzT zd%4&>8`jOI$tIXC15Tw!^1H)&%H>=sDD3*z*7|sLPj$#dCh?#v1rmG)wI zCzDgTA3O)yDhc(owPDz9>=ka?)z-MHCxsY`+U`cRrz=3!z!#U&{wsw4OUJ z(F_7+4dQbAYd%vb3o-OnF9BE2xCN=S6b`Ik>Jf&3G669Cat8{$qmwM&VnhMcq>~?y z+U}I-ix8KIH;B}4(G>UF3HHpv(;he_Xu3kMAdxC2@fPDIma+RheLeWrDNIn0$A9hT zqT?W@P^3vb4`@3}@}oBJwz~mvQR&vRPW2bBiS0e_b{l9ppgX5gTtL}v?sfS`!Wqn31ne%Tj zL}oLXa@-9orPxguW6WssaPq$L0869sYp?{3x7v&U`SyfHcvSQu$fpvuwRPG zAtO>8+hXu_$9c_`?Cn=R<7HD+JR>}22CGdyL@vzVM$xoKUC5hPc7q0}JziP>(`p*9 zjQ>RN@oJp8)mFOSm^a2*uVflRw&>^!mV3iI;(AM-7b~Gy7OtupbHOcB;7P*H z@^#(3-Bz#CbKcc9{IkOfxEjP--&b7L$_M4DFb*R(8#K&3VZ^p&zY(BLi6R7|+Gt3F zU8)dz#AvMBT6;S!i9v#wXgj)oXGh*+2MVFbl!T2m2?S&>mt<+mN97^cVX=?5EQ_1I zJ+Cg?B6~_S<22f%Qqvk7oj7rdUW(33lYO==(}#{ia~Cpr(r1afp308R40}oD)6d@^ z@Xr6eRlP2Ykz7dB$pM>qMb@Uz6|X7x_-jQJ#f-Y6Kk8)2tEnRjVE!HPjF;;u?K{R~@juCMU~J^pVt(=D(48W^?=M3CMkU-e$#q ziN`)t!gh%|{gY$GHDpLO7iG;{V%n05gQe9ZtW z;~W-j6A4R0I*vr9UAP}C8D1HSBHkUX7$!j+2htXAz|;oEcXZmow)ZAN0E!ale-y># zCP&h7a$8P6X0GmxLRU#kgSTa1=;b8Nh{N3cWKF+lk069{)BcU^H;W)AhO=s<*PZKm z^SN!D#{o2cQ2T4wN&O3rLt%Qw%j*-Y)+=^;Xb$h9TiiPm%Layq&E7R(GRnyg*Unb? z-F&1MuOpsv>%&-UQ+@Z6pBbZ75J%Cc+na5dB8?K0l-#Zd3&*8pT@ZaDW>BYhUVr7T zFh51GJ$fTl0{=OJHD>!!YC6Ts>}u_clg2-cG{mHpJL?KCqIPAu?QTuD8kukf6Eur2 zTfK(={q@V$uen_8>*1B<)Er(Z3riE^#J;; zV?!j|Oq;3sdvR9U>YWG1SpgiF$~AjtIca9-1X;6$VY+ePO03Eub28O+fMJnn|BJ$~ zN>v89x{$wuQO#z|TI0%#BIvLwnt7XTh1B=l)x)h7#?J?R{e(OJWrC;v`xTcrWU{q2 zi>t1wg(cm`SuNd^p+5e)pXu{Gfqn97A3L(w>3Vin>hD}VBsQBXSD6b>oOk>G1A2{?Q#i@M~7d_ z8YImUA~xV$9Vl)S;AC7lrcnI@+jY}Nxt;55W!N;=l_tmB^H=)%K68?XK7UhC?v8Xt z_xTdmtrB^90>}df*`Mg0+`5lHS>@cG`W8_gYS4Cd>fx)5m$|E=jF@4sfwk$7^Ozte zi7o&?B>pQYnK)Eub@rVmwTx*vkBsHi(3tNNyc*+mCj@g-(<0LJw4NyLs6vLz$|6eo zP25eT$c&E9O)Xll2UCcw4@Bjn@Gd0`IE6)0WEzjxZ`nSvC zGM(nl$Ic5|Iok?7*Mc>K`0x;syT>$QMeM#m{T?97GocX6q08)y)%BAeu-_FZH4`u;o+Z5g2>Iz0xMlOJy*i z1?soy(0d| z%Paq5ZdpW2clGM)t0!MyZ8eY92fBLxVzGzbRi4LJwHEv)rzal#f5ef=iB!;8D5=Vv5Q>kAjejaWWPW&Wq_FUN))(Lh8 z1!s!Y#>llsO-^Dg&=f7m-upM>vO0%yR+?kv5pK*>w)?yL3Qew=76rLZ*Fq{!@874R zyH6KVuzrS-G3w0O=(9{Q(UFl+(FG^q?Bg>(e$33w3=R&G$>h#Xtzx4zplxJxE`55q z*bM28Pvtk5uU{*EZ#U(BVpI20C|(``@uz4|{0-j=JxY+%PlILT=TGOt?fG)y{BU?P ze{M5BUyDIAzj_P5fm(C3VW@hG0FU*3o~-+g@hZ$i2kIxh7X(<1h!5CUQ4-?W#zwPh z$x4U#Nu>jo1}n)ytn%GV_QzA!P9LiKU&^=dc<8fnJ>hWjw()i`;Ec>#`jpOEG5-F* z9+^1$4C&{Et4`B&XPeC!`)r=2QyGu{D!AoyrPu@N@9@^W$7fn96pcmWHifyS!(29?P8XC&b*NMcF}EMvGJ;hv z$0$9t1D2SexV~yQqEUs{4Nv)yizT_u*V4=I_RyWs4&q_f~vUQ$1ijMDkE z+KmNUfpV)7F+h)C{;eqUx=yTPZp}&~We}qir&ffB(-JUo@5WYzv|!x8`x#W~Rkmuw zt=V09;egMG0hQZR)tA!F1wyr-`#u=Pvgm;jGAl&zuMV#rl~p3dfiGzg3%qOj`Do3r znUqw%KY1wN)wF>?uRE}!rw^7(fThs0`CbHi_6GjU+&Tz>I6)e#AbJy!D{SOMt+bmw ze%c+Whz~EPKf#uUj04wS6n^`SDgEx1;&P5)ism(*)v{B;Tjd!wMZ$?)w`4Zj9guUG zUBJjlW_}j>sW#T@AsLoRZJ5LnVs<)?l-RgE(z2Zht>1j30OSOTUc4R9@&uQ?r}EaOZD_ z0IvOiH=k5np3<;@LU_EPj~8FBzLlD!zSW3&RJ}=CwQqz|_(gUYtAFxSdLEV{>&|>M zt;zGKa|}U@wQ@O?JrsQMvZ~}G79o|&yp-ULw$3_r_S#*M%$313I++;BbE=0@JFZ`r z*W=TkH#H71$-0!kb&VBNOX&?^cV8p0?^o&9@l2fP>yh^^*U8=Nv|)u>WTr|p->F2z z1#OJtX!5|LU4%eE_6=<`D*4SO<6R{d=bkoE2g91-H&pprRyB|trJ5~7a+*f{mibkx6f zIJdI0qGmi?qG)-m!$`T^4dNx&UJ{mQ?QUUobQAqC+7cTcTyfsSEX8l^}@y%wH3VDo&6e#BXRM*~2}g5YAV8MO|UP4n0DNlY6rc#|g0 zI|qM~p1MIvHT|IPqs-gf^}erNr^0GvY>`VzgtWerYvesM!MgsT$zQ8dpY$VMg?y98a5^_T&-OPlMEE^u0uOnKQl5~s)Z;{x$louFmJbx z4SaT>J*s9Go*`1vglFmT0ov{h#2}z0j|wRrt(CMZ-u33%MR5QbIgtNFj&iJl*RKBO zqk|ufzwn{FqAD#wx2il0fWn)9Kx|lr1x*C~z4FGo_+pi}lnY;aK8$=rq2l3O+#G=g z)mxXgyKDGVrmQ}jYH9oFk9egi_ADBYG}V7^W_$4&kw6#$jmi;U>@>iS&P6ObKnIRF zd#g)GK2nY_Z%jDV;3H=bl_<~nNXbu`z#r7EG~7W{g4Jjcao*6tec4@9&1}5g`2|6V zfr0GhxT57ay-`?|@UF*z^-*8nX&twfCfHo~u3yNuP|qog_0?QQ@v*_TMKR;(7q}mv zf7T|wDz@iqd{bdrSJV-9`}O6o%Z!V}twep)=~*+Ku8U%FylR598S;-~ibH)p?>}3l zW~}5PJ`~3XD9H6G)`q)Hn)Jyj>e{SSM-UpH(NOMXKGVY&IkDf)ApIa50MGrO$GPT? zJcp&tQW?VRewCd|Q1r^}yl`EsCEp&btDbg@mZC86Re2c3tq5mumkLpIZXk@TTy0Pj zr+v9My!fmn^VEHyl@H)M&sE6%B>q(S&vUky(Ipb;lfj);1WSPFo){i;MRr3`i(U0{ z>IE>3LkahjQLUdcIX~#KzN}LRP zA-ZQqJHNW_6TU@eLzMqt&3$)NliAy?BcoVxtY85~6i^UQX-X9p5fyMm1Vo6^i*!gR zDRx8zRHT!jA|N%=B|sw5Yv=(&=nx=;03iwK_f=5~-Z>^6%N%H2rC+~Tl zz0cXteimnApOH3nt}h@S=CzY%*1`;d&E@tfj+8lli_uXE6I!IGL4U~WZ@PWONRlM5R@VIUlFl12k!?V$3l`w1rFz0SMa$lsigA$! zBTzM=suVv9KP{=y;JY=s(|v9$53Vik4sTbK>vGy(%W;MJWm{>1%4YnN6Y;-2Hghh2 z-jTa7zQ}!C?Y}N4*EYrE^x3SI9nU_!_S-&u5>D{BXxG+6{IF)=p++EzP~CldW%kyH zvzF~U71SFDx^h`_vcaP0fhET%iZ4q%<9O&Q8XK zAHa%j@)ZS?g=!|>j|+4>+6d{DPok}kHo9{$OxpEk%6G*b`j1vAKrk;V0r~B30ILSO zurZIMz@0ob@Z20skImV0wQwsjyr`n$(Ryo!8F#w!HzT>%{XTN#MVEtGoUPXm>>y{Z zXWXGY^CULsl=T<<5n^@8;KG%&zT5T~jiYQpw*HXxv3$*1#ipC`*OVnmc4fcrmml5* zmMl5Z!J6pnY0_q>NyG)hkKDP@hlFvOB-_sv&5WRZLGrelks03VTNl*Z?1mS?CosVA zRw8CScKBq!tqhE$*L5OchiYalU(O`l_%+g{?v#h7ze8??=mRM&%+tj{RZY1A(LTCw zCBr);ld#8FZGlNDb)>_Zkn6v)=$t7^(>o+uTRR$B^)jQIeXV{KV+ju3 zk*=NxVY%VXT+Sm)BfOD(N5$*}fzIF<{6k;AonYV|*W- zoT;_GEaj3Dt8bwyjHbJ_7WrD&gBo6u+z(=JZ7gipOx_oKk{Pqac$RF!kh_N-@$R?1 zHcD~6bY+ghyWP-35OHD|tCP4G3oxO|#worpA4amf^98^O<56D~iGSe);C8=UicJ1O zI5a!yxx;(YDrPI7gR_SK4cT=*eRB94BuCvevHrYe*8Cmd^eJDU`5uDQa+2;Fd}-y7 z)OauF+EneJo8xm?Q5SLl2OCkh@^=m)_g>1@ys1=@m65Dq7`tTQx4Wec{xU-fsokI; zlZUL+EoNE`wQ-u;B#ac&tgXuys^gl@!{f@HljOiSM@OW$0Uhtt14$ZeIMtPEeuwow zCWMr1a%jbESO!W;Zd0OCs#C9YMF*rzA3b5tvy6Fn^h8r`LP(#fhr)FIqV)BBEs7Op z7y4@CPh$YxGhD8%NQDF(D@8bIT74{$u@#C!tDJnfhj)QTO2zjL`!$;dzCU^beBJN} zu&`>PhG$=s0%-=B?j|IYCu364+k&wt$!^}9XjzkF{kX$Wq_X}f<@ajIwf~@DBC_iG zzs3Rr#K?&n8=#~QBno*(ln3J0=kaes(C^d!Usm@0$6~{r?Iq=gUuzT%UWm%KKlriF z^R-Cv`PXfs4TVo8j&1m%6jYb-to{1m2furqYJczujo?zt0KN02Z?WW`FQ%Xsi_v&I zpltfHLh|dL(xGo3&K*0oc@qrg>$@FbcHcEU`(A3;e;%GF0-jsj(je`&z}_OVAY zhciB^96R>2O6#95Lit2*+~XfrZQI=rUHDdkXK+pYMj*5(Y1?F(J;lQqWGQlfs|A|@F8~ZTsqj}_Glc`S5}oH@Hd0Hz_>WRmm1qb z(QySSKgi;phE>TR;DMx_(kt)Lhc@_?`3FazmLP3&Q>Ix9=S~CO94pX|>XtY0oydiL zeU?49FD-B2?Ln5&`zMXm|;|!jnqDvTBRuIjs@dJ3%AZc1NX6ZT|DIfd4w z&a8jO+Ax#QuRiK7V?;8x#l@%ng3xuyN7eo}uittY-1H!m}W>-KB&jeca$uS{Z(8 zH?b%EOFaR1Z9QVau;girNHM8hm&lxWh#1p!Sy$Hd?d}VSc?L;C*5$oTH&lqXUCsE5 zz0vDe&1-TvCH1zK!6L&PSF^AI?H&mQwD)$$;EhHVd1(5YN2T;l=}hA&`&2EgX_H3K zuWriMo~#9A0I$F2C*T3J`MsM)yF23F$D`?Wv#?@HRGB~o5mC+?L53cS<*l9LalJo-9;xwUl2cGCU{Yn4fL$gePx}78UmZ^ zgS5x6n?8<6Jh#beWXpwJax_Zm-tK#R(fomm z+aX)Jt^@1)AK|C$j7-&=KMs^CGio4+72124>AehP+-gm`E+Q$TvlbMvEa9K=t451_ z(8t8#Qj|;Ok)m6|T3^2giu7GiZXLH~#Z(h(x;b#z&Fpl(+*rgM*#k!^Uy5y+fDc(B zF}&cGxJ1|=dz|(lkICBDi0>ossaaIN>7?I!H$Aof7NX5&7N_6O(N!knq9LVKyilo3 z;Y^)$w?+zQazLZ1+_e{b&T{Ry37!Y%Y!%KL7d_RpXz!ay!^rIiRkk|N-6KCO4h>f_ z+jmk@wHrnxpoQcxUgZ6olDdz~M&x-xe3V&nkz8+!x&)kzt7@d*c}`ou-_y{%Y&s$y z!LJSRRqFJ2_aK@MIu*xi&D@NTcb(;{!Ir7M}o{8D{71`h4l1PG)_$MkPzbCF9L!E_+HN%!ywqBNpPoZ+Ry;H8Kzr7dhm>m z$M#P*Oq+})Rt>P)ajW;~_i@l=H+-I}5lHwZ;+Td_)vbqP5HCJMJ*QI=FK~;^s8!1j z?zwezrMK3fyrLX2crTnZh+tFer7L*?#>c@z<5daT0Iw(P>R!k6nl4_{o|zfAIpm>R zkD(fwvedcV5G3VDAEyN+;JhYZKGu2j^5jnofv;J7Xl)b4^0%bkH@p%u#LP(2HyusS zOH}LrTt!`0aSM484QL)8KfG{9$jA}~mE?30EKJ~)1*I2e<%q+Z)g%gJ=587y1`0R1UH9h~sc$QpZRfi?6mu#!O#qWQfXHAU=e?6G z(%};2g~4=)RPgvf8gy)X?ykHF*Mt5crnsuaUkq+26j*TCk4hQNPnsTH-MMuTfqYf7 zGV@EQYSMzrj-*c#XMT%%{r0CX0st+>_gsW)EthN~ojZOJhtjEzDI#6;dEHN#{pBcH zfO=xdU)8FrR{kOzYuVg8ksLgvsanLV&zgMnev7(lfwnf0xNEmZfb-GaC3%sy!}JLn>)N|Mt9J7}Y*d+p4pgPR^{0jD53@h}7_jc=rB#9SrI@ zRcd?le4FcQj7B|vW=kI7F6J)7Z>t=f?9K^EOUj&}7(L87FXz4)vcP_b^7K|&lab*j zon@JU<>2L4E;%(2ylpFd*h&08*^!Ui9i7J4_fXO|rsp#Qb-U}u(}$Y~>rHk={eIx+ zxt|sgUlCc}i}?vXJ$`h1qze43$TPJG>xz~sUH#Q1RM9cD8bZ5m;Pk%zTTF^qsZL4D zM95v2Oy=QU9J=gbhb{t}f#3SF?~1QmNhd3nGSAc3Ay)`uY}Sgj=$uL)H+&|+Y*&&s zC*B;L%Ph2%5sOC z;d|9QMu2x;>N+?TiKI}jt9TxVF5SjL-{c@oeM^cSG!ZHX30Zsl8QF|mg4gb$?7C8f zy7u_0zvMhcL|X7=sOf4lTw`lt8tU-&uEI3jJ5(KYfF{^^m}G7lt---Tr^u=;{=_0E-EiwrE91a~c(2O{hw=dK zx$@=U^5uMCdJ?->Yxh9!T~HbA8N4&!je9N{7fPx;vAVih8voQ1dcP<$)qTWQCZ9^6 zd0CHOSw%A?Px`-TdIbxvqz-!x=&FO4ZfjbWcnHJomaIVquIfjj*DP&j$u^8Va0=a; zJ~rfRw)r_BV2smAN|y49cCXM#tO{6(>;`Lx-VIH&rN1SqugN_S&m0ibSPTrjWh5Cf z7wRd0^@&+Ps=TdA$k)z&AOX3+`_*|tL!zQj9Jne5DAU#+=X zaonj-zC;7?2sW)kqtd4{8ifZ1JNZ|1heRHD)oF_pLL8K-l%UD<2-R$RkkmjI^NX8D z|5_>0koW@y%%z3W{4(r&aWuBCe5yp{!;>l+xQwc=kIzg8tgSyiAs~u8Yw+zK{iCIc z!%NL%1K($3-K1?aEvC8+-17!{nn(7&I|v=+9p>wpPk=1;9BFr)kOv2-!9tRCs?P1! z%h2G?v*WeO4#=)+r5?>juzUs7$0ErZQW%Vt#R>dOxNS7G;v}xv#|=czfK@&Y?KMK3 zuJ(u@m}jr$C$%Fg5$6a8F^_Cgbm`EBB&lbYS?C9)lW~OnjtiUj9bBVmcxn)EHc5I{ z@ReC*b+h`G0%eG!l9tSj7C$#;^DjCdegv~X(Al*2p(+W8TUxgrJp}Xc0ivDuN~4)6 zb2hcX6e2o;v4a(PbSH-~fs1I5d!-CVJ@sA{EYyGsxlbG>ohMJ}m~A-#A3D{+0|kp+ zI9@NUJj2^e)#p#lcfGFJME@ny8tj;J%LG{C!p7jKr@{}ST@1{e0J*aoM!d8Vh+RZ3_&>dB<} z^0jH|NE*&haJk6$;;~kY$}JcXy8k0c$3}ETY9|J8Ok3YZmY0Le%IWXG;`mb&c7Ez?o%Q)cfH$uuK|U4NUk}R zo{?AVAdTO6Vs6j&T@u@j+GZ8jsr0qa-z6e4F2o<1tMf`SEA$aOj#9$Sz8ztr=HUrX zibW`anPWq!aga3#|NPOq-QCA-4H8PY4oYe6q$+ep-fQAKs#(3aW0iA(3Ex+z$u*>Q z&!LTOJi?|CuW;XLe2xcaSCvq;>Op%tA#2CS{Z|7ZL}ku{2h6i!eUuz;@LbiIwnFOG zWvReO%+v;3;xT4rZ#pilDKBsXVyhGO{o2v?PCaVwO-x0qd>ZFhLT6SgrKIacz};b~ zV`|~1kdt1gM*4uJWj6pvoIf2Y7B2hk`7ku4Nd#jXlJehs>f&EFayj#}nWfle_JgaF z={>Lb4d}|QQpO^IW5Le)pcf$`j|zF+E-fskD&0JPCE%Bjv3NBb1P2sy7n_e(gh8!5 z_+4H7i6l~3dyH;(@lM^`{9$1u-Nm)lqG>2f3>9&uO9votPuE<@jxDsw zYIjE4ne)vUSHg4D9|&m0zQS37&!HZWIOf1$!05A2DI%k$cii+c)@flzdPukT1%|Y-LjdLaIBuVb zO!U4ralrQXpOy?PS?kSP-e&!N*zPnaRlfq!ec9^`rj^iON_)zI33~eL9txA?9?giC z>&;!dou<*5KBijH_L=>K!D4#9b=$%-Res?-;X0cOTk2!xuZ$neZW@ZMO0HnS9&@8DC=+ki z2V0+xytI+boJV&<&(Bf%bb8$FLLwJB7-LGtntQwBwj`wwwu?v2LwTKHSez#-6k4(; zSDpGGsFyQLWORsCHT+`rhkZ_zmo$NYM(c{yqa@c30jz-Ya5o@D0LTsochPm+e$BnF zJ5}GeN--);ZO?8@FB!3Z+p-*(H1;A9XX@}Fapyzj>}JA*o5Yshw_H~|bn@J3azj+}kd-1F8XMm>`I~AwFSEeXBOemwRy`kiz@@Y_X=_?ka`12b* zcZX+@X*cf6Wq2c4TA=aCdP4lPN0Gbs>vmA|%<0NHxbMrX{#Uq_=23VoasKka*KEN8 zl~1mJTf?{asAxVvLAmT-{EI5q3xRuIR!OW}-|MW!LLsM8sTUGbk)1|tD1MAO%M(0h zAD4N*6}!%?Eq_w!Eb1m`~N3 zBX5n)&!z?@82KL)JCfD4xlKp?{TR7!fX>B8z0J(%$aMgU7$8sE9+{+CF1OOPzlBpK+I;nj}Mdq zVusTrW6=FOHtUjJ%oU^}%faV8(^Y%k0SW@p8_-e2=KIp1%oxsk?S383fVlNRtE0+cd^u1$bS9?&1s)1Q(@~W#v^AtU%o<{l{&^%USnlECzj%W ztAS!Me1ze$E*g@%5@>!?El&FI?9>`7xt|y&(=l~UQqODVY%{N46}2kB!X!z z-9#r)3Dx6=#r3R*@?IkzMT7=jT>S6?X;glay>|bqmWjdJhIEJy&>GMM?qC!gL#{c- zex@EI;P70$7w7j`2+xsARHhY6UoWJk3%a#~{5sFsa-(NO8ONqHLb0EHUg76ut9(C{ zW;%Hir7TqD(7SF#%+v48t%iIWksd)jNF@zG<{meEcqG5g?vy8PX;GU*T~|`wOXO)D z|JC!E>rVC8hu6dz*R5(vz83`Q|7wbsFRDA64XqkvwCN-k56By1MSlHV z!1adKXE`s@DPj~4Y1|cDdcdc%sIhhbt4(WsM1KI8|NYeA8@KrzN&mZjhS5G_K=AZu z00wpdmuw?)zjg~-^SSB=Zuo9)@wc7AZx{RzY%>32vh%MI|Mw3du6q1S>*NC=*+sO^ zQ~&gwkmLuTiedinC#ZVMVj{_QKOqk>U7Nsb({)Z)D7`i{gxiujZ-*Ft1y#RL?6W4W zDYh!ZJ3#;X2{=F^ocA8*4CiO-QM<6V4Nn-+)n_e=Mj&;#jrX(xN02|yz__pLfb2qb z_x1p>7E4K)>suoZ%TOs-uEgsKr;M3J{~}lACRY7_?58nq#V{wQPdxBi z=agt>+$K<2gco9F34(3`g>X!%Bg-EZd?w<^W_ASi)_f9>Dz&9ZZxre5T(}9cc%Dv)yUUY%*AUps2Dv;f znR%$;CU1PS-c!_imJ_uwxcH?mn3cm;MBfExK6-qat5sGBc6zdj7X+~(*nqlh^066q zya#$+TrUVwKwqdCzy6ZJ_=^=09Xf!1!x$>TAQmdESe3ddnf3 zLAz6J3x+cAvrku7!zK4uM6+5|t|h7hbs}g>ao3SVYkr+#C{c?AzhV#LYZ5hh^R3U7 zlw~Rg`VZ3`AA0%A}4kA2RF49hPZ z(EMN(1&m%QID9kOs#;-MAK_pg#4p9~~_R9QyrLoV!UPbtn!K#Jy z2u?{legr6;`?P#1*`~IO9X|*`CH2zuy%oXp@<>ti?(5Gltc;M#Pao)%SN*tOzT&~< z%lr_pD@I&%T9UU$+^W5UKcQOFpKx2TtlJXsxNZ03I(eSJCOa!C$uysNp?0n0F48xkqAaq7i7DT+=Pf zoRbvoGWRl~nUpzJfP%}jIVWJ@z!|h6P_X+0uD*Tdn~9e!_{OJ_Y<6tA8t~<#ON1bX zlsxiDO}cV?wBU|ZR}_4IWJ?BixRfFRa~$i!D(j}?4h#F~-XFyGz?-YuBg>Lz!*YI0yY0SD8*K(Ii)C{ji%^E1 z3V5H>H|rK3-6LwM!#EQDMc*?t0t{Ic$VyF&*wYk!cB6EPielQ}y)f8lzZtLWh$_gg zQmgVeCAGZI@kSb1xd`?3Q;lgQqo^B#cYJ|2E*l`^~lbw&G=Jfm) zT}o2~suj|RfErFz103#3GkXTrC9LnU7`Q;?uUtuJ(_tQXt;!iw?PSre-|4-JVcK1s zKAN|wkh(n!jc}HmPtpRNDx@zNNpl3HBpS>>{IqYxoHiy>c{5$hZiIkN*r@6?J5ajm zjJd>S&0Bs&oqfqi=fS6LwLj`qN*#m_3HGxwaxVmnGIt~Z>b~Re)LpeQ7R_6V?4I_O z0W1*rYN@_Va@L9Hewet1Kk!R>dpvJXGd@OcZWY7t?bXzlCKP^hgz4@Bfs)W|?JCYn z8aVLfWk36HX^wBbn1Ui`#AN5)FBa|WkWaPmKQAK7d-35xYFO;2wI=!YW2>0#b0+ZMalM5W_OaEcPqGyT>w%JY;QeYwkq0LzOja%Ln5PZrEqM{_ zH7o%VWr;eUu^nw7gs;N8hgL&)0)_GWK;^cT@A(=DFW6V3_0b(_jq+<~ararw{yVrIvcYH>grQgL^2o#hX)SaXgLWc+MO5Zz| zTyQR`8xI=rC>y>;jkwG)){D9xZ<)m7G2B6!8HIe?;qanNL!RyBtE(QcoH31z7 z1_?Ffn)BN}isQq^E+2Id@{C@9Qtx?ufXSnRU16eaOkizSv~7Bhj(OU0NXGDrD$vfh z_ecEvil1-qKFSKz57@CSy+H$HaPkg-?r&`V@zj3<-2V&CON7$yLK9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_about_privacy_policy.xml b/app/src/main/res/layout/activity_mine_about_privacy_policy.xml new file mode 100644 index 0000000..6d79231 --- /dev/null +++ b/app/src/main/res/layout/activity_mine_about_privacy_policy.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_question1.xml b/app/src/main/res/layout/activity_mine_question1.xml new file mode 100644 index 0000000..9d0de44 --- /dev/null +++ b/app/src/main/res/layout/activity_mine_question1.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_question2.xml b/app/src/main/res/layout/activity_mine_question2.xml new file mode 100644 index 0000000..2f91014 --- /dev/null +++ b/app/src/main/res/layout/activity_mine_question2.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_mine_question3.xml b/app/src/main/res/layout/activity_mine_question3.xml new file mode 100644 index 0000000..c96f7e6 --- /dev/null +++ b/app/src/main/res/layout/activity_mine_question3.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/cas_phone_item_list.xml b/app/src/main/res/layout/cas_phone_item_list.xml index b1baccf..e30b746 100644 --- a/app/src/main/res/layout/cas_phone_item_list.xml +++ b/app/src/main/res/layout/cas_phone_item_list.xml @@ -1,23 +1,24 @@ + android:focusable="true" + app:cardCornerRadius="0dp" + app:cardUseCompatPadding="true"> + android:paddingBottom="10dp"> + @@ -43,56 +44,108 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" - android:background="@drawable/cas_connect_button_normal"/> + android:background="@drawable/cas_connect_button_normal" /> - + android:layout_marginTop="10dp" + android:orientation="horizontal"> - + + + + + + + android:layout_marginTop="10dp" + android:orientation="horizontal"> - + + + + + + android:layout_marginTop="10dp" + android:orientation="horizontal"> + + + + + + android:layout_marginBottom="10dp" + android:background="@color/cas_divider_background" /> + android:textSize="11sp" /> @@ -129,13 +182,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:layout_marginStart="20dp" + android:background="@drawable/cas_more" android:clickable="true" + android:focusable="true" android:onClick="ShowServerDetail" - android:background="@drawable/cas_more" - android:layout_marginStart="20dp" android:visibility="gone" - tools:ignore="UsingOnClickInXml" - android:focusable="true" /> + tools:ignore="UsingOnClickInXml" /> diff --git a/app/src/main/res/layout/fragment_explore.xml b/app/src/main/res/layout/fragment_explore.xml index 8c11770..4a3cf67 100644 --- a/app/src/main/res/layout/fragment_explore.xml +++ b/app/src/main/res/layout/fragment_explore.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".ui.fragment.dashboardhboardFragment"> + tools:context=".ui.fragment.dashboard.DashboardFragment"> diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..55081de --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +