From 8c2a321164e4ff05fcb9f6f7d568a4020edd2975 Mon Sep 17 00:00:00 2001 From: hgx Date: Tue, 12 Sep 2023 21:36:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/vcs.xml | 6 + api-passenger/pom.xml | 52 +++ .../apipassenger/ApiPassengerApplication.java | 15 + .../Service/VerificationCodeService.java | 113 +++++++ .../controller/TestController.java | 12 + .../VerificationCodeController.java | 34 ++ .../apipassenger/mashibing/ch01/MyArray.java | 88 +++++ .../mashibing/ch01/MyOrderArray.java | 121 +++++++ .../mashibing/ch01/TestArray.java | 16 + .../mashibing/ch01/TestMyArray.java | 19 ++ .../mashibing/ch01/TestMyOrderArray.java | 16 + .../mashibing/ch02/BubbleSort.java | 18 + .../mashibing/ch02/InsertSort.java | 17 + .../mashibing/ch02/SelectionSort.java | 20 ++ .../mashibing/ch02/TestSelectionSort.java | 26 ++ .../apipassenger/mashibing/ch02/TestSort.java | 26 ++ .../mashibing/ch03/MyCycleQueue.java | 74 +++++ .../apipassenger/mashibing/ch03/MyQueue.java | 67 ++++ .../apipassenger/mashibing/ch03/MyStack.java | 61 ++++ .../mashibing/ch03/TestMyCycleQueue.java | 26 ++ .../mashibing/ch03/TestMyQueue.java | 20 ++ .../mashibing/ch03/TestMyStack.java | 24 ++ .../apipassenger/mashibing/ch04/LinkList.java | 77 +++++ .../apipassenger/mashibing/ch04/Node.java | 26 ++ .../mashibing/ch04/TestLinkList.java | 15 + .../mashibing/ch06/Fibonacci.java | 14 + .../mashibing/ch06/Recursion.java | 21 ++ .../mashibing/ch06/TestFibonacci.java | 8 + .../mashibing/ch06/TestTriangle.java | 8 + .../apipassenger/mashibing/ch06/Triangle.java | 22 ++ .../mashibing/ch07/HanoiTower.java | 21 ++ .../mashibing/ch07/TestHanoiTower.java | 7 + .../mashibing/ch08/ShellSort.java | 31 ++ .../mashibing/ch08/TestShellSort.java | 28 ++ .../mashibing/ch09/QuickSort.java | 26 ++ .../mashibing/ch09/TestQuickSort.java | 27 ++ .../apipassenger/mashibing/ch10/Node.java | 25 ++ .../apipassenger/mashibing/ch10/Tree.java | 67 ++++ .../apipassenger/mashibing/ch18/Graph.java | 26 ++ .../apipassenger/mashibing/ch18/Vertex.java | 13 + .../mashibing/ch21/BubbleSort.java | 32 ++ .../mashibing/ch21/InsertionSort.java | 31 ++ .../mashibing/ch21/MergeSort.java | 48 +++ .../mashibing/ch21/Recursion4.java | 16 + .../mashibing/ch21/ShellSort.java | 37 +++ .../mashibing/ch5/DoubleLinkList.java | 126 +++++++ .../mashibing/ch5/FirstLastLinkList.java | 109 +++++++ .../apipassenger/mashibing/ch5/Node.java | 28 ++ .../mashibing/ch5/TestDoubleLinkList.java | 19 ++ .../mashibing/ch5/TestFirstLastLinkList.java | 26 ++ .../mashibing/ch5/双端链表.md | 12 + .../apipassenger/mashibing/test01/Test.java | 28 ++ .../apipassenger/mashibing/test01/Test01.java | 20 ++ .../apipassenger/mashibing/test01/Test02.java | 37 +++ .../apipassenger/mashibing/test01/Test03.java | 7 + .../apipassenger/mashibing/test01/Test04.java | 15 + .../remote/ServicePassengerUserClient.java | 14 + .../remote/ServiceVerificationCodeClient.java | 15 + .../src/main/resources/application.yml | 17 + api-passenger/src/test/java/test/Test01.java | 102 ++++++ api-passenger/src/test/java/test/test02.java | 176 ++++++++++ .../target/api-passenger-1.0-SNAPSHOT.jar | Bin 0 -> 1542 bytes api-passenger/target/classes/application.yml | 17 + .../ApiPassengerApplication.class | Bin 0 -> 938 bytes .../Service/VerificationCodeService.class | Bin 0 -> 4825 bytes .../controller/TestController.class | Bin 0 -> 646 bytes .../VerificationCodeController.class | Bin 0 -> 2281 bytes .../apipassenger/mashibing/ch01/MyArray.class | Bin 0 -> 1971 bytes .../mashibing/ch01/MyOrderArray.class | Bin 0 -> 2388 bytes .../mashibing/ch01/TestArray.class | Bin 0 -> 719 bytes .../mashibing/ch01/TestMyArray.class | Bin 0 -> 1033 bytes .../mashibing/ch01/TestMyOrderArray.class | Bin 0 -> 954 bytes .../mashibing/ch02/BubbleSort.class | Bin 0 -> 653 bytes .../mashibing/ch02/InsertSort.class | Bin 0 -> 636 bytes .../mashibing/ch02/SelectionSort.class | Bin 0 -> 689 bytes .../mashibing/ch02/TestSelectionSort.class | Bin 0 -> 1356 bytes .../mashibing/ch02/TestSort.class | Bin 0 -> 1329 bytes .../mashibing/ch03/MyCycleQueue.class | Bin 0 -> 1271 bytes .../apipassenger/mashibing/ch03/MyQueue.class | Bin 0 -> 1167 bytes .../apipassenger/mashibing/ch03/MyStack.class | Bin 0 -> 1036 bytes .../mashibing/ch03/TestMyCycleQueue.class | Bin 0 -> 1414 bytes .../mashibing/ch03/TestMyQueue.class | Bin 0 -> 1310 bytes .../mashibing/ch03/TestMyStack.class | Bin 0 -> 1311 bytes .../mashibing/ch04/LinkList.class | Bin 0 -> 1615 bytes .../apipassenger/mashibing/ch04/Node.class | Bin 0 -> 854 bytes .../mashibing/ch04/TestLinkList.class | Bin 0 -> 948 bytes .../mashibing/ch06/Fibonacci.class | Bin 0 -> 529 bytes .../mashibing/ch06/Recursion.class | Bin 0 -> 887 bytes .../mashibing/ch06/TestFibonacci.class | Bin 0 -> 711 bytes .../mashibing/ch06/TestTriangle.class | Bin 0 -> 757 bytes .../mashibing/ch06/Triangle.class | Bin 0 -> 660 bytes .../mashibing/ch07/HanoiTower.class | Bin 0 -> 1118 bytes .../mashibing/ch07/TestHanoiTower.class | Bin 0 -> 601 bytes .../mashibing/ch08/ShellSort.class | Bin 0 -> 723 bytes .../mashibing/ch08/TestShellSort.class | Bin 0 -> 1343 bytes .../mashibing/ch09/QuickSort.class | Bin 0 -> 742 bytes .../mashibing/ch09/TestQuickSort.class | Bin 0 -> 1381 bytes .../apipassenger/mashibing/ch10/Node.class | Bin 0 -> 3053 bytes .../apipassenger/mashibing/ch10/Tree.class | Bin 0 -> 1119 bytes .../apipassenger/mashibing/ch18/Graph.class | Bin 0 -> 744 bytes .../apipassenger/mashibing/ch18/Vertex.class | Bin 0 -> 417 bytes .../mashibing/ch21/BubbleSort.class | Bin 0 -> 1459 bytes .../mashibing/ch21/InsertionSort.class | Bin 0 -> 1466 bytes .../mashibing/ch21/MergeSort.class | Bin 0 -> 1725 bytes .../mashibing/ch21/Recursion4.class | Bin 0 -> 789 bytes .../mashibing/ch21/ShellSort.class | Bin 0 -> 1598 bytes .../mashibing/ch5/DoubleLinkList.class | Bin 0 -> 2204 bytes .../mashibing/ch5/FirstLastLinkList.class | Bin 0 -> 2024 bytes .../apipassenger/mashibing/ch5/Node.class | Bin 0 -> 871 bytes .../mashibing/ch5/TestDoubleLinkList.class | Bin 0 -> 987 bytes .../mashibing/ch5/TestFirstLastLinkList.class | Bin 0 -> 964 bytes .../apipassenger/mashibing/test01/Test.class | Bin 0 -> 1685 bytes .../mashibing/test01/Test01.class | Bin 0 -> 1045 bytes .../mashibing/test01/Test02.class | Bin 0 -> 2255 bytes .../mashibing/test01/Test03.class | Bin 0 -> 479 bytes .../mashibing/test01/Test04.class | Bin 0 -> 970 bytes .../remote/ServicePassengerUserClient.class | Bin 0 -> 766 bytes .../ServiceVerificationCodeClient.class | Bin 0 -> 854 bytes .../target/maven-archiver/pom.properties | 5 + .../compile/default-compile/inputFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 .../target/test-classes/test/Test01.class | Bin 0 -> 2669 bytes .../target/test-classes/test/test02.class | Bin 0 -> 3943 bytes internal-common/internal-common.iml | 2 + internal-common/pom.xml | 15 + .../common/constant/CommonStatusEnum.java | 30 ++ .../internal/common/dto/ResponseResult.java | 64 ++++ .../common/request/VerificationCodeDTO.java | 13 + .../common/response/NumberCodeResponse.java | 8 + .../common/response/TokenResponse.java | 8 + .../internal/common/util/JwtUtils.java | 43 +++ .../common/constant/CommonStatusEnum.class | Bin 0 -> 1709 bytes .../internal/common/dto/ResponseResult.class | Bin 0 -> 4259 bytes .../common/request/VerificationCodeDTO.class | Bin 0 -> 2084 bytes .../common/response/NumberCodeResponse.class | Bin 0 -> 1382 bytes .../common/response/TokenResponse.class | Bin 0 -> 1514 bytes .../internal/common/util/JwtUtils.class | Bin 0 -> 3279 bytes online-taxi-public.iml | 2 + pom.xml | 97 ++++++ service-passenger-user/pom.xml | 40 +++ .../service-passenger-user.iml | 2 + .../ServicePassengerUserApplication.java | 15 + .../controller/TestController.java | 12 + .../controller/UserController.java | 24 ++ .../dto/PassengerUser.java | 22 ++ .../mapper/PassengerUserMapper.java | 9 + .../service/UserService.java | 53 +++ .../src/main/resources/application.yml | 17 + .../target/classes/application.yml | 17 + .../ServicePassengerUserApplication.class | Bin 0 -> 1024 bytes .../controller/TestController.class | Bin 0 -> 670 bytes .../controller/UserController.class | Bin 0 -> 1755 bytes .../dto/PassengerUser.class | Bin 0 -> 4161 bytes .../mapper/PassengerUserMapper.class | Bin 0 -> 448 bytes .../service/UserService.class | Bin 0 -> 2770 bytes service-verificationcode/.gitignore | 33 ++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + service-verificationcode/mvnw | 308 ++++++++++++++++++ service-verificationcode/mvnw.cmd | 205 ++++++++++++ service-verificationcode/pom.xml | 49 +++ .../ServiceVerificationcodeApplication.java | 15 + .../controller/NumberCodeController.java | 32 ++ .../controller/TestController.java | 13 + .../src/main/resources/application.yml | 11 + ...rviceVerificationcodeApplicationTests.java | 13 + 166 files changed, 3444 insertions(+) create mode 100644 .idea/vcs.xml create mode 100644 api-passenger/pom.xml create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/ApiPassengerApplication.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/Service/VerificationCodeService.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/controller/TestController.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/controller/VerificationCodeController.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyArray.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyOrderArray.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestArray.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyArray.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyOrderArray.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/BubbleSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/InsertSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/SelectionSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/TestSelectionSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/TestSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch03/MyCycleQueue.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch03/MyQueue.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch03/MyStack.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch03/TestMyCycleQueue.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch03/TestMyQueue.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch03/TestMyStack.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch04/LinkList.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch04/Node.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch04/TestLinkList.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch06/Fibonacci.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch06/Recursion.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch06/TestFibonacci.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch06/TestTriangle.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch06/Triangle.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/HanoiTower.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/TestHanoiTower.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/ShellSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/TestShellSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/QuickSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/TestQuickSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Node.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Tree.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch18/Graph.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch18/Vertex.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch21/BubbleSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch21/InsertionSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch21/MergeSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch21/Recursion4.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch21/ShellSort.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch5/DoubleLinkList.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch5/FirstLastLinkList.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch5/Node.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch5/TestDoubleLinkList.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch5/TestFirstLastLinkList.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch5/双端链表.md create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test01.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test02.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test03.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test04.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServicePassengerUserClient.java create mode 100644 api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServiceVerificationCodeClient.java create mode 100644 api-passenger/src/main/resources/application.yml create mode 100644 api-passenger/src/test/java/test/Test01.java create mode 100644 api-passenger/src/test/java/test/test02.java create mode 100644 api-passenger/target/api-passenger-1.0-SNAPSHOT.jar create mode 100644 api-passenger/target/classes/application.yml create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/ApiPassengerApplication.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/Service/VerificationCodeService.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/controller/TestController.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/controller/VerificationCodeController.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/MyArray.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/MyOrderArray.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/TestArray.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/TestMyArray.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/TestMyOrderArray.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/BubbleSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/InsertSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/SelectionSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/TestSelectionSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/TestSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyCycleQueue.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyQueue.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyStack.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/TestMyCycleQueue.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/TestMyQueue.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/TestMyStack.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/LinkList.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/Node.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/TestLinkList.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Fibonacci.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Recursion.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/TestFibonacci.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/TestTriangle.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Triangle.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch07/HanoiTower.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch07/TestHanoiTower.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch08/ShellSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch08/TestShellSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch09/QuickSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch09/TestQuickSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch10/Node.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch10/Tree.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch18/Graph.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch18/Vertex.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/BubbleSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/InsertionSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/MergeSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/Recursion4.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/ShellSort.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/DoubleLinkList.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/FirstLastLinkList.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/Node.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/TestDoubleLinkList.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/TestFirstLastLinkList.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test01.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test02.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test03.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test04.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/remote/ServicePassengerUserClient.class create mode 100644 api-passenger/target/classes/com/mashibing/apipassenger/remote/ServiceVerificationCodeClient.class create mode 100644 api-passenger/target/maven-archiver/pom.properties create mode 100644 api-passenger/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 api-passenger/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 api-passenger/target/test-classes/test/Test01.class create mode 100644 api-passenger/target/test-classes/test/test02.class create mode 100644 internal-common/internal-common.iml create mode 100644 internal-common/pom.xml create mode 100644 internal-common/src/main/java/com/mashibing/internal/common/constant/CommonStatusEnum.java create mode 100644 internal-common/src/main/java/com/mashibing/internal/common/dto/ResponseResult.java create mode 100644 internal-common/src/main/java/com/mashibing/internal/common/request/VerificationCodeDTO.java create mode 100644 internal-common/src/main/java/com/mashibing/internal/common/response/NumberCodeResponse.java create mode 100644 internal-common/src/main/java/com/mashibing/internal/common/response/TokenResponse.java create mode 100644 internal-common/src/main/java/com/mashibing/internal/common/util/JwtUtils.java create mode 100644 internal-common/target/classes/com/mashibing/internal/common/constant/CommonStatusEnum.class create mode 100644 internal-common/target/classes/com/mashibing/internal/common/dto/ResponseResult.class create mode 100644 internal-common/target/classes/com/mashibing/internal/common/request/VerificationCodeDTO.class create mode 100644 internal-common/target/classes/com/mashibing/internal/common/response/NumberCodeResponse.class create mode 100644 internal-common/target/classes/com/mashibing/internal/common/response/TokenResponse.class create mode 100644 internal-common/target/classes/com/mashibing/internal/common/util/JwtUtils.class create mode 100644 online-taxi-public.iml create mode 100644 pom.xml create mode 100644 service-passenger-user/pom.xml create mode 100644 service-passenger-user/service-passenger-user.iml create mode 100644 service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/ServicePassengerUserApplication.java create mode 100644 service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/TestController.java create mode 100644 service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/UserController.java create mode 100644 service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/dto/PassengerUser.java create mode 100644 service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/mapper/PassengerUserMapper.java create mode 100644 service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/service/UserService.java create mode 100644 service-passenger-user/src/main/resources/application.yml create mode 100644 service-passenger-user/target/classes/application.yml create mode 100644 service-passenger-user/target/classes/com/mashibing/servicepassengeruser/ServicePassengerUserApplication.class create mode 100644 service-passenger-user/target/classes/com/mashibing/servicepassengeruser/controller/TestController.class create mode 100644 service-passenger-user/target/classes/com/mashibing/servicepassengeruser/controller/UserController.class create mode 100644 service-passenger-user/target/classes/com/mashibing/servicepassengeruser/dto/PassengerUser.class create mode 100644 service-passenger-user/target/classes/com/mashibing/servicepassengeruser/mapper/PassengerUserMapper.class create mode 100644 service-passenger-user/target/classes/com/mashibing/servicepassengeruser/service/UserService.class create mode 100644 service-verificationcode/.gitignore create mode 100644 service-verificationcode/.mvn/wrapper/maven-wrapper.jar create mode 100644 service-verificationcode/.mvn/wrapper/maven-wrapper.properties create mode 100644 service-verificationcode/mvnw create mode 100644 service-verificationcode/mvnw.cmd create mode 100644 service-verificationcode/pom.xml create mode 100644 service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplication.java create mode 100644 service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/NumberCodeController.java create mode 100644 service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/TestController.java create mode 100644 service-verificationcode/src/main/resources/application.yml create mode 100644 service-verificationcode/src/test/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplicationTests.java diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/api-passenger/pom.xml b/api-passenger/pom.xml new file mode 100644 index 0000000..b7a2d0a --- /dev/null +++ b/api-passenger/pom.xml @@ -0,0 +1,52 @@ + + + + online-taxi-public + com.mashibing + 1.0-SNAPSHOT + + 4.0.0 + + api-passenger + + + 8 + 8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + + + + + \ No newline at end of file diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/ApiPassengerApplication.java b/api-passenger/src/main/java/com/mashibing/apipassenger/ApiPassengerApplication.java new file mode 100644 index 0000000..4bed353 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/ApiPassengerApplication.java @@ -0,0 +1,15 @@ +package com.mashibing.apipassenger; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication +@EnableDiscoveryClient +@EnableFeignClients +public class ApiPassengerApplication { + public static void main(String[] args) { + SpringApplication.run(ApiPassengerApplication.class); + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/Service/VerificationCodeService.java b/api-passenger/src/main/java/com/mashibing/apipassenger/Service/VerificationCodeService.java new file mode 100644 index 0000000..ae6e618 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/Service/VerificationCodeService.java @@ -0,0 +1,113 @@ +package com.mashibing.apipassenger.Service; + +import com.mashibing.apipassenger.remote.ServicePassengerUserClient; +import com.mashibing.apipassenger.remote.ServiceVerificationCodeClient; +import com.mashibing.internal.common.constant.CommonStatusEnum; +import com.mashibing.internal.common.dto.ResponseResult; +import com.mashibing.internal.common.request.VerificationCodeDTO; +import com.mashibing.internal.common.response.NumberCodeResponse; +import com.mashibing.internal.common.response.TokenResponse; +import net.sf.json.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.concurrent.TimeUnit; + +@Service +public class VerificationCodeService { + + @Autowired + private + ServiceVerificationCodeClient serviceVerificationCodeClient; + //乘客验证码的前缀 + private String verificationCodePrefix = "passenger-verification-code-"; + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + + /** + * 生成验证码 + * @param passengerPhone + * @return + */ + public ResponseResult generatorCode(String passengerPhone) { + // 调用验证码服务,获取验证码 + System.out.println("调用验证码服务,获取验证码"); + + ResponseResult numberCodeResponse = serviceVerificationCodeClient.getNumberCode(6); + int numberCode = numberCodeResponse.getData().getNumberCode(); + + System.out.println("remote numberCode "+numberCode); + String code ="101111"; + + //存入redis + System.out.println("存入redis"); + + //key,value,过期时间 + String key = generatorKeyByPhone(passengerPhone); + + stringRedisTemplate.opsForValue().set(key,numberCode+"",2, TimeUnit.MINUTES); + + // 通过短信服务商,将对应的验证码发送到手机上,阿里短信服务,腾讯短信通,华信,容联 + + return ResponseResult.success(); + } + + /** + * 根据手机号生成key + * @param passengerPhone + * @return + */ + private String generatorKeyByPhone(String passengerPhone){ + return verificationCodePrefix+passengerPhone; + } + + @Autowired + private ServicePassengerUserClient servicePassengerUserClient; + + /** + * 校验验证码 + * @param passengerPhone + * @param verificationCode + * @return + */ + public ResponseResult checkCode(String passengerPhone,String verificationCode){ + + // 根据手机号,去redis读取验证码 + System.out.println("根据手机号,去redis读取验证码"); + + //生成key + String key = generatorKeyByPhone(passengerPhone); + + //根据key获取value + String codeRedis = stringRedisTemplate.opsForValue().get(key); + System.out.println("redis中的value:" + codeRedis); + + + // 校验验证码 + System.out.println("校验验证码"); + if(StringUtils.isBlank(codeRedis)){ + return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_ERROR.getCode(),CommonStatusEnum.VERIFICATION_CODE_ERROR.getValue()); + } + + if(!verificationCode.trim().equals(codeRedis.trim())){ + return ResponseResult.fail(CommonStatusEnum.VERIFICATION_CODE_ERROR.getCode(),CommonStatusEnum.VERIFICATION_CODE_ERROR.getValue()); + } + + // 判断原来是否有用户,并进行对应得处理 + VerificationCodeDTO verificationCodeDTO=new VerificationCodeDTO(); + verificationCodeDTO.setPassengerPhone(passengerPhone); + servicePassengerUserClient.loginOrRegister(verificationCodeDTO); + + // 颁发令牌 + System.out.println("颁发令牌"); + + //响应 + TokenResponse tokenResponse = new TokenResponse(); + tokenResponse.setToken("token value"); + return ResponseResult.success(tokenResponse); + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/controller/TestController.java b/api-passenger/src/main/java/com/mashibing/apipassenger/controller/TestController.java new file mode 100644 index 0000000..4949760 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/controller/TestController.java @@ -0,0 +1,12 @@ +package com.mashibing.apipassenger.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestController { + @GetMapping("/test") + public String test(){ + return "test api passenger"; + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/controller/VerificationCodeController.java b/api-passenger/src/main/java/com/mashibing/apipassenger/controller/VerificationCodeController.java new file mode 100644 index 0000000..9c1327a --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/controller/VerificationCodeController.java @@ -0,0 +1,34 @@ +package com.mashibing.apipassenger.controller; + +import com.mashibing.apipassenger.Service.VerificationCodeService; +import com.mashibing.internal.common.request.VerificationCodeDTO; +import com.mashibing.internal.common.dto.ResponseResult; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class VerificationCodeController { + + @Autowired + private VerificationCodeService verificationCodeService; + @GetMapping("/verification-code") + private ResponseResult verificationCode(@RequestBody VerificationCodeDTO verificationCodeDTO ){ + String passengerPhone = verificationCodeDTO.getPassengerPhone(); + System.out.println(passengerPhone); + return verificationCodeService.generatorCode(passengerPhone); + } + + @PostMapping("/verification-code-check") + public ResponseResult checkVerificationCode(@RequestBody VerificationCodeDTO verificationCodeDTO){ + + String passengerPhone = verificationCodeDTO.getPassengerPhone(); + System.out.println(passengerPhone); + String verificationCode = verificationCodeDTO.getVerificationCode(); + + System.out.println("手机号"+ passengerPhone + ",验证码:"+verificationCode); + return verificationCodeService.checkCode(passengerPhone,verificationCode); + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyArray.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyArray.java new file mode 100644 index 0000000..87ba855 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyArray.java @@ -0,0 +1,88 @@ +package com.mashibing.apipassenger.mashibing.ch01; + +public class MyArray { + + private long[] arr; + //表示有效数据的长度 + private int elements; + + public MyArray(){ + arr =new long[50]; + } + + public MyArray(int maxSize){ + arr = new long[maxSize]; + } + + /** + * 添加数据 + */ + public void insert(long value){ + arr[elements] =value; + elements++; + } + /** + * 显示数据 + */ + public void display(){ + System.out.print("["); + for(int i=0;i=elements || index<0){ + throw new ArrayIndexOutOfBoundsException(); + }else{ + return arr[index]; + } + } + + /** + * 删除数据 + */ + + public void delete(int index){ + if(index>=elements || index < 0){ + throw new ArrayIndexOutOfBoundsException(); + }else{ + for(int i =index;i=elements || index < 0){ + throw new ArrayIndexOutOfBoundsException(); + }else { + arr[index] =newValue; + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyOrderArray.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyOrderArray.java new file mode 100644 index 0000000..3bf770a --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/MyOrderArray.java @@ -0,0 +1,121 @@ +package com.mashibing.apipassenger.mashibing.ch01; + +public class MyOrderArray { + + private long[] arr; + //表示有效数据的长度 + private int elements; + + public MyOrderArray(){ + arr =new long[50]; + } + + public MyOrderArray(int maxSize){ + arr = new long[maxSize]; + } + + /** + * 添加数据 + */ + public void insert(long value){ + int i; + for(i=0;ivalue){ + break; + } + } + + for(int j=elements;j>i;j--){ + arr[j] =arr[j-1]; + } + arr[i] = value; + elements++; + } + /** + * 显示数据 + */ + public void display(){ + System.out.print("["); + for(int i=0;ipow){ + return -1; + }else{ + if(arr[middle] > value) { + pow =middle -1; + }else{ + low = middle +1; + } + } + } + } + + /** + * 查找数据,根据索引来查 + */ + public long get(int index){ + if(index>=elements || index<0){ + throw new ArrayIndexOutOfBoundsException(); + }else{ + return arr[index]; + } + } + + /** + * 删除数据 + */ + + public void delete(int index){ + if(index>=elements || index < 0){ + throw new ArrayIndexOutOfBoundsException(); + }else{ + for(int i =index;i=elements || index < 0){ + throw new ArrayIndexOutOfBoundsException(); + }else { + arr[index] =newValue; + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestArray.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestArray.java new file mode 100644 index 0000000..1b09062 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestArray.java @@ -0,0 +1,16 @@ +package com.mashibing.apipassenger.mashibing.ch01; + +public class TestArray { + + public static void main(String[] args){ + + long[] arr = new long[]{ + 2,3,4 + }; + arr[0] =1; + System.out.println(arr[0]); + System.out.println(arr[1]); + System.out.println(arr[2]); + } + +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyArray.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyArray.java new file mode 100644 index 0000000..67ad1e7 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyArray.java @@ -0,0 +1,19 @@ +package com.mashibing.apipassenger.mashibing.ch01; + +public class TestMyArray { + public static void main(String[] args) { + + + MyArray arr = new MyArray(); + arr.insert(13); + arr.insert(34); + arr.insert(90); + arr.display(); + System.out.println(arr.search(34)); + System.out.println(arr.get(1)); + arr.delete(1); + arr.display(); + arr.change(0,12); + arr.display(); +} +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyOrderArray.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyOrderArray.java new file mode 100644 index 0000000..5d648ea --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch01/TestMyOrderArray.java @@ -0,0 +1,16 @@ +package com.mashibing.apipassenger.mashibing.ch01; + +public class TestMyOrderArray { + public static void main(String[] args) { + + + MyOrderArray arr = new MyOrderArray(); + arr.insert(13); + arr.insert(34); + arr.insert(90); + arr.insert(10); + arr.display(); + + System.out.println(arr.binarySearch(90)); +} +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/BubbleSort.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/BubbleSort.java new file mode 100644 index 0000000..ae3de2f --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/BubbleSort.java @@ -0,0 +1,18 @@ +package com.mashibing.apipassenger.mashibing.ch02; + +public class BubbleSort { + + public static void sort(long[] arr){ + long temp =0; + for(int i =0;ii;j--){ + if(arr[j]0 && arr[j]>=temp){ + arr[j] =arr[j-1]; + j--; + } + arr[j] =temp; + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/SelectionSort.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/SelectionSort.java new file mode 100644 index 0000000..0e9582d --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch02/SelectionSort.java @@ -0,0 +1,20 @@ +package com.mashibing.apipassenger.mashibing.ch02; + +public class SelectionSort { + + public static void sort(long[] arr){ + int k=0; + long temp =0; + for(int i=0;i0){ + total=total+n; + n--; + } + return total; + } + + + public static int getNumberByRecursion(int n){ + if(n == 1){ + return 1; + }else{ + return n+getNumberByRecursion(n-1); + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/HanoiTower.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/HanoiTower.java new file mode 100644 index 0000000..b16b674 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/HanoiTower.java @@ -0,0 +1,21 @@ +package com.mashibing.apipassenger.mashibing.ch07; + +public class HanoiTower { + + /** + * 移动盘子 + * topN:移动的盘子数 + * from:起始塔座 + * inter:中间塔座 + * to:目标塔座 + */ + public static void doTower(int topN,char from,char inter,char to){ + if(topN ==1){ + System.out.println("盘子1,从" +from+"塔座到"+to+"塔座"); + }else{ + doTower(topN-1,from,to,inter); + System.out.println("盘子"+topN +",从"+from +"塔座到"+to +"塔座"); + doTower(topN-1,inter,from,to); + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/TestHanoiTower.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/TestHanoiTower.java new file mode 100644 index 0000000..4d20bd7 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch07/TestHanoiTower.java @@ -0,0 +1,7 @@ +package com.mashibing.apipassenger.mashibing.ch07; + +public class TestHanoiTower { + public static void main(String[] args){ + HanoiTower.doTower(3,'A','B','C'); + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/ShellSort.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/ShellSort.java new file mode 100644 index 0000000..d374ae7 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/ShellSort.java @@ -0,0 +1,31 @@ +package com.mashibing.apipassenger.mashibing.ch08; + +public class ShellSort { + /** + * 排序方法 + */ + public static void sort(long[] arr){ + //初始化一个间隔 + int h=1; + //计算最大间隔 + while(h0){ + //进行插入排序 + long temp =0; + for(int i=h;ih-1 && arr[j-h] >= temp){ + arr[j]=arr[j-h]; + j-=h; + } + arr[j] = temp; + } + //减小间隔 + h= (h-1)/3; + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/TestShellSort.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/TestShellSort.java new file mode 100644 index 0000000..9901547 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch08/TestShellSort.java @@ -0,0 +1,28 @@ +package com.mashibing.apipassenger.mashibing.ch08; + +import com.mashibing.apipassenger.mashibing.ch02.BubbleSort; + +public class TestShellSort { + public static void main(String[] args){ + long[] arr = new long[5]; + arr[0] =34; + arr[1] =23; + arr[2] =2; + arr[3] =1; + arr[4] =-4; + System.out.print("["); + for(long num:arr){ + System.out.print(num+" "); + } + System.out.print("]"); + System.out.println(); + ShellSort.sort(arr); + + System.out.print("["); + for(long num:arr){ + System.out.print(num+" "); + } + System.out.print("]"); + System.out.println(); + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/QuickSort.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/QuickSort.java new file mode 100644 index 0000000..7af132c --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/QuickSort.java @@ -0,0 +1,26 @@ +package com.mashibing.apipassenger.mashibing.ch09; + +public class QuickSort { + + /** + * 划分数组 + */ + + public static void partition(long arr[] ,int left,int right,int point){ + int leftPtr = left-1; + int rightPtr = right + 1; + while(true){ + //循环,将比关键字小的留在左端 + while(leftPtrleftPtr && arr[--rightPtr] >point) ; + if(leftPtr>=rightPtr){ + return; + }else{ + long temp = arr[leftPtr]; + arr[leftPtr] = arr[rightPtr]; + arr[rightPtr] =temp; + } + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/TestQuickSort.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/TestQuickSort.java new file mode 100644 index 0000000..e9a7dc0 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch09/TestQuickSort.java @@ -0,0 +1,27 @@ +package com.mashibing.apipassenger.mashibing.ch09; + +public class TestQuickSort { + + public static void main(String[] args){ + long[] arr =new long[10]; + for(int i=0;i<10;i++){ + arr[i] = (long)(Math.random()*99); + } + + System.out.print("["); + for(long num:arr){ + System.out.print(num+" "); + } + System.out.print("]"); + System.out.println(); + + QuickSort.partition(arr,0,arr.length-1,45); + + System.out.print("["); + for(long num:arr){ + System.out.print(num+" "); + } + System.out.print("]"); + System.out.println(); + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Node.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Node.java new file mode 100644 index 0000000..270f03b --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Node.java @@ -0,0 +1,25 @@ +package com.mashibing.apipassenger.mashibing.ch10; + +import lombok.Data; + +@Data +public class Node { + //数据项 + public long data; + + //数据项 + public String sData; + //左子节点 + public Node leftChild; + + //右子节点 + public Node rightChild; + + public Node(long data) { + this.data = data; + } + public Node(long data,String sData){ + this.data = data; + this.sData=sData; + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Tree.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Tree.java new file mode 100644 index 0000000..b6152cc --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch10/Tree.java @@ -0,0 +1,67 @@ +package com.mashibing.apipassenger.mashibing.ch10; + +/** + * 二叉树 + */ +public class Tree { + //根节点 + public Node root; + + /** + * 插入节点 + * @param value + */ + public void insert(long value){ + //封装节点 + Node newNode = new Node(value); + //引用当前节点 + Node current = root; + //易怒用父节点 + Node parent; + //如果root为努力了,也就是第一插入的时候 + if(root == null){ + root = newNode; + return; + }else{ + while(true) { + //父节点指向当前 + parent = current; + if (current.data > value) { + current = current.leftChild; + if(current == null){ + parent.leftChild = newNode; + return; + } + } else { + current = current.rightChild; + if(current == null){ + parent.rightChild = newNode; + return; + } + } + } + } + } + + /** + * 查找节点 + * @param value + */ + public Node find(long value){ + //引用当前节点,从根节点开始 + Node current = root; + //循环,只要查找值不等于当前节点的数据项 + while(current.data != value){ + //进行比较,比较查找值和当前节点的大小 + if(current.data >value){ + current = current.leftChild; + }else{ + current = current.rightChild; + } + if(current == null){ + return null; + } + } + return current; + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch18/Graph.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch18/Graph.java new file mode 100644 index 0000000..2f34dc9 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/ch18/Graph.java @@ -0,0 +1,26 @@ +package com.mashibing.apipassenger.mashibing.ch18; + +/** + * 图 + */ +public class Graph { + + //顶点数组 + private Vertex[] vertexList; + //邻接矩阵 + private int[][] adjMat; + //顶点的最大数目 + private int maxSize; + //当前顶点 + private int nVertex; + public Graph(){ + vertexList = new Vertex[maxSize]; + adjMat = new int[maxSize][maxSize]; + for(int i=0;i0;i--){ + for(int j=0;j a[j + 1]) { + swap(a, j, j + 1); + } + } + } + } + + static void swap(int[] a,int i,int j){ + int temp = a[i]; + a[i] = a[j]; + a[j] =temp; + } + + static void print(int[] arr){ + for(int i=0;i0;j--){ + if(a[j] 0;gap=(gap-1)/3) { + for (int i = gap; i < a.length; i++) { + for (int j = i; j > gap - 1; j -= gap) { + if (a[j] < a[j - gap]) { + swap(a, j, j - gap); + } + } + } + } + } + static void swap(int[] a,int i,int j){ + int temp =a[i]; + a[i]= a[j]; + a[j]=temp; + } + + static void print(int[] arr){ + for(int i=0;i list =new ArrayList<>(); + Scanner in = new Scanner(System.in); + // 注意 hasNext 和 hasNextLine 的区别 + + while (in.hasNextLine()) { // 注意 while 处理多个 case + + String a = in.nextLine(); + int c = Integer.valueOf(a); + for(int i=0;i map1=new HashMap<>(); + Map map2=new HashMap<>(); + //被禁用的单词放入map1 + for(String str:banned){ + map1.put(str,1); + } + //把没有禁用的单词放入map2 + for(String str : s){ + if(!map1.containsKey(str)&&!str.equals("")){ + map2.put(str,map2.getOrDefault(str,0)+1); + } + } + //在map2找出出现最多的单词 + int max=-1; + String res=null; + for(String str:map2.keySet()){ + if(map2.get(str)>max){ + max=map2.get(str); + res=str; + } + } + System.out.println(res); + + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test03.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test03.java new file mode 100644 index 0000000..9dbeade --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test03.java @@ -0,0 +1,7 @@ +package com.mashibing.apipassenger.mashibing.test01; + +public class Test03 { + public static void main(String[] args) { + + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test04.java b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test04.java new file mode 100644 index 0000000..0533e30 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/mashibing/test01/Test04.java @@ -0,0 +1,15 @@ +package com.mashibing.apipassenger.mashibing.test01; + +public class Test04 { + public static void main(String[] args) { + long a = 2000000014; + + for(long i=2;i<=a;i++){ + + while(a % i==0){ + System.out.print(i+" "); + a /= i; + } + } + } +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServicePassengerUserClient.java b/api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServicePassengerUserClient.java new file mode 100644 index 0000000..0d582b8 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServicePassengerUserClient.java @@ -0,0 +1,14 @@ +package com.mashibing.apipassenger.remote; + +import com.mashibing.internal.common.dto.ResponseResult; +import com.mashibing.internal.common.request.VerificationCodeDTO; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@FeignClient("service-passenger-user") +public interface ServicePassengerUserClient { + @RequestMapping(method = RequestMethod.POST,value = "/user") + public ResponseResult loginOrRegister(@RequestBody VerificationCodeDTO verificationCodeDTO); +} diff --git a/api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServiceVerificationCodeClient.java b/api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServiceVerificationCodeClient.java new file mode 100644 index 0000000..00948a8 --- /dev/null +++ b/api-passenger/src/main/java/com/mashibing/apipassenger/remote/ServiceVerificationCodeClient.java @@ -0,0 +1,15 @@ +package com.mashibing.apipassenger.remote; + +import com.mashibing.internal.common.dto.ResponseResult; +import com.mashibing.internal.common.response.NumberCodeResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@FeignClient("service-verificationcode") +public interface ServiceVerificationCodeClient { + + @RequestMapping(method = RequestMethod.GET,value = "/numberCode/{size}") + ResponseResult getNumberCode(@PathVariable("size") int size); +} diff --git a/api-passenger/src/main/resources/application.yml b/api-passenger/src/main/resources/application.yml new file mode 100644 index 0000000..e71ce3f --- /dev/null +++ b/api-passenger/src/main/resources/application.yml @@ -0,0 +1,17 @@ +server: + port: 8081 + +spring: + cloud: + nacos: + discovery: + access-key: 127.0.0.1:8848 + + application: + name: api-passenger + + + redis: + host: 127.0.0.1 + port: 6379 + database: 0 \ No newline at end of file diff --git a/api-passenger/src/test/java/test/Test01.java b/api-passenger/src/test/java/test/Test01.java new file mode 100644 index 0000000..3a4e856 --- /dev/null +++ b/api-passenger/src/test/java/test/Test01.java @@ -0,0 +1,102 @@ +package test; + +import org.junit.Test; + +import java.util.Arrays; + +public class Test01 { + + static void print(int[] arr){ + for(int i =0;i pivot){ + right--; + } + if(left= rightBound){ + return; + } + int mid= partition(arr,leftBound,rightBound); + sort(arr,leftBound,mid -1); + sort(arr,mid+1,rightBound); + } + @Test + public void test01(){ + /** + * 1.通读程序 + * 2.输出中间值 + * 3.剪功能 + */ + int[] arr = {7,3,2,8,1,9,5,4,6,10}; + sort(arr,0,arr.length -1); + print(arr); + } + + @Test + public void test02(){ + int[] arr = {2,4,2,3,7,1,1,0,0,5,6,9,8,5,7,4,0,9}; + int[] result = sort(arr); + System.out.println(Arrays.toString(result)); + } + + static int[] sort(int[] arr){ + int[] result = new int[arr.length]; + int[] count = new int[10]; + for(int i=0;i0){ +// result[j++]=i; +// } +// +// } + + for(int i=1;i=0;i--){ + result[--count[arr[i]]]=arr[i]; + } + return result; + } + + @Test + public void test03(){ + StringBuilder result = new StringBuilder(); + result.append('a'); + result.append('b'); + System.out.println(result.toString()); + if(result.length()>0){ + result.deleteCharAt(result.length()-1); + } + System.out.println(result.toString()); + } +} diff --git a/api-passenger/src/test/java/test/test02.java b/api-passenger/src/test/java/test/test02.java new file mode 100644 index 0000000..4323ac4 --- /dev/null +++ b/api-passenger/src/test/java/test/test02.java @@ -0,0 +1,176 @@ +package test; + +import org.junit.Test; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class test02 { + @Test + public void test01() { + int[] arr = {421, 240, 115, 532, 305, 430, 124}; +// int[] result = sort(arr); +// System.out.println(Arrays.toString(result)); + } + + /*public static int[] sort(int[] arr) { + int[] result = new int[arr.length]; + int[] count = new int[10]; + for(int i=0;i<3;i++){ + int division = (int)Math.pow(10,i); + System.out.println(division); + + } + }*/ + @Test + public void test02() { + int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 6}; + int x1 = 0; + for (int i = 1; i <= 10; i++) { + x1 = (x1 ^ i); + } + System.out.println(x1); + for (int i = 0; i < 11; i++) { + x1 = x1 ^ arr[i]; + } + System.out.println(x1); + + int[] helper = new int[11]; + for (int i = 0; i < 11; i++) { + helper[arr[i]]++; + } + for (int i = 0; i < 11; i++) { + if (helper[i] == 2) { + System.out.println(i); + break; + } + } + } + + + @Test + public void test03() { + int N = 9; + int count = 0; + while (N != 0) { + N = ((N - 1) & N); + count++; + } + System.out.println(count); + } + + @Test + public void test04() { + /** + * 用一条语句判断一个整数是不是2的整数次方 + */ + + int N = 8; + if (((N - 1) & N) == 0) { + System.out.println(N + ":是2的整数次方"); + } else { + System.out.println(N + ":不是2的整数次方"); + } + } + + @Test + public void test05() { + /** + * 题5:将整数的奇偶位互换 + */ + int i = 6; + int out = i & 0xaaaaaaaa; + int ji = i & 0x55555555; + System.out.println(out >> 1 ^ ji << 1); + } + + @Test + public void test06() { + /** + * 题6:0-1间浮点实数的二进制表示 + * 给定一个介于0和1之间的实数,(如0.625),类型为double, + * 打印它的二进制表示(0.101, + * 因为小数点后的二进制分别表示0.5,0.25,0.125.。。)。 + * 如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR" + */ + double num = 0.625; + StringBuilder sb = new StringBuilder("0."); + while (num > 0) { + //乘2挪整 + double r = num * 2; + //判断整数部分 + if (r >= 1) { + sb.append("1"); + //消掉整数部分 + num = r - 1; + } else { + sb.append("0"); + num = r; + } + if (sb.length() > 34) { + System.out.println("ERROR"); + return; + } + } + System.out.println(sb.toString()); + } + + @Test + public void test07() { + /** + * 数组中只有一个数出现乐1次,其他的数都出现乐k次,请输出只出现了1次的数。 + * + */ + int[] arr = {2, 2, 2, 9, 7, 7, 7, 3, 3, 3, 6, 6, 6, 0, 0, 0}; + int len = arr.length; + char[][] kRadix = new char[len][]; + int k = 3; + int maxLen = 0; + //转成k进制字符数组 + //对于每个数字 + for (int i = 0; i < len; i++) { + //求每个数字的三进制字符串并反转,然后转为字符数组 + kRadix[i] = new StringBuilder(Integer.toString(arr[i], k)).reverse().toString().toCharArray(); + if (kRadix[i].length > maxLen) { + maxLen = kRadix[i].length; + } + } + int[] resArr = new int[maxLen]; + for (int j = 0; j < len; j++) { + //不进位加法 + for (int m = 0; m < maxLen; m++) { + if (m >= kRadix[j].length) { + resArr[m] += 0; + } else { + resArr[m] += (kRadix[j][m] - '0'); + } + } + } + int res = 0; + for (int j = 0; j < maxLen; j++) { + res += (resArr[j] % k) * (int) (Math.pow(k, j)); + } + System.out.println(res); + } + + @Test + public void test08(){ + /** + * 数组中只有一个数出现乐1次,其他的数都出现乐k次,请输出只出现了1次的数。 + * 暴力破解 + */ + int[] arr = {2, 2, 2, 9, 7, 7, 7, 3, 3, 3, 6, 6, 6, 0, 0, 0}; + Map map = new HashMap<>(); + for(int i=0;icvIO+YMytjyQZ z&(qB{I7H9a?X&Nh(>~t1dKY=Ub+yi&Ilno`;EM5sr$stm=T7K&>pF3;KUoqsMNIpE zO2y7OUdF{sVD<)iHsun!DmO zZz^c(eBpW2>&sKQvtlO$%ypQa;74{{Zem$#9^5OKie)hsC+Fwt=k9&*HKdg&M*t~A#V_PZh zDRb16C#f2Gt>aQWo%v~7rPuM3I{h=uUUBd2-Wz=@Gstqe`V_Mb?w$_J>nCUgU%Fc4 zDDUyizw=RD>xm_sAIW6jp0?$?V!`xOGN|uJ;L)3-1VNQ9m(Cfve|D*)%LZl=_LXCQoI(I z-O`RRUBVdMxmI3f@!lH4d2aK5cP@W@{rJ^il{*u+g!j9YbR3ZiP54`9#8Tx}pAq;) zT6)WI*6hG(8UKXj<3bmUU*tQ{XZ%_G!Xh{4HMb=De$Ke~x^=cA`!bhu)e5aIFkGlrDF5*w z>f)3ztsNS%B@KKNVjir%FR{Y&gu<6^Z*T8=DS(c%bHLBGyA$YdbQ}|B(`MJbcsnb3w{1O z=6m%UPP!^$@tZNgn~_O`8Fz*TdJ6~y7~VR9Xr$~7(}q2RgA{|nl16nP3D<^{-SJrr z%7hRg!0`Y7Q6Lj;0xV0ytjC@y5t=_?YDUkZxQzm3QV0OKLl>Ci(A>&UE literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/application.yml b/api-passenger/target/classes/application.yml new file mode 100644 index 0000000..e71ce3f --- /dev/null +++ b/api-passenger/target/classes/application.yml @@ -0,0 +1,17 @@ +server: + port: 8081 + +spring: + cloud: + nacos: + discovery: + access-key: 127.0.0.1:8848 + + application: + name: api-passenger + + + redis: + host: 127.0.0.1 + port: 6379 + database: 0 \ No newline at end of file diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/ApiPassengerApplication.class b/api-passenger/target/classes/com/mashibing/apipassenger/ApiPassengerApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..6f9df52a45680aa0b3ce1fa842f7c0f9d2589aff GIT binary patch literal 938 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 literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/controller/TestController.class b/api-passenger/target/classes/com/mashibing/apipassenger/controller/TestController.class new file mode 100644 index 0000000000000000000000000000000000000000..1428cdd8162cf0174d5c99d1ff24c6e2a99908a7 GIT binary patch literal 646 zcmbVJO-sW-5S{I(){knfUpKwAg6^e=pa>%9B`Q?u#nUFP?bc*BY_|Hh^dxxj2l%7J zw{2@^$%5;tjL~5bnS>`I>#0!bE*GgvMV3k3m6k_FJ8R+? zpLa5I=acXlY7QAj^+q%3i)X=O0rsu4XoBi?d!U_4WJhHRnrB)YC!8`GlC8klF3(aA zeY7HxFUCIc7a4L)@W90c%P*z75@|YWS$r1p0NWJ#NV#%r1~!rx%CERKJKupHiP6!Y zmD;oGEmDz6IGk77!AW)|H^KP-IT)jr>6LE6zKk60QXW6lKRLo$RDvxd;_wWk&5x#h literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/controller/VerificationCodeController.class b/api-passenger/target/classes/com/mashibing/apipassenger/controller/VerificationCodeController.class new file mode 100644 index 0000000000000000000000000000000000000000..b37d3f0d369ea30945075244c903ea4e80d67c02 GIT binary patch literal 2281 zcmb7GNpl-T6#iP4ELj;lUg9i}U?*&{V|iE{a3VXzR&ZEkN7yMBR8Fl?Tk2#qEoNGF z`IsXGRh+m`95{1fDax)26hDCfL4Xtgfa3K?)@I@5pm{SrZ~4Brjeh_4>2Cn$u#vYa&IPNf9*cQIr zk`C8Wd0ABy8^Yg~j$l~GIjUk;cu6L6=l~o=D!Yc{iZfMz?y{$70m)2{ZmKCun z16gpzlIJNM1_>DEbILE-LDeU}TRyLd9pyi^3xa!ry~Q1^{9T(j4eX_wRy)!cMRMD} zAU&yXGxVjVHW{J@GQ-)N^u$`NQV{+FPSF@fbIRfFCikUzZX8B+SyK4rqnJ6$)4piRe6CR zS#vdk80!W>o)|L6xH<|3!%(xz`LgoDR6gR{+;%xN!G<<9GxS%5E~{dmoAMD$O6y$D zs_uw_P5o1BFX%m?S9!Hs_Y~XaZq0CK7mkgdj=HL3o;0qK=WY6aag&sZ48 z`8bv=EF&AoT?_AGC60R*-oyJAMlc%32Npg=&cZ6PH2>YTU9L&DD13&2XPtrKEgV~og+5IiROv=sfFWy;gN7O!_7{w zrx+%Nk&@8)gKgF5<8!I0Tq{beliSXA11&1FTU3qWkJq)Ovh&pRnhXT5n4t>|I*%FR zW}9i(BfHe$FlJZX>g02peM-qM2~YT(R%3nRt@H|V%-r{0A(W}^exx-^<0-r%L%L_2 zwv>enq0uyyoP<{O%u)k|yaSt~=vUGX^xJnjiqUNiveL>3y&t=_Z1UbT!JrATH6>sw?0*JRiQlj4OzS#t%umkIu%g?;*1K6Z&TM z5S{)RF_Qg1gv!R*P^dJ97{xc!Xq-;g4I56$1zx}e1&R^!Nn#MeHPVVPIz|Y8h+e)( zzn30@1$Y^+(0SZof0b?+QcX}_k>@C#Ew+QA`}i6G`~`_m_AxM;+`}0Hd1ln2OPYRr z7(BpEk3%i+=Lr&sc?_2c{1r;*1pTp?3`tDa12su3Hc8AkNQ_{H?5+}|9(1Ofbf!D$ PL~xyAM#%P{aB1K_w3LW# literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/MyArray.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/MyArray.class new file mode 100644 index 0000000000000000000000000000000000000000..be8b8dcaacaec09dd2bb36ef540d1e7d9250f2cf GIT binary patch literal 1971 zcmb7^OK%%h7>3{RZER<9saq$dj+2xY;+VG1rL?8F(WFi5k~A)cpsGUZ#6HAR?6Db- zOTs#=*&r5(1wu&Olm&>U5=F4*5AYNC4=4iOZ^m_88X+Oe=gc|hyFB0fotfYM`so({ z=W#oZ1ZHA5g7Y%G9>WD(jN(!pZ{V_y**J8}$S@bhyvz$SEJpFBSX|Mu6h}X1bS&$* zsv&4Pj)uV9n;N33s%px1n;NvdhRB>{TkZl)G7}pbLd*5C($K$Z+3HrSwyB(V%*`ry z607x+S=}%lOV;hpkXx}BXJ)ljujOiHvtn&p_EyepSPiq;RQ8r~y0%M|$*J7h&K1Wo zcV?L?lb4Ko&D<_ppD@M1nsO`ka=~=WnsSxH$PvqKD#sP$n_?V(U{+f+)mVsLwwjHq zxx`3bs)ExW9?8NN(0T*ix(Dkf=plF55i zQCoey;pd7M>n*3GRxFXhX!D=DZ$2;$4B@zeqc~s-BWpdenE120dnya2Da-1QHZ>Mgt6ytZ9Z z4cDsM8m9iY_>}q}{QBm7RiZRqTg9EGt7_D&-r_-W)ibv0xdQQB7NN`<`*-w^Z3@^B zBYI_gx30oxrGpW((NK0-!!SGgf=OE&Mn8L)|9{v=-MTNYhGUr*12dxTkyUM+X?5aKY=Y?{Es;dyL?}sgqCx{9~Dz}GNBEE;7Js7mx)wG9y|1Ms=d*~CUAVkR%h;SUH z{Ao631e2UEu+9aRC#s4Pah$=cUj5P-Uz2g3#Sqv>T>BHR5jca1wi=(2F~s9+a3Srp z4UGy?I`{dPh&)7WH%OL0ytA(n4m?UfqP34R!Y?T>&XgIx))TCIoKTYfEO&Aq(wL`p zwj)`#Em?pTf*GWbcRBVE(30WUv#$ACW=ZQ`3zM^GnQAMjr@lhZQ}k29fnR+Mzw3bc zH|`>D!X@_Zaz`7wcR*4Em0Kd|*(O7OmiY`f_*!)?W=R&ry6|wvSkwT=w)~@E+~(r-g$HmhkSv+k`6;?p>yRuLHy&9gK7vL-r;;$meB@ P1!w>siIh_u1DO5?M_^S5 literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/MyOrderArray.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/MyOrderArray.class new file mode 100644 index 0000000000000000000000000000000000000000..beb40e3ad197876a76a22d095373c7591bfe2b1e GIT binary patch literal 2388 zcmbVNOK%fb6#lL~-S|Di&p-<>fNM?_szk?x&)?z!iD-*?V&UcLGG zR{&=)8%GiYG3>xOxtx#T0tTZPienff8ZO46VL&dIq8OF?Wx0$+aYcGu)o?A2ZVYI+ zu3=mtY&ecU=-v&1s8zA5R?Te+2;M{n?V9Zl(?sc3)6JliKNw_G=;4acZjuH`U%#I7|h$Cb`Eq_bEQQ12U+ z7TpCI30t76=o+QZCyhoMnP%F}M#Wg>>!xKmrLzB;gmpqRoaJKM8mZc*DG7!v^#@!V z-nw9U>Bf&TylU4>Yl(qOD(BKOQYssy#+&T8hdx@f9?bf9;>CK)DOp!-8FEJ_*%OP# zeM83{?A5UoyL6W!J<>B@VUB#!btvd)%dSu}9n-i?*FO0% zqoasBJbkL;WBDq(@yZi-T%w+8xl^Bw)>}2Rd1a|&HC(%16Da(@aBLuA|5*q73$o@BqtUQxra%vS z;2oE?K#YETtM~umA9d@##sa&t?*?W>%|lkH;UMQQ$>9v~j|KF;SVQhHuxQxJbstY7 zycgWNaxWlq+fV(Hc#hByp8I~T+Ysg&gMv78B#`Dw_aC4K8J=XY0}LXAUH8(_!wZ() zGFBI3ZDXWvFV=3pkP-b@@~f911^Q@J1rIX8LA=*a@F!IM0W;y@OztOypI{HSP$u8| z=rJNIh&>F8mG!^nRY6H9nWxw%?^BAuDrSEAp|b9KgfhL;xx4gK=AI)gDTg5`=SUR< z5ht+}b=u4C0|b~O-SgZp64f;VyiHtEjvNUcqWyjPDLl^vWM*jpfcQh4fWy2E;|TA& zp}s~)q`0c$ABO0okz5aP<6s1p`G(P?I3qtoNvdmzga^}-*b^L~AWYhsj~a~t*Om5?&|N8fhT!>iTzP(!PkReJk6AK))|}(OAG}l+w!{Q7Qa!ua^>3;RL@_uWu4i-XI}_ z*cDA~=9y?TqiS;kn14&arPvcNTjv;P9{gPiUF literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/TestArray.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/TestArray.class new file mode 100644 index 0000000000000000000000000000000000000000..cac52107667348ca513345930d546a52e903efcc GIT binary patch literal 719 zcmbVJO>fgc6r7Fin53pHO&XwlwUm#9A`F6ZDMCU>94bRCrHT~wv~gF-RFf4)^Q7) zKDK<^7O1|^nJ!-nIPFePz`ed-1TuUz{Q8=b7;)o zI8O`s6MJdQ0lDq{P7hnKzdQR_2-^bpWu_scVDuh*f%r&J!3y{4jC8O{9Lz7^64sd2 z&_I*7Z1D$pM8Navx23*AHtxGkxN+ZWq8dj#PCfpF3p-Bu88r*s1@J65Q`?{(;G;#8 n8??Di&4;wOOBL&&HCMqpkidPF1(f9>B7z`bNJWStKx#X3c*6HhXrSjh};0 zwp{4NB&IBy&f+;V}Tj1d@fxBZ1UbSWyClCEZYaCqY@6 zLs_n~GF%FMSwE6S+x)DUifcL&SStBp-~}?O>9THAJ=xSv8AYm5RpwIJug%VRhboG9 zTN}p6)(YtYsT%_M!spVl{35-&quGj!hYLOr)goYu%%Yw57v#wT%Q#J5;BwsY1~*CabDLU!2_G z85LFMgA@2QnoW={6xoJH7~%iiehE+l@?38)^B4tVdg>J7TW9+w*G#9F#4TdC+ko4+ z!>ku~agT@C;jc&$0ee4@_;`wBX?hf?HZlxOH}u-jM&Eb1-C}i9bhit=i zGUv82Y~h89d2#~|diWb8a~@f8_wh0=X3&pi3}B5ro5-PvA?#wfqd4DHh5LBG`5tWJ TA!h`}nWY8GVDgx20#E(|O4;8( literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/TestMyOrderArray.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch01/TestMyOrderArray.class new file mode 100644 index 0000000000000000000000000000000000000000..74c56274a9b311a8164437bda8c62fddf72a6c89 GIT binary patch literal 954 zcmb7C-EI;=7(D|ETejPRE#Uu8Y1O4wwpEMOHYUczq=woiG$iWPuuNbYc9+a9CcJ>} zqZc&M#0T)9jNh=5w#17%7vKMU=j@#Q_51rz0MGEk!V*?ZtXW85HA6Lh7Ib!hnpLL3 z$7x{c{(~GI!qHLH!a6ogJTmc^A-g978NXskJJlA0@h0pDhI~T?;{DKX3w6xfeX1-q zLXY=bTuGh(EgEr8MhtrmFZ5lXM?Kk=LD%I2Ip9$wg04{K%3g1C%RLrRd@wpx9id(; z#Yek@>2nz{l$}qF6aJaIeNH=?v7%MG6HZ)p31#^oZKBPUV%Yf)1~ce|0}=Pa&JkDK z7qL);WHrN~^2A%IKfE-{xTZ=h5&C&G(KWf??5QD8Xl^plz$84db;bYZwTiell@lZHc@EG1&d&^;n0 zV$wr!pVYERVy;F_!Ijrb7VeWc6U>Xl1T)ZA`y{U6>{nY@!4>*}^+|#5ph&hvnMkR06PHWe zymn(Oe8VF3sF)w4aE4aF9Bnbl&LK|-Wmve4d8`q(gGFppRWm6kXt+gP&}fgc6r7FMNfR0p0)ZA(Augyj0#~T?LRG4QfK(|&3hJe&wXS+^3LvApkN-g`Uq_UrG@rvNr^qXrL46)ab9U7);WCMMq& z@K)Cj1mxp%pamLTGtn<*Nu=#76^)6sx@oM&2g(|kpMx?VnoMA`8>dN_sBCB=GdT*? z)J#>D>B*6{|G@EZ{eHMRi#Xp;ZT^sK8NGnNdbsDv#fYcFV<<;iD^NPzV^^+|DN%;? zey-xz`)YbFpt-N}VLIq3s}h}SOEI;6I1AH4!icSSf> zT=8Wz(s7PkDDg4fR|18?r!6xJ=>@$Xe1iB`lqxMoXWv_JaTSRw<P+zr|?>HY=`Cy=@sr~?^w=H=HHJ!aWenn z1bA=)f`Y6}q6+C2uteh9q`t%K0qWQyw#(XcTq;Bc+^L0iRxUDgRRNhff%7`gTb1zCa{ literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/InsertSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/InsertSort.class new file mode 100644 index 0000000000000000000000000000000000000000..cb6816c405bb521c0d3e4fc65bd864be636d9001 GIT binary patch literal 636 zcmbVI%Wl&^6g^{)lP07jX$kKrLTp+uFoGx&1XY!gkXoe>DX5#SCeA3C5Zlq%6#T1Lj3?FK7)^_R0zkW60EU3bI(0zBvTSlicXydbkNNJ6zZRMzDAB`LF+NddcqhR#>&k&!A<1+VBLAqEYuKg)M1yyDhTp{BW zKYwK#k6gd9D|g!d*+)F~+re(TCtLCZ?)ohmbl$zkCILS=35F+fb-Mb&q%%Bm#p&vM zF6knd^o#Z-wk{K`;VPw?L>&rlQ!*ga<=Im-3R^y>XyQKB$xFUH)QR#L`>bd(I(UK& gY|{QUW_8G)kWyTrCfet0+#<;g9YDEp~7+K0=8J1`#AS;&WyiZf0+W2iZQsVn zfu7ij&N34poAfU@96sF)dS-0G+$M1^N%I{NX7mDT{b;}77bBiM9!o_!O$ACv`%F*R znVV?Bkm*7%*Wt;5p4{lDADDcY47xhik;zR;P1Rm3K*ff$jfP zE>JJF1Y^znzUz;8Cp9O@)qp@0XZ-=KiUj5krkHY>YW!gKb#VMif& zi?>@tgBunZxoER*ky|K~-AnW(yv8!I;w4^kYL$pbdWc7f7Wg;n Lbb@<}={vsxaBzkG literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/TestSelectionSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch02/TestSelectionSort.class new file mode 100644 index 0000000000000000000000000000000000000000..46c019d6cfac5e554151e4dbf3fe96f979e6c928 GIT binary patch literal 1356 zcmb_cTTc@~7(GLGyJcDA)`E8h6&wYMJtjAGVC4~9(odh~sBdcHYL z=K99?(u`qbVi>V;496{;u+fSkJ&ne2QrlB{8jInyMx3#67ULEsESwXFPPm>MP6|Yl zsd)k8l3!E;ZCTe-H*4iZ70k)S5;L7yzaUHVGH`XgnKZ&>w<>ThTky-7vaBw|kn zkrlTht5xMKsoVZyeg?e==xsX55jRCT9&RS(4Ab!uE+;6Q<5afhXJ|9 zbx{$oRu&L5M9N@^2X<`(BuoZ@K+^(ot@%(E?$63fqfiTnE%Xbt&#G|QFXm(*%PLd> zne4n@3kqu5)jf7^DQ;NT<6tLtS(tQi9v4{0f`y9?rf^B1=l6Q2YHq2h0tc6Ih0ufA znRaj$*BIS%a9uOaIJkkV!1zDN#%_L`eQR-rg8q`qKdgp|szv-77ZMx7x_%}{RYPj4 zWSPo$H8_4v3z!uR;;!WO_Yswqit>sAdy_M%Es#wK$Ud~){y*Sjp}%qK0`cTlVlrBd z%1V4Jqkpg6b+4*|P`@=kplZXI$%UEJJbKa1Z%mIS2z|?(cQeY+3R-jE6~yz#@*d97 zMlyoE^qma=_F+GxW*opll5n%A!GOiwo7nr7Y&sH0Q!Z`9VdTAhWy zXzPflUnBAV*mT1Y=!S12&e>!`QP^y%9Wg4_%r1VBEk}f#A4Pbo>c{ zKr}WdpiQ|sTc9cF6z%(!LdNzU$xNP^mZY1N`8nx1D&9$I{-RSB7*1y0LZTqci%!NV zE+k~hDamr#E-u*KFX`;!;85a`UG~$i=Z|r(f^>=kZPEGUl3bRFyku?K_ee3OdI=OO z1pzTbr1TcJPwN3d!ldU3)XfvunD%A%*{m$p`ZLgL;EX`?tnDwlxs>!|!S-#BOlI1x zcv*YeQKL2P_B5c{uy6!N4NO?LhU?sZ-oOnDlb8}{|Gmx0ij&XTo`svZMQE3DrY+pY z9Y#+r+*M377VaS_F!b*tvG<=_KFBQDS$|I|{k-hk)F|Lq_#(0`qvIx0)X=Arwk%NR z)*8p&w18exAXY^WRzE09CA*jt=!nk5_Ca zN96ypseuDf13yHVtImOfFga8+LR74tW11Yd0a3~@&i{`&+9zm2j))~3MiH%8X6*_h zct!h$Dz8%Cbt?=P!iiT6@B|^hHoW>c7e3nrUv@HxmHxM-t<4^E( Xz9PPf?pi>Xoa|JvoJYV=9ckZpjG8OS literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyCycleQueue.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyCycleQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..65affea06837f54fe4d8779c1f9ded8192b06371 GIT binary patch literal 1271 zcmbVK-A~g{6hF7U+h8BEjZYakL6lL*s)EEsVhBVO0*b+qIA6HyuB^~@OV<%G#y`X- z-+a*r6N!m2`~m(=#`wEkftmPV%(8QO&OQBooZBD2zMT@$0?j2ULDzdJPB&DTR-vTA zOoEIA%`(!3?=#X~Y%uDPj&!9Lv>35KnZo5_KKND34o&09Q63(vhZB<829@K51-rcksuIY+a-LBf+zA2h^Q?y#r+n0V< z+p6E3H@A*gk1a<&ZOgX22fos}qD{Es)sFodJlQQ7)El*J;R{y=(g%Fp_FB@1VqV%% z!?7dbv@y!yEwd8{>u^gnBSmpvx{V_o!VZpkQ_4fY+pPy~GdK?06@}PZYda33;|186x0yZ6iJw2%&NGqTT+*<cl07ysAG`>&_f9;gl-cwKLO_j!T^!Z)|R*T!J z(D@z~pls`~NC1o>PQy+KoCZzNER|`lON)7~#e~WN=*PmhS^t@+QPhma;i$9tx4=}Q z%4Z6AMX_>o84Vt)R2sue2qo1ZsrV^Gz0hH^LG37QQ-uYp0MsoyXxyuAPb literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyQueue.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..dc33c80f0970348fbf95f84a592dac7754972236 GIT binary patch literal 1167 zcmb7>TTc^F5Xa~2r3>vAO64XkAb6ovLp9(N#(0Ss2q*?aw7zh|8BfEeU^Kkx z2I57>Z;0qMZ+JKi|i7UB>%H-6@~lVf#UXO!PbxO2G0+v&&|H(u*_9;56|*ohpm=F08t zbgZQVe#C7WqG6i`XwarCU^* zV>CkJ_)SoWCaH)gc9(^YQB=}12EOz-$Qp7i!2?$JvLb@mEYU+LikdCu*^#r@UJt5QBt7EU(ZCU8X9=1K-aY*$pV7Cgui+#d! zPguq%rE}qw5|(KiM{?P9GVxC?tN2ZMo2lBUOPx{shQ}Hlgs&v;WeK^~cZa3k9nSQy zE9jKitb(0fpk&mO`+bCLk1&ht>kjq=SrYOf=%2_kzL24R#euFy=|WcfAo&zBhaQu( k+#~t^e2@1$ov0{za;me>|A0R3gBCAB3krH2290j~1?Og|cK`qY literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyStack.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/MyStack.class new file mode 100644 index 0000000000000000000000000000000000000000..4d40f781a07b5f81cd00e48cd18f3ecd61a6b523 GIT binary patch literal 1036 zcmb7@%Wl&^6o${(PD~v)&7Di2rCg*EAp&Z4K?td$B9K6I3jlh<~PTFhX4*OXHd2bH4vS$M(-(-%p6BMYk-<(8>ZCbX_j1CfzXU zCL^7PAtUY0Gi+l&V8l9%vJb^n#E%eKyR*Z{*zm^=qouBxIxlA4&yNm* z!$Tp@NzjNVB4V`O9r<3<6&^5J zRQMhb5{p?8ZO&Ymk=6HS;mFw(vKu?Gac_?waGNa3*_0*IrVF&d=)r%t1M`y9bUE68 zIoxwbF|A_u8N3h;7uaeCJnkmJ4&|`gI6cL4hI^^;jaZ{#{m31Y*3gbg|Eg*hrKpQ=lTQJRm$;Qw*$DZf7trdfTdEFQM{7UD9<&@R84DCl|~JwPG{7{ zB;|~XbB%#9hDP%Xf*Q#YWmUrM)L70sVCd@%)IzodSqcQN{}Aq`2-bYCm+4AkWg{Wv zLD032WE!8y&_9Ezr+l?G(21H@2j( J*8tLJ`8Rb{lwkk> literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/TestMyCycleQueue.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch03/TestMyCycleQueue.class new file mode 100644 index 0000000000000000000000000000000000000000..fb22738f15989ee76cedec6332aa64825847aa51 GIT binary patch literal 1414 zcmb7ETT@a|6#h0KNATbUL9(pOvQR@TOHIu3MoHi$%tm|K;2u57;n2A_!%Q!|^&5KW z(O&BTXL6<=(0}NkG}YRmWoV7@u^tj+T~8D6T6MEEnbW`w%tZ$_4a2C z$IOeQCZPz|&oC&Tt>OZ@7)H(x#qpQO>}eGl!Vx+W~Zo_DRg6(7Ukuok|=I4bVXBrCvNKyG3p+Ro^U4q z72jwZwew^MMNbA&#qenrS8)ZM^p(q>3ryY%(Tk+Ti8JC2{rg}as_sify;Y+dmq}J@ z0qCY8fDb*mN<}D{#o!?ccz*!bnz9dfdLRT(1zuuGjrk<=6ZwdyfeO?L0yU}mm()^0 zE4iBAqK8}uXj|JykPPh=go5D;Ix2`%aBlC%*S}XkTfUsn4LM(u{*7p8n#PM(D2Sku z>^_>T2{D>@6ah@3nLdOTY$Avv+TkFCR|w-ZI`D=v_6SmmPe%;{TthEuKD@(q+#t-N cq&30w4O0sGdOLg3FIzH-Bj_+d)PsAs`6#fn%BRDAHg)UZRS*RgiGAqpTS`v5(v!(qyzzIefhGquW@>P0)e%Ft2 ztz4@I=pE`wTGc)SCZ(%o^JCvH-#&ZKmmi-#1GtM|BP1A>{$kH zY-o$Yw_p?mLq}Sxh}D{&6Xqt*mB|uG8+l&d;-)6`hS6u2G>c(6oj3G^&aIM`(<;RT zuWD6pS)x)DW|KKz8k~(sV@AE{NQ+n1msY=p?!_6W! z=sLsA;L+bQO#VmjlfI#>&GUO1UUdhdS7!)kgk3TU>)hnJu!Tu&gIS|y=EbrmA0XU> zd{lx}aT$FK57aR`FrZy)QrSBt$RwEH!lMjv9|e-Q%%S&g8%1TWzC$iVWSc z(}7g6=d6lbxQ>hTGt18dCa;9(719#K8S$3kL$D97`zletYxLq8$!a|S{Zs@9U;sC$ zh)n(lA4!051kbi|2yc3%8$JhqVoIF_BnuMxh_(?2s)JBnYX2>DI0%!g{T&9#b%f6C zLqy2X<)Ay#UYcj50SC!##e-ncQd00}T@zCIzBXM%nPD1;VM`4S~q4wXFmi zvPM}gSIoR})@8m#nx?E(kfjaj7%U$tBVN&P1;(=l%gmV4EgE^Fypxf(VN2IlFiK~=5x#fnpuq_ zF!CP-94D^}s>n$@=!WJikjyEsXl<`bN1Do04&_d)SrwOt8LriIy*6|3Bbv(h0hFKj?F{fi5GdiAOfyG6E_P^&dQ!z^0%F(gJnCHj} zh<;{rI+n4*ZmR-g7ccBYYt-m*x|RH{DtNT3)MBs_yW$p40oL|iPnmQR%$PBUSi`C z8^g9`6GYm!DsKyPkoL?S9nFa<7)YHlPW}rY^Q`JA3bdro0x4qac@a0ziDvp@`4<9# z&_=YKqzt`+-kQDxh>wB!647X&4C6BKdKG{xxJptS9k@n8*!epm!~yRP5!%!a5YDEP z?LH#uq|P)FuvO-q?u|HhgN201@jzRCyMT$ezZXQ4D`-NQ5U*(-Z>c42 ox2@U|uHyztal9eVP8va1AccNlLBp+X+~y>LP#{}3(Gc$Z1|!-sSpWb4 literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/LinkList.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/LinkList.class new file mode 100644 index 0000000000000000000000000000000000000000..d40d0c5a3fb06aee40d411231265b1c9ae83c2a7 GIT binary patch literal 1615 zcmb7E$!-%t6s)#qGO<0zSqV!ZnANdy9D>=yCJ-oK3{nsh$BsRa0efuCj3YSn3tadC zas?DX0*NC?9QX_*&Rp55+Y{qR9EcM2^7?gEy?Q8mz&;%f~fF#*lY_}bvI}?U}e*szfnnAu!E)zz&wjv;Mh zH!>EE+c<%f7EakXtw7IUo50-vgRTn`7*f(o4arw^bLoLoqfdtCJmS=MviLX%ohIK> ztHXowioWBvO1FI13l~G*kxlk}^dDjR-&RQtkGORiN@V#3r1(V$#FQ6Y4RB3sI1X_) z&$!^6%)f=mi`R&~I&5XOLXylgI8VGs{O;6S z7}a8a4YAiS^TiFYBRXw_kfWp-Bfz+Z-lORzB4`5fZyPBR6tbPt062?Fbdj(XcYP zj`z8o?YW$dTvpyFJ#i>K{F&_P8MZdMzQ3pK3$>X{UC`RpaN1Z`IPq7Z4l0pf^>cWR z;k?T2_GlIMc6EvUGW%+n(NFd);m>h(o^Rv=UA)K+U81_n^z;g=yUNoAj@NZvdHt#u ndUY-I>be}&m14f?ilHma!2F369q0dWa(r-OnFm=|42S*z?$R$? literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/Node.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/Node.class new file mode 100644 index 0000000000000000000000000000000000000000..622459b74a3ade818bbc20edd7f50f0d78a653f9 GIT binary patch literal 854 zcmb7CT~8B16g|@qwp~|j3kYHn@Uv9uR;^DMA2i_s3zF0{@p0On&>`KA>~4wtERB{# z6Muj|%6O)20!fL9+2r24=bn4-nLG3Q&yQaKT6kr{!A21`aIc6>Y+2a0k;8^D_X~Jn z{6k|N*?5d67HSrD1ah8CrGPkK7^u&wK(pNseb<-CK=*WT;>t)zGD%c$qT(xXf6#2X zN1>S*NmRQyr)hD0juurG&Q8Ef-D19Ry>Cj$91 zIUJEwI#lT(^p0gLeU+-1Da+GIG?eE8*_!EZcfwKJSNq!ZEE*AwQ+XyGl(FvMCKfH! z9X!P|fmM@mhmr^Bq%qI)cBF@%iXH5t!EUL_LA;O1$fMrt=5?{nm*(*0WgyJP8S%nVnjvLWm|5cAKC=7(yM6&t-~5iu zmkDQ?c5#v^@llphWW@@x+pHs--t;ojDtQ8HjPtxtI)OV_r#0>0vsln?d`0#ra-S}c nuYW^kjD?CdMq!NN8205vd(wRkRkkqGoN4iFn!sIR8C3rQSth&x literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/TestLinkList.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch04/TestLinkList.class new file mode 100644 index 0000000000000000000000000000000000000000..baaff8983cb43decd88f1e2fb796d53224f8ce17 GIT binary patch literal 948 zcmb7C%Wl&^6g`ud)5Il7TT)(yra(zjs8NUtQV|=ZE|6)FS`{Hy6K9l6v7N|vk@yO} zg-t7g#0T(Eh%-*2X2GJdV(Z03oX&oPdt;e(L~Ee8#Nm{cxvMrb_MpXPc+|)K=tapj(TUxO9aX~ zj8&8z=qP5EYrZolX!UhG_T@L0`^x8#({iWTTHwqM`7C%{g$aeg3z9Fo9Sz*zi#1;c z8~`=i6=n{-pwG82A%3LgRoX%dX0gWDo-Dvk)R`?|9k)ngHh)K!5%BUCGM_Gyb$8Z~ zyFh`?nz$w7E>Pxge@ugP#c~>7$+b};O&&!GS71@7hz&|Lh;O6Ji?h+eGWIxyX{kPu a#ckYSR^$|SagS|o7#2YoOzzWW@ZcX#VBVDg literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Fibonacci.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Fibonacci.class new file mode 100644 index 0000000000000000000000000000000000000000..4e111bfaa7e9771b3b0f1171e916d9c7a09a1daf GIT binary patch literal 529 zcmbVJ%TB^T6g>ki6)b`;G=z;iaA8e+Y&336NJv0UFszxD2@KMfl;ZdJ0c>1pT=)Tg zl<|xZb?su#o%=fH&Yh3Xw|4-i*e}4sP61i$I;c3<6UbfaNT*i<*?OZVU|q)pB~WVX zNZrgsUnTd_pD?o3jsrRA$wV7}6|~Zko(Y__gE;g;IU8wTM?+6e^;FJgDjKTfPdFGI zpLajpd_sVI$|lMN#17AHxZh4UIREe9o;uRzZpbuFc{afeeJzT0v_c zzCb*Gr`L!k4YuTo?y>*{tkcVzxkzG~`>Zf^wW{?5JG-dbG}fYO4PKF{+6Maz=Cd%I o70McBo4pPrF1a?y`KwW*Ut&#}$3n)*VUstT3!>pK5;NHT0u-2OrvLx| literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Recursion.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Recursion.class new file mode 100644 index 0000000000000000000000000000000000000000..fb2932eaffea4511d8470fb32d487ac2180aec7e GIT binary patch literal 887 zcmbVK%Wl&^6g?9=aUO0P5)#_*YIvrltq~M9MQo4|mC{lXlntwiGfG_ih-?SMukaUT zQ7RUE03U@o;v6l!u z>$*|k1TqwN9bdA! zm&U}{%gD%hMELq8X@Tm2O2^UgNX9Zysft->rYcDV^4dJ1+u7GBf=7sbfu&w5-H!)y zG9zE^Mbp?-uRSeq`7f^>O~pnT6&u&EYGK31CLRgcZz||8AGR%Q+1SR8jixT# z#;U;6|Cj=G%%#5_94nUs7DBx*NvZx!Uv`T0xuN{0?!#O%6+33t7;>GWYg*0aj3@SHcz4Sf!hH zXU&D`@C>Wdlo3OjjWGa7wbt)b4&)+wykSC}U)^MaF+0W`@*!&uZ&p%R-aYUDFlSjQS#thvtL RfUqx!uF)5`!8M1Qe*o17tC0Wz literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/TestFibonacci.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/TestFibonacci.class new file mode 100644 index 0000000000000000000000000000000000000000..d400d89d417d5970ff76a265b89207566cdfa64f GIT binary patch literal 711 zcmbVKO;6iE6r9bM6UQYXK>9@~&;kjEx>8ZAma3OZNJwcxN|Z}aYqLr=itWhWAn~){ z&{jS01Nc!DW2b6})B~y|@AI4YJoDbzH@|;f1318*jS|)>XyT!bM|f=G37%S5xA07$ z^ihY}d=kjF+I@k-=jcoc)H*s;U#Eem;-2)zL>isQm*c*Sb(;SH3udSjf%hFh3fw>@ zL+$Bs;L3@f$RttWK*e`pfB5>X+f#`-(q0rw-`9r}45SVPnyqi0kvx~~SdyS?V)7hj z1Ic(miIsnp1?pdv8AfNPGM0fdDrTeIji#}$j&wHkg4(N8z=4Ibg$)PKv1wt;!8Tr4 zcwW-HXJifG$T<7S?9F>c~CiqK4}#8PJS3_gDYxp+IGz z%X?yVJHlwov4skzP5liZag%GnY{?7WaQZTxMmPXDI{o zsPfsFH84J4R>2Z#BuQWXkdd+D3c32~PvpO&Fz2vYO_{2coAWrRW0`n^cagp^a0i|_ Gtlk0%ji*fj literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/TestTriangle.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/TestTriangle.class new file mode 100644 index 0000000000000000000000000000000000000000..7d634c763ada35726b433bc7b75744f66bba6c2b GIT binary patch literal 757 zcmbVK%T5$Q6g@SscG?yg5M+D{qBAULV+=9DxX{FeI4WT#Y+Them7XH~m{ix8@L8}x z)NVz0MDnzir}gDl?G7gr3D-9?9fD8tv?JXU&duA@IBx7zbOLm-A+Y^_%W$081|Nn;DzcYc{o}%_lsxAX29~Gm>O9=zu9h1snUasE|IqxL zMS*6l?DSY9w6ojYC1K?(m*EAxv1^u)aF@n&U;k72>Udv86I19sBR38HHtwrHIL0V_ zS|MM-x4!uq;-m~;rEHYWDgx@kGy&HzN2`f>ED*#Mzb(Ol_9-eY@#71sXQ=(w>(pm} fbEvYQPOt`6ImryTjTROeTXJz8m=BkrtYG;U?p3pn literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Triangle.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch06/Triangle.class new file mode 100644 index 0000000000000000000000000000000000000000..de418476c38d30a2364e052e436630e65b5d3b2c GIT binary patch literal 660 zcmb7B!EVz)6r6SJxG{0-CJ?|qacenXR8_q+;!q@{swp5^_1ulKO13z5WN#|<&Uc{R zddY#}gk<1?pX$Yx7E= zwz+jG;Jz*fN?@(0bMM}CFz=xt^{^^X)#X5vKr~W&WDMd z=!vWUk4{G~casweJp& z3q)2W$@q@sUH@FA2G6)smn#M{r$?R9CrX$Fv-kWf#1|eMtT5VZTiRf3E(#Ff0a1fE zWR-1BnH}a!l3e*m*HdI10c literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch07/HanoiTower.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch07/HanoiTower.class new file mode 100644 index 0000000000000000000000000000000000000000..ffe0dafaa976f9370a1a8031e11b9eb6922cc9d8 GIT binary patch literal 1118 zcmbW0&rTCj6vn^XnYPn1KwChxe-!_q0|EnzpcYY>Xe22}QbOYLwjJqUJ2OtF8sET` zapA(mjjmXksEcAC@d11U*ET+ciSgVi1`LFSX?pK>&pqFr-#K&V+wYyP0H$HYk;HHe z7jY>HEe;983P!{{Du&An#uSVTIT44B$v6_2QgB5?t}2+0;#w3l43Rm@w)}YpNgG*b zkPW9|GV~TK+gxeZOQyHROErq53Qn2V*12bi^`tAbnaR% zZ!}DM!}Jb>%hkzQ{XVxHYt4CPdU=Lu#R()SZOJfFFH-HY~Hg3d++{3CpP(0t|EoLC}ve$ z#|?%-5z}j&$cw&51uQnLT17mq>*w1y?GLY}#(wO+RB;n|G0ZW<+V5YtcedIuK2ifa zTE#8QM{!%l9W1Cgg*0t-?83B2)reCVrvIl`42gZn2c=E3?Ee!gK5zIYwMufDv@uW! zk}XGHrE+{K%H(xwcZ9pHX;&D=wNA!?n)4%vLVIl>V^%Yc+g5z1(>R8H?QkL;(02q7 zy>wUL)oda@3W%;_R$DrJ-d`@9r8}LZuK@^wZYcU_?5CAZGov{?x()Uz*dCxU5(Fij zAgy*1Fo=`1ii!6{hY0g`$n*oewEPa^pAp)H^l%$;D%?UO(?T?*kjM!UBhf;Xi`qac+aNYlg$bR&!&DkeeKG>Iw|_=E@r{b+{} x8DwcitjOVXP?3i-q(VV#h?GQ45|xMaUs%97(n*VS6vtv1s@eb1ELTg(9(^oNjfxBnxsrp{VrFE3qQb* z67N)@64Y9z(%R`hubA z$ynS>B44O3_eYeec}c)WJ+7q2-^oH2%9P>Q3zEo*cp6Gy#si0s<(Q|bhzCN=rGs$) z!0C!KyX0{qyUC+aZBmT5j2RludvC}exHIC!(8&}LwWp4_8jwc)mokHWEwV7_-*Lqw zkqJeORwtRLKwL=ey8cscPb*YVgkfU6f(>jk9RAlksm~1G`a=<946VPj&9=Z`_LJ#8 z=+(S(U3aI4ZRF{*^vQu~%M?vQ4&99I;_frp)3m%mQI|m@C5n}=23RN)DiK~J5?j1~X@ literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch08/ShellSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch08/ShellSort.class new file mode 100644 index 0000000000000000000000000000000000000000..1878a160959a44aade194b4dc0ab3716d3ce0611 GIT binary patch literal 723 zcmbVJO=}ZT6g_V;lQc0+($qgrVgJ4vmAhe_!8mWsS_%eBBCQdS8GW8eu z6Wj?dijb|Y1Q%Jj^gs9~+$q&~CN1LHf%on`_v74i-+cZ3c?Mt$l?)Onr*J+6OCZ_s zMqYGRAW^-tFQ7jNdP*SQ@;jpX1C$j4^Qfvi|^!H`x#rQO+N3J&!xY=@op*@rn z*Xw$tzAeYzSWYHt)K}p@VaL6G%kH?!_d7ut-R7_ft$gK zks(Us3?o|HEQ+LwN&0%js?C!A5wcd&)t@(}^Y7L>?4_GlT{rdG>6I> zrT5-rqeiD^ufKVV65SKjj$?IWI{!wz-hQo%>HG`JlRhaw#PSk|<=sbNAw{E@4CSmM zk2S2Ij3O=(RdE)ZFmVqhY%{aR%v0u`p#ldN@B$YXt8H5GmwzDhlcXgk`QM5(f>m+fxj)z!ju8L= literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch08/TestShellSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch08/TestShellSort.class new file mode 100644 index 0000000000000000000000000000000000000000..ffc350f49ea00ce92437d160af6dc0871b5678dd GIT binary patch literal 1343 zcmb_b+fEZv6kUhTbV?a+r3EjjfT%46i;ALxsGz8|)yA48ruuMbCv>pwG}9@G?>_k% z#>B)oNvzlS0ser$;)4O#DWIan7~@H^Z)fc_`*Qke{oO|ZQ%DCffC-(pIwRZ0z_!t* zZ)~2g?KqA^0FyzSz)1tAg6PDA5>o-3R{D$*(*c}Sh;u=l$Bcnl0~ZARvv$??<^+7v zSWZA&aEg{dcgn6>w;Git%e^a?%8Z0kPC=G)(zTVp71X?vT^Bf)DmaxyMb=C9l3iU+ z$eLY~^}1DEw%nh>h0^5N#9gcIWlL7MoON7ph99g*yDHEh&8Jr6s!Wt639_C`o*7k; zuiB^xh$NBHUFOI7b^#J5U00wjPh4l#lZA(AS!)$(VAQ}-fu6MGm7HQmy0T(O}j-6ovy{16SitfG#zpT})YEfV?nvDGh*=nEc6T9XA0Uz+3&20;WqrVfA(P&jx z<|8@v_jCLH#Q1LNd}(Yjnoq`Z7)C$;R_e4ts0CB*qnDr-)cV+Kh?lMF{gnRAAO>lh zTlN7Qq}Pr^7$OOiMFScP#@+@#bfn_GFxoP4EetIa*Te8<;{ISJZiErYtRWccXu^!A z$3M>b&S(+sz*EG=BU)lw=iPgB-g}L%e!YqAP)`%RO@xSktcm9vpH*%jJ?bXH@i&P4 zKQ`5{531oi2vZttD1acF?4j&O2ir8+ZYQGX!YsOxqrQ(`6cNG-`cOp#t3*EGbe~bb z;AGdB^@gl!cw=Oor9X@j=tON>92yQ|ln4#4a0Ev=`GWX5 ThFcCza&ljS>0AL_wbJo#G$1jj literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch09/QuickSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch09/QuickSort.class new file mode 100644 index 0000000000000000000000000000000000000000..ab22aae65a65201492933824e36f0d122c308d97 GIT binary patch literal 742 zcmbVI%Wl&^6g}gN^Kf5j5~o00Bz7eWj06-A2#}B>QY9tOs#$cy#2J!l6Wekez5xD! zB|-urb=?g}EcgJvg$*A7;n=MZYb@Q@x%VEQJKukQ{RZGBE<4C!y?~7ZHU;wcO<C-*`%-IebpZmskB31jSp08()t{f$;eCvZngbz;!V_aWcnr; zdMYxJnoe~v)bT&CKe~R`dp0xv@m?4w_XJ9jiW8HVFc2ti9qzPRtxQ9rCy{{Ip(qu{ z0@fi@Io2-|qAdYCHp3BfI|@y}SV&vlgp1Ua3V$*aA2H<1&GA%HWL^-{NWiNc#z{z~ZZ?p9S6mn?BFV zV-$>b;|s)T)-KTJGcboD^To3Pl;E%`VS$L1E&n7@I?-E~gKfDXUu@g1bnTC*HeO5N zN^kSc+jq#H%zwCSd`e+^?%FB*{tV{y2guU~XK&}}8|-%J>iO=;{4=R@NaZxLUprL2 zz-*b5!NtbU=(8-&KtOZi!5YT!zBZkaYdlx_rfn#twPRp3|z%H zp$C<7&A@fA4{^^xLS?*RAc>T~z&~ooZZ__{nVC1UuE36sP)fRaj@OZ;oK598UY5Fv zl73KeO?6;bNo-qF-?HOVl-}h4Oj+c3TI&ga4GZ|o3Pe_9`=JG7xonnl0-cdWbPHr% z9%k>|j{gUI(6!f|hCn#7H8C@4^~wr-QK$c2*PriEprI@s*K#eJ8G@17#KgozbOwj8 zlfOFk@qn5j%(acXIIW=dcP~M_s2{g;4b+2PbkH}}0N91y+%;ei_A&{{;t_EgV=E#3 zZDZ0q+8NTHAROylh9?Z~!s66pk9hj+(@XeU0ySu{RL{zo_pGnYx9rjLs%tM)*NM7B0r=Tf z6aQ~^(e6hhj!}alMy6@+q8S;4kSDf686Q%KMY5mKJ||;|D!rpdO1b`erVeys9~B#7 zbUzL-w)oSdb~wo4Z~%CPE*z%TN4V=k;43r@N5vPkucBFb;xl5ai2QI_6zWb!@F literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch10/Node.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch10/Node.class new file mode 100644 index 0000000000000000000000000000000000000000..8b0e94fe875b430a1546717395abc97b3e756d45 GIT binary patch literal 3053 zcmb7GS#KLv7(HXp=470>Zj;uKwhjbv9H;KWQk(`t_l6{0(iXY^oj6n5sbdGn;Q^@< z5)$GE@B)3OFGT{0x)MkTUW&wTqLlO98QYV@R8&ds{qDCf=ibR*|NQbBfY(v$LkbsT zFmXwiMOiM(a>c^cKJFjL@}Vr(MD@B*H)Odf$B!(0+=l^NwDF1Tw`6f`EZHauxopF; zaa+ieg|Y^H*=@QSv{?DLy`jI&ak=S82fD>J^`MuS6*xo*XWsrB47$LZrzsBCM!orO&*h(DCs z9$r#*s1i!xNalIti<3B=gflR`PdD5uJGCk5`K1-F*qj=_P8igs>D}=MB4VT7EPD;k zQJOy%0Ht3s+ou5~3c+O17l%1YB@BgxuM=j)7n^SJ&b+&(=1tTqoZ3aVc1p76^vXn@ z4;ha09Fx0n>D>G&W>4B|c5AYl zCg?pN?Qk%Pih~#MqJt6ab+8Zn9i*{e!-3}mhJ%xM%fUFZ4knOu@TMFmalk=dmQy&b zVRv@~eqzTrc=OZ%B&Cd$Htk>qcVv;CS*tP%*hbhlpWXyXnRkmD`t z2J&aEfjuR3Om}U~tMRf=_5x@KBAfE#O&{T%euj9HyEgLvQ=eTo`KkdrG-*C5M!;UR za|CMV6u1viGK!ZF!OJ|IMwCB5U-l8S?EZ&{{KQiPV@gvbN&4K07syWEJ&g(G9>&I2<3vy6gPlPZfAjcn`ZWGmx8(u9!4N8kMMi#!)=pGy$ge9yA%L-T<%jY-{|eq_`fdYE_7U`l}o-a zewNx9!ZF6e?@eUChoL{1_ygv5Frp78eup`q%eG*tBMCdlzi+-3Ay2Ud9%BW4@=x@q z^vBq7AI@Y-Z=tWP-(N7O(qAxBhUl1&k-U$1%1D_ZC8uCf$tl<=OO)(D$x7L6CH(=@ zi>g~1Zrx2k?aqMj;V9l_okREv1y&s4Y%7=|FG@)f$4Ke8!dGCLlz|(V!8@c(e9lY! zE-4FN@P5ybvhf~c<`B2+zcFCpc>D>5Eu7%5tv$gWpNxgc_N#D|{nh0;4^SW}39t-l ztW*-dpJAvPok|SmFJ{3zQ&1D*Cx9&8cx{o%+jO*&m^!9U%Uq6+B&N!viS*skFTcJe zoLIpSmh|0DOx%Z^GFpf$5yzoKW=F(n_#%!%i8zSB%2J|{-UB$xhB1pE?I=n(gR{)h zfQNIWB787!VU{h8@|w)!eHLYK6o)ZKivPy)37jWosb=4W`IIk{!Defk&IUu%p0bl6 zMnpJ6Fgq$;tCgvH5v_nN$fHzBArhm!5`xi4N+E%exV&vIbg-Rirc?YQCdLh0 zw~$~+G;vGf4{+_)rF#_5of4zVW}2_(e)B!fIWzP1_opua7Lkh~iZKi0F@*3SiY`n< zi6(WJ(qY;{#=?w%;km9aFkdLU^?Y46t9HqD4)d~MH)OM^oI~aPlP*^m=JQ3jqLu|B zE4E|%YXafS%svNgFfGtqupL!w)l16TlcgFn0|mD%Yx~l(_4y`g_*J{v+1fo%1#4}m zsXS6PGMjp@c`R!!t`VC8mZRQic0}ct=P8F}k%nx8?p>Q;87 zC+o^r9vK-2wo?&!#NnM=65DlKURgc2weF}UJa;6IWdaFw3(R$9vF;j7AclAXSqvrc zP@`GIJDQ|PP^hMnuSq`H?b4AdYx^qFmtnGsCIW1t9|JrI+`=HMbn{ObtO0gDBlIeDfp9T< z4r9sC@eQa( zsWv!4oFG#CfG+-9#oXofcX66KWqn)aI3JS!+)e7}!4tB2N=?huvWg7WsB%3}l4d=3 f{8ci0qr{|A%|9Hlrj9F^B%3tM|M{la9YXpKIp5xS literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch18/Graph.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch18/Graph.class new file mode 100644 index 0000000000000000000000000000000000000000..b8955df8683e06a2d3b91cc718c2ebd74b19fac6 GIT binary patch literal 744 zcmb7B%Wl&^6g^|RF-aX#(l-h8!LvrfE$yNbfdxoBq@-O0Ws}v!9W@gYC$inD>bhUT zhIJ(>BqZ2%gTx>76ZnD(QO>w5SW;QO=RVH8_sq=q-(S7~*ueb)^0=MHH7vMTG`QrV zXmHt>J1*|JxF=B9S8=Ki>N-gU*4y=PI0yzZ>FSP-b^|%mBbg*B+EwvC>9D)D8MLy- zrvf>-(`!h!+wJyS0e2t|n)*-)2opt@Jkn}9(&=;39E9iV3%Tbpyi_KJq?;CQIjpX@x_~vjg4%I7d z_7*bY}d4+V^S@KE$HVI~CsKOvJKFkwUleaRQt?(|fcVu^2- z=fgU%%y@d1*^nV+X2@kk-jh*JJIUw=Y<|F&{~5yfKf(G6`vgwrn(!23)(LWUtzx1N zShk;4FTFA$S9wykw~s9G@#5!^pgr^1?H+TYjVW56YQSSU+*#t*1#VqoWgXL~5nnKV zgE=%X&kV50zDJnF4A~Y>^?-hfTB(q%dE!m}vv4k0v|LnJ`h~nW$ILm#NUXAK;npAB CJEQgh literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch18/Vertex.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch18/Vertex.class new file mode 100644 index 0000000000000000000000000000000000000000..a0217d57dfc679ea0df79d0e9ed2d24a4a59bd22 GIT binary patch literal 417 zcmb7AyH3ME5S(?Kgg600fHYKeNeWC51rmrRQmXKfK<>}ZDZa>$=naq^e0(USO282mI z*Mi-d$@J|y4Yhq#VZu&tmPaZHlr*+GZmL937qQo&r4{vMcyKt5*?y9dV`FPUg5luIq+C_xXTIm d+thYgf&NBKwoO(|tE)mSP-pH0M$77;`wi3~So8n@ literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/BubbleSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/BubbleSort.class new file mode 100644 index 0000000000000000000000000000000000000000..91c657947744556d58e91e2f5ba347fb8e11f59a GIT binary patch literal 1459 zcmbW0-)<9E5XQf=e{IK!mjn{P3r!nZ?4{U&hQA4+4N|2@riL*lVrV zt+>x?&3q?-M`+y+5@nFdpS(N z%V8Xs)bg!bE@x3e)y8}dmO8U=C4;N#|2wrT-_l z9S9U^VK?|`&}jzo&$78q&txrX$?Y{6hiX4^8p&qZ7r0()MV)F#_BX?3*xjhgUf7fU ze$d?r;*Z>|&8t_cD}yHQ*P}RDWVMbAy8_dt_1c#FO;)!hZ`YHUNfuKY8E-KE)Mt(b zgcQ)$R|TB=L9!XOAIMmCf+UD}!|1bsfLU5!Re8h~A4ZB$V7#8l*01+v@1TeN@3JRg zGjuf#Hj)hT5UWQV+#?Dc|fTfi-?mXFP41kbq3rDKPS{}rD}qTy%-PL_@bGUHTA z|8F32ey+|MzT}%e!EXRC!I8k>dV;$u|Aq2;FCd=L&@jo>N}W2UXy=CkIEho-WigEz zMybmWVbB6@IoUsR4c*E54a4#qrr|d%+i%zoHyJ16Hyq31-m#ULG5y-5m(cj=M+GOD zN|l|5&F?gWn=GV?PY(;=G|q50Pw!b23FLBT3cA5yzDgsaM@*xuKyS}zFBShlS-;~J zAH((Bisu@?RGwhWb7{PUv7?En`~U2S{ipkH6o{U7ex3lT=PU(tC|QwW&CxE?S0$2y znq}-5YkomXqo5w;olRAmPw{}S7#~E$wGSvO}r(-XqFf06)17lQ2qdw3K7Zx literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/InsertionSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/InsertionSort.class new file mode 100644 index 0000000000000000000000000000000000000000..81b59ca2bb9cc5988962bdc0eefe02dd13b68833 GIT binary patch literal 1466 zcmbVL-EI>{7(KJUwzEl=gg6v0G%Zk^O=E|D(uB~0RLPQIk&Gf)xtiFkWYgGdtv9W> z=PfF6!422tA|OCKK%bx&z2+ehBAi*<4G_ddW$)}a-<BYc=Xd>6(CEo?jO*ZpZCV zV6q-{!@GN(%`mwyH+Pwts>dz4yDpPR&4)=N-H!SK%k@^=sdi+4JKBu8TUFVMda~aS zyIW!MQM$E#@j|uM?T1Mk#ob1nq$?!s$fzq&EN|3z>gNMO8?%GPgpWN*|){}0&{ zunDbYU?UAXOqe~&U=3X+i9n$d?_&tW{&4xSvmc__q_gMX9^J?r~4>47oUbZFN&NhfHXgY(QSQjn4~ zM{I$d-!jtpTOeXC^Qe-E1HLEf7|eIj#5>rc_!cJrBh4qdnp5X~sJTVWs`*L3R9W*& z)EfBSso-;OW(X>hc$Sh*WJ3JGXG2mJ_)o~>P@F;8=Q6>{uW_AF5CkqO4ZMIu4Wpg( z^?`3^pTc|ztN9EzRqZ1;mET8UA7lG)GSB`!^lY$oCD!xURSEN~I@&so&W+sh8JEbb W+{r^z?!2Xh;ZB}sR-nvL!~6%YbrqQa literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/MergeSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/MergeSort.class new file mode 100644 index 0000000000000000000000000000000000000000..67335512bc26b3fba4f6b14a5275a5d2dadb3841 GIT binary patch literal 1725 zcmbVMO;a3I6g_YHYiNd<4locilc-2w=)epKffzxQBw|QGnyRs=nqp%!v`iD`!=5Hq z7G}jSF$>nZAe5%q>rY7e5A+vUmUv$Ggh5HUaM8ElyZ63x&%Nh$|MJ(5Cjf5ap@}p~ zCi*Zf%}r@;^iy=n zCy-h78{Xsn`j!`b;co5G)4$rRx_cXL;LCl-sfIPbEik)UZPrV5w_WqM{KihnZTT&? z-S!$gUU1G`t=+m=TJwS(uiOm6c^0d?enViWu(`VHK6OibE)SQ(fEe=;88_G={J>kn z0>TwYY_14cYhGAuZm+w6TlYdQ;0d+O0s>lLb4B84by-xv;C?0Y7<=AV;d&Slh6qaC z-{zsvtGDRz`Rwv}BG6Y3-RhGyw-xnkASa=}ahavH$dV-#Hz0^vZte$FZ`qfVN}sh@ zlwGBeftA8lTub3yyqCfaTr;qk!YBAtVEEsS-`n^1w!I*QCEOzk<}cxX3J>s^fn|C4 zbAg%vF>cPOTgutm^{Qll&Q*TaX8&xcxz9j07Q}Cs)@7g6#B=LZOm|x?ufbvE3o8>B zMC)*8-c;d2aQ?sYlVLN~U0|?qF_DM^5&M4cO||B z-#-ZT~a;%@{P7`#4iM%)+ z0<(mW>(^mXLW=+Fdxho?VBCuJVDOl4Nl zIXwM6hC1_W%$NS(rjDV?CX`5oN0Ci)2pM*5QNc^J{p^1L1l3d?{6KxiqN{btOl5>%xxW9N#CcFxWh z9Xo&3>5A7Mg~w>eVX{^l6A^zqK6b`G6ES2}&POs#Fy2f4BjhhHOozjDF30#J<$orY znr+56*H#vCQq|EPp#22B@{(66S3E+pzvl?%5qgi1IuKOy*RCuvy-DItvA0Q*D@F9= l-A$0P9GfI%GnV694yy-=KamiBkVxk$Ptwc30&N1tzX87vFU|k} literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/Recursion4.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/Recursion4.class new file mode 100644 index 0000000000000000000000000000000000000000..9779a625a04105c2826bc988f0a3a5fa3b26f31d GIT binary patch literal 789 zcmbVK%Wl&^6g`vJabnyiG;IpzS<1ud0t*zepok3;QmYgyg0ewEnmE&BN^D2AgTx2$ zABcSxumHq@58$JKV>c+R#0pEkGjrzLbI-l@&tKnv0O(-HMirN9xPq%TEL^j39b4w_ z#be=yg>8Y#BOU4Nu|U~t_XUh6@lXlWyE;|T~oWVdi5lM(fs|F{-t9H?v@4-aJ`LzSt7L~%q-Z?C=2Ep^47z)CNZ!J7j)U0Akz z@hl0{Q=K5A+{)X}w7)uSCEDDoZIi=%Z z4NcQc-?Ezo1YE`vF8u-AR-)Vh literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/ShellSort.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch21/ShellSort.class new file mode 100644 index 0000000000000000000000000000000000000000..9da38d3b3102da4cb237b9c9b2c98b3584b1309d GIT binary patch literal 1598 zcmbVMU2hvz5Ixts-d#Iudr6v<)^=LArFFKgP17_`@=@B*N|9V#;V8l+NZi<~c!R&R zc0hga-++e*DbMhbR(#|KApQaU6+A|PaPHb6rKxz}VQ1&g%$+%NW_Ex5>&JZnGk6$B z5;x*V;HDAU~Fv**M|sn%%~Te8>iH~jWyQFi^V z?Df3%rWd?ot~I7_6)O#|*{pPe{v3<7q~8{p$gh>Qn8$*^+1Gn~uE?s|t2p{bP)F{g-Xe%)BDJ-lLi~=|@0D-r0j;9q` z&m&FH8J?noW-yrBHbng=(?n@o*XPsjzR}!)oi-Z!7xTMEf20>O-{N6rG3)N{U?w}O zkLww|{v9s6<9dNlre4@Vf{IdKAbid0yGOr2)5Px4Z;UmX3%f_ZD9~ES+Gi)lwl)TwlWz4bqCjmP?#VDDpaZve1!fHTnoXgi6k_Jf7ZkmpQ#iIvbX|}nY-nYx9;}RobT8?46 z*ZgBdvNwc6-O=l9232m5$nuE#H(b5CeN%6Fp{bOD^i9LvY}VFwTW=VyVUr~8dnN}?kSX<@&qAi!asQ%hS?7B)`89CFyU& zD8@Ka@EXSHN?d-&wX$dK7eqdud~YS=5PFU=4U-x-0II@O z!a994)=&o-B8G|AC#+#IduKSzdeV!VW)Y2%atbqS^JJa#G>m1FPXrs z$X1qS7k$qtrzEU{fxyC%mdkUBqUIlQpRejTqU@KT;w-Z`Pvy?x1mD&i7Cp)ldZ+I| zQ5A3DBz05{bR4CQaT-qT1AQ9+l|-9EK-5lv!n@E2)RznTB$eJ_tR-SyA=Wa(uMq1x z#e2UCtF(_*_%|$G;6Nvbe>uwpBZbQO-;m1hAts8HJ1_oxjQAcB2O0ErxkZ3=X7K}7 z`iHE-+pLt2x&S8j0Y<4zk1i^8Nik%WY48hdWfC8*wzur|=z3}+;9!K~&glF(j!RPkb9tUj8 z|HUTrKVVQ2Cw0bRVn#`>3B6p11NhSv4loJ7Mfh#P*9mG7zD2mNumFdTY`g0ql4p4~ zz>L2<$fd4>B%!`M$Z)*(KJeWR^1RHyLKppl_zYU4gGl&C8vKHfdXwLHQT@lNKZq(% PgNjgMN%j{w2x0DTPoRRn literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/FirstLastLinkList.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/FirstLastLinkList.class new file mode 100644 index 0000000000000000000000000000000000000000..8f9cc76037a81b4af2fab439dde66b5ab2efa883 GIT binary patch literal 2024 zcmb7^-BS}+7{;HIWLffo0pwc*sg^=g2=ZZDL{!wa(16a+q19=pU6NH+l1*lJ!_@0u z^dIPr|3JCvh3z2D*qL6|nO^v3IMeIi(%R=e8$+aC;AG}}pZEEl=Y2PS{`>TI0JFHB zKpQ6GNFgW9l!@~R#4w%UWG2qhtW4+PxPT85_z)k-+PsO2CKeQoyN>4v3RC$)rJO5U z{+6@pxc72a)u~#(Z@c$wuW7lkH8q=Cs}${v3bB$UH(M4Q*9jICqGRJ5T)oC!g>>F= z?X_BY)Al~MHcMRT%vTClX~Xgynb#L%!ItAIEF4#TF88tU=BZ49?Y!d$BuP51Z+n5> zBEi^-fEYVgsYYG3!X;NjwXFwMVSCl8YIPc=(7tL1Tb1H1%d^UMV0(l~gwaHUp^J8j z>-EsnW8=pqJ@hFWl&cD6(ebM#>j6iFn&;UrgU9YVZc$-|z;7S6B_va5t$Oy3Q>hW% zbo?9TYCsVt;|`y)Ua5Hn(n|t*{%76feQU=`p#z;MoIpB-cBB<1->wqmet!xXWK*~# zLC&Gm#9|7UamB>d6qY3XHJnnIKW5}NWSN-~*j&kCao*g#Zx_Tr*Zz)O)6V(>Kd{Su zex=5Z?!3O^RC2dG#|_p4&$h~}my>T;rg>F4RB{=&XayEV_yM)?6N~Uicl3w`v2TSE z)7YNm><0H0`*h|BR7O2UM4IR?`a&1mPJVFQX4{T9FP`8^H&;^OHT0mDGlf3%Gn9n< zo@eFG+20VmJ^Td5T4o>^3JD9JRQ zcA**X9Od36-Y7xG7&XILwh3>vfj8Q~JKcmAN8|u~#4}{spJp=rlzd&? zXD@dKwR-jsq_g{I71jLi%fEj`d>@IUDO;fSCHk_+a=T33t4zyMlm1{szn5;k($`KH z)R%=(ymzE@Mg(AOVh_pTA0MKN1Dar{M>1I3efihKp#x#zd`gOC*5(S8KVwC%(%_q# zA}pMdMrKCpnK9^-@PvhvK=c5@({UsS+hwqAA3dEdq}7k1@eWi^q+eeP{5W42(-}|0_y)fRsZpA(D|Lj%`mX?r1iRXDsqrAaEp* z_y9f%Q9X{7NRE)Wyw_c?x?c6`{{832F90v_(uRZeDz0IpicM@;xMQP)brbGZaL?rX zCOok55Dg347McPjPo`2p9B>(`dh?ni+e$l*Zuba?E_SjTcWRN=8oF2Vi5u6r1H zYEPgNCu*dlY$!1EN{2dqO|izoc9-cbDFQdzI#h>Q&{N4r+4G6i+EHKnU72XJKL<_SAaHP8et^b+@EnhVG z&^u9m&hrw~IUS}dp!Xtq=PD)cs1{~*%jAIpg0;`5X=aSXukZti zBbP)1i4Wjw_y7dFwi5v|2e&j;^{Tq-RaN(V`}z4RfOV{=F^44!H`0h;DNdhRs|MXX zMGsGnedAs>;+7FbBT5#^7FGljk9ALnn*z~dX-^>bq~BBmSy%Ve&am51{;q6v=*hW# zPj>dCuMIwN#=^D^1U6i+-*vh&XzPaVwH!In0~rLW*HZppZm)gM*;PUKv_E7DG90=( z2x}zmO5GF47vH!C@~w0_l1b{J&s?=pQPOXbX8u26fk?9|@M!u9CfH}{q4W;7DFZLHd;AZNqD znvE*%*tm-|f!fq5Cre{Lf5!TvaiF}A{penx{LqyFL9F=P%-L${V9=587;UN!8y`oj z#nSZS-QoM;m0CJ@)*XaQ#dozYkQpc3(tZ%4fGnS{SrG^`GRk=(hgwj_%f}F(M&Sj@ z#K;-NS=#n^1M*lTO5q&NGl@C;5m8#e<`+a>A0z6nEFgA-1eG;bDWi^%;b*@(F=pN) zOLKOFKm7V`Sfenk6=W#mNRmGbi;PKJCS!sAW!6!~Ebk|a`)p-{Etu-^;|g#A7m1RL eUE&#mD?}+oewcsmY7W;3%Rfy9p%yh literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/TestFirstLastLinkList.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/ch5/TestFirstLastLinkList.class new file mode 100644 index 0000000000000000000000000000000000000000..e6baebd249df11e288078530de5426a3e132be6a GIT binary patch literal 964 zcma)4+iuf95Ivh~n;4qjQYhD!08RsOi3+MnRVr2LLuCq5t0LfO<1ERR#EEPdiGSfI zcu6IY_y9f%an^2BB=V58c4p3*^~~AP{{Hjh7l17^3RpxXkB0@MP|1=rYulhlWAtGh zSmR*bbqa9(d|NoBOX$R9-h?Ei7SK;N{dq_^-c(CwOY1Zj6Iv3!C7LcBd{lQJX;N zYLstUXUdCsC+&wSh^Nn?+lOYh#e|Dh3FO;49QNc_@@>`QC@%SiU7dEqn_JEipHUNQ zSm2{ID+OVuL|Z0u=mmXt;{xJ)oL-^L#bg>c7+c8!+{7x;ENjsTb;+}tJf~&rD6j?8e8O-r3vCBN}Ppn(2RCh-)+x1`>lR^{_`&YuHj(NEOsio=4YLWnk2y7bki>_WPv9dgsMW_we1hw0xS``ym03vOGu+fs z)Uha_&04nQ&k2OH6KevI1*d8X3>GchTxvDSrn@T3by`M>PDR$&q-&|~jxplbEKlHS zvEnrH4e8aavSn}NWz%X(&ok`})9o?)rsq#y$**#n;Z6-{*#epDz2c^PB=dF2%#!c2 zz>Gp7%4*YNE;=l}1p@Ybmn+G)!gA8xAe7V#s?k}uJYQg_U9RO@^?Z>Qq6jGrsUCZ& zB5m7r>B{so-fkYUKGzej%FG@|Imi5gk}oR{7iBXLOUDvVjz^$lnMf8*zvfg|q$?Yy zZ@NUDC^;>+VqUkD+Hob)WkudV8W}Knbe` zzQCG}+Xn7n-N0SkBNPK);wv3r8~6tI4M>y;%RohiS3v+n{}tZA18nH18L+S^F!_H^ zyszYPdDE;A|A{XCHldNOp+H%r@9>Cwv21(3*$_y#CAXY>!EUyEwv8zp)OO0eZAXLrjtTo zG0XPXR9djL>Rwr`l1FcWwkk6d1eWgVu;A3|6w7jKHc7;DTPwI&E9e5L(|u zxcCf_^(Tn#L0i1I3;i+fbBZlpdW!fi5>t`zR5Tq;M}EYpvQKNdF>N2o5N>}T6*~ui z5HtT6==wF>MzkI|sk-9Q>g0MxgM{VKBfJLxMyH zh;8P*;&}@(#>MdpGd1MMbDXk885_fE zf$c2s^XpuNS+|ID^hTJsg*Wgf=NOtePY-(pCVvDMs8Wu0rC-~3k*iCzj6?eeDIJ$} j7h|d;+mUQ;0B z?3a(^TbZv**6yf)EmpJ^;qfgICxb(>3|#{wKvH^J1zO>iE&^7yCIc2n_KVu_J543f zyQ5_F&8BRH*RYYXv0!6Npnua2{7z7HH#|LrL|6NqCQ2fXgpI`{ z9-(04aS}^dw(%s1r+CJONvvR1J8SyjfEWLNNK|xjr`MGuw@USwLfv5r3|yc}P33az z0x{+PO=p}^DRvE4RT}`W3w3gO9i~$Ze>ta=+d~#H{0X}E zFlgWgzmr`6`p{3W2Ll*n6J7iR29dx0cEJtml# zO|8xuC}2+n8xCmUv&wzvcufxBVf$=^Q!+N%Hn literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test02.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test02.class new file mode 100644 index 0000000000000000000000000000000000000000..4a6c06cde4df20e18c9ffd4a07221ad0c042f46f GIT binary patch literal 2255 zcmb7FTXR!Y6#jN@=OjHyFQgFUlA=IMOG9fdm=+KU*h<=h#UcffopiT3G&fF8DD}<^ zGyVp7VjO39)`wtqWc1Zv;FB|qJo@Skqch;QPkKpcU+ko7@3reI=2h!xk)CB|i`7D=g}4)gL3HOIJf6!qI1b6zT~<~`Vm zFuXCuI>}hURV>8N2|C&`<;u(goq7c{(8ZP;_|U+0f#z}LW{a~I7<^v2%3%PJsba;+ zsB^aNKvS)7y*hXcyRk>$=;>lQp0(Y$jHhKT*AsWM%HvO;N~Pj+Ikgy{lTKXD5iU-( zMOoIzy>#|+QJFJOEPR9;79`RZGPuEF#4XH%-domdHp)gb1q*YSXYdxXur1ugf&eV! zuwWq%d)372>PihP6i~EK!Yu=ig)&@bZlQwP78Y^G!V*3<@QH;_@tJ|oEqsA51^WO0 zbTuS6nZBtqE{ngO0>kHIt@C3nkaUY2wDqL9joUI;QIm5Td#oOMb&lAnQiYJm>LF`64%InX zk<=rsh?r!iSa5my%IDRRKy(wJt{L7Pb*mzC97Ahfxs%QrH76@MIyUWsJFSCcB%NKn zEujUqG^KdbvRW?hZc(I1e!a?`j%lyey1hYtwFk5@va&p(?hug<7)hYuF^%0=%f`>} z1P*ML#m0IxOvcnw*;VY4zo-iut!dlE#09=VF1xK{p3$^<88nI+V@WIJ_<%LkZ|(g; z2VUj7uK#=x`o5CxC70mJn}Xn>M-bn6$8pk-Ck)X{-y%-|`|ujMFkZ)gg3#D^4?%te zAda{CQh}f0zv6EVOpSL}5p3>gj#m*%bvK{%Hq8fXOHXYXsx7_VQiYM~ZZ)e2PyB?) zl}Bhw239x0o@6K%dOT?O2hFG%HNL@~SSV`tC&RHoEFAa&)-tyEarvGp9=>>T_+{nM zI^|`&;=_F;V&T@URW#qn{#Y;;*8hGFrp1q6&{{=X;6@|tBi~?1B#l^b8QTPw5fw<9 zF>@L10$*cD@3srt`WY0_ma)UPf)ovXiybe?21BuM(s=md*Y6RF8CC4mMGqiOdL7$I zO@2Vb*uuib(1cSg|0ubOcm*?P<}1~LyIjA*HatKSRkY)G?*G6}JYkQYVwW(nTkPVC zd>DI0A3DSU_K9J(O*gYd%rdbK;2^y`z_HqnHeD++wiBJ?0KZ7$5cPO%#1V8;=3^{> zqlY^`Bl-)6(aYFp@F(Y}m&5P`*Kh=V9G|EBtoPH_z#Bwrr)5olU`>C3`fu{=B+M63 z2pbqQaMYvR9P@sIf}{5g9nTTrfe`=V>@x(PqfL0KZ=Lvuz)6Ax1!LwUVu;j-;r{@P Cnho&) literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test03.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test03.class new file mode 100644 index 0000000000000000000000000000000000000000..33e421d0fc51eb615a7aee926c4e31fbb5fc5d95 GIT binary patch literal 479 zcmb7A$xZ@65Pdx`gKUDJ-o2qFjwm;b7ZXq8l0dk4su?;%lUYbl<9~TF@!$veQO4@Q zL=wH&NmuoIRj-!*_&m_6R1qyuhUTK zDTN6$y&#V$nUPi&f0I?SP=&xKi1O4=saU8`WwB2ywW6YsSuFJyZDe82hyK*M%Q5## zNo4|ugQs9g&*Ue>+KJIzVqDHbI_B#AKf(gtJ82gA{E;-J(n!sTjY+=Nk-SxQ-sYyw znXTMH6|TU=|EJ_WKchW_OBop)!Ql_I#{n+^m#xRhXD`^hC$A7MWw^%HE6ECW_}$th lppFKkI-1NlrTCPw75@@?TS9?0b~&lTm-lIxnl4)hdtXhLXTSge literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test04.class b/api-passenger/target/classes/com/mashibing/apipassenger/mashibing/test01/Test04.class new file mode 100644 index 0000000000000000000000000000000000000000..2ec916844d3b229487db71731ac7674c0b9e1358 GIT binary patch literal 970 zcmb7DT~8B16g|^!yX~@kl>&aCWkIE&uz-LcC?S~mK#G!-kQkq)?F1IP-MZas{2x4- z_$tr(P!di20Y3N#{3j-gXIc_Lh>4r*y?5?CbI+MOyI+5O`T}49_bl{cEWsGB7x#PG z0pnO2EXNGtzow(`znd0)l@Tn;1+=DB{~_=%KZ UBqo0FEIDQpfas)tvx{6j_0H4|jXhmsch3_38V7%X zKZ@{Xh?{JL7!K9dQ+f5?tLgf4bN!o$KGRl@Hhc6+(W;Ze`hFO4VPoQ;NZuc3QtHyg zb33-a(AJ~wjngQX;&tF(HOHjSIM|8JOtRt+BJt$zzQn za&2Z<=(qk)OjQ93{Y9ukU(we`bF_`1=nVR!Q$^jWaWy0BIyV3E-Mr!1gmccnJXUpI z@+)XAjie44A6W;*w<8WyoAJQJ$iCq49R?1ZWuHD?n5j|p>0X)4Nu6t{*iYCNULQ5* zT^}U2K+>>oSAS`@?*`kQUlCK;83OxJN@D%6A-s5FNjrn>>W?otON)vWEnqc?R7cSh z>L9xK>f(8jdWhG6JO$|44^m7^v`j0wMS4yz8brgeipv76wdc#WX&KdZ#7d-%TN>N( AIsgCw literal 0 HcmV?d00001 diff --git a/api-passenger/target/classes/com/mashibing/apipassenger/remote/ServiceVerificationCodeClient.class b/api-passenger/target/classes/com/mashibing/apipassenger/remote/ServiceVerificationCodeClient.class new file mode 100644 index 0000000000000000000000000000000000000000..b6c678aec4274a015a0295a352df12f00ce1b523 GIT binary patch literal 854 zcmbVK+iuf95SZ=T6-7ubR1L}tPiuSPY_WIU-E}H~_%R;% z06q$F>_8wA;wEc7dzm?N&dhxN^6?W9-J?ODuJ`GNqV-(j%eqX&@4HMC-M{tX_F?Ku zE_Ilg#MqpTjpD5?7}uqe4~n|MyaVF$(BxLf z+GFqk2mR3>`1o&J_=k?~^!6Tu+Rc;NMpMej1d|l<)LIvHG@!5O;i2<6hss0fxS@XT z{98Vkgdsg+J@J z_d(J2BKdiJ7gX&2HG^XvCnN2RMj=38W$0?3%7H16e|so?YEl`AH)E5wC2EFZzc6Cs z-BUf)igtdPDlJ@{v8%+61>NR@=0A%=mO+>S-E2TZQ^yULAs2!5fIs-tv2#X8@Y<>tFxzTUjde<41@px literal 0 HcmV?d00001 diff --git a/api-passenger/target/maven-archiver/pom.properties b/api-passenger/target/maven-archiver/pom.properties new file mode 100644 index 0000000..6d276d4 --- /dev/null +++ b/api-passenger/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Jul 27 16:09:57 CST 2023 +version=1.0-SNAPSHOT +groupId=com.mashibing +artifactId=api-passenger diff --git a/api-passenger/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/api-passenger/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/api-passenger/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/api-passenger/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/api-passenger/target/test-classes/test/Test01.class b/api-passenger/target/test-classes/test/Test01.class new file mode 100644 index 0000000000000000000000000000000000000000..57aeac46d455f3c1ae76749766cb5683ff830b99 GIT binary patch literal 2669 zcmaJ@-%}G;6#kaoWRtMKf<#dWQnd;j4EUp{RY1gF*kCLunxeu&R#+MmX4%;Bx&9Z< zbf(%FU;0q{fVOpp875?y z)NxhEH3jigZpHP76sX-jQwp@vYROU1ly@u6<=XO`<6X7q%G_zmSLf~WlENxam8~+)S?6p6~i@wX$wNr^&K&$3Ii8RZ0p{ zp1ZL4<|Ve`-mMalCI-Y6e3J-OkFV;o%L8%Y(0@q5&WT#ZcbA)KVkRj&8s)%_5B{&A|h^zWdwPgY};uhwXoO#mS zv^9BemGxmpt2KT|hg98a-xbjV**f;JWXxV!aim5a-D5o;OoxJl-CI7M{6G7IUkx*= zptXCeAtP@K(7z3cINukCvJHvVe7D>;;(7Kx)_=Q{b}K51Fpzwia_s0H-D>fs#w1^M zDhvK%aNj5qqvVvS_t8b$8}acGuWXuEA4r11u!Cb8-}*Q!oMYBgC{MVk!%mLzU{l8~ zu8q(D?dafJLW)Z(IeZTqSAeCSYPViI#J(R<_Y2hGQ)pIuZVj=P_!{&zB-W6;uPBdS z{~;07AVLez0x9~d$6n4oXb7Thr^h-Rz;1K}aVo?gXo6XOqA?N&#wV0B~)8^pq}CXJdIv;~dW7KF9JV^J_VSO?HVFkN)75okA8 zY7o0Y4Px(RtOEfCia)~e4^86SD>C{}`+(M=l?GyIEggG=;c#lU(poO_h)L0yl)u+E zW4X+C+>E`BHXpwJotEj?Go&8B{*}uPuF~4~bRH)0FpC3LQ)4}Kmc(Fch0h)qtDA*7 z#!?Lu^I3u|FilfTl$3NR1h~$&h%BuX0gYa+gzYsPc6ATU(nq=Ojxvy?m0=3!fcnZ&UFHv>jXL@0u3zip@4uWM}-o9A4Ua-nYvKT_lZ!{eAY}o zPZd>DFBG+Sp%{x5ig7bhDC%0Fm@t!tq8aC#sq?#;Flk{X%~Tz0c6J2J>Aa!HR$PCPgNQw7lfRyUqqLh%Ig)retD~XCI9P7pNR9><^t`23Sk+k$$ zncU5sHe0x_$_?4TqYY(xX^`&C^k#Cslus_Q`O9MVhcXY)mW>XVrVI2!54=u)W`AIy z@X`!WO~5&7>pWY)1vY_;1b>0BFHuDkggePfP0->R|HYZYEza|}v3_w3Dp9(VN?o=^ zt4q9i;U4Kks*GVaNC1C&F^%IvDnyGJ#CdUaoZugOS?f#GbK3C|8mG3+olT)$-l+2d z9UnV6w$&}dCgE#IIqE3;Nw!?sP|HZIs6woQ;)0=L=gX4pe! uNy%n2o8y%z;S^~|rwC;_7*#hxK@L#BO3(okP+sD&PTRLdJIHf&82S%pzQ+0h literal 0 HcmV?d00001 diff --git a/api-passenger/target/test-classes/test/test02.class b/api-passenger/target/test-classes/test/test02.class new file mode 100644 index 0000000000000000000000000000000000000000..300a746d8f146cac7008c96fd4a6f7ea678d7f2d GIT binary patch literal 3943 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 + \ No newline at end of file diff --git a/internal-common/pom.xml b/internal-common/pom.xml new file mode 100644 index 0000000..cb9f322 --- /dev/null +++ b/internal-common/pom.xml @@ -0,0 +1,15 @@ + + + + online-taxi-public + com.mashibing + 1.0-SNAPSHOT + + 4.0.0 + + internal-common + + + \ No newline at end of file diff --git a/internal-common/src/main/java/com/mashibing/internal/common/constant/CommonStatusEnum.java b/internal-common/src/main/java/com/mashibing/internal/common/constant/CommonStatusEnum.java new file mode 100644 index 0000000..e75637c --- /dev/null +++ b/internal-common/src/main/java/com/mashibing/internal/common/constant/CommonStatusEnum.java @@ -0,0 +1,30 @@ +package com.mashibing.internal.common.constant; + +import lombok.Getter; + +public enum CommonStatusEnum { + /** + * 验证码错误提示:1000-1099 + */ + VERIFICATION_CODE_ERROR(1099,"验证码不正确"), + /** + * 成功 + */ + SUCCESS(1,"success"), + + /** + * 失败 + */ + FAIL(0,"fail"); + + @Getter + private int code; + @Getter + private String value; + + + CommonStatusEnum(int code, String value) { + this.code = code; + this.value = value; + } +} diff --git a/internal-common/src/main/java/com/mashibing/internal/common/dto/ResponseResult.java b/internal-common/src/main/java/com/mashibing/internal/common/dto/ResponseResult.java new file mode 100644 index 0000000..1718541 --- /dev/null +++ b/internal-common/src/main/java/com/mashibing/internal/common/dto/ResponseResult.java @@ -0,0 +1,64 @@ +package com.mashibing.internal.common.dto; + +import com.mashibing.internal.common.constant.CommonStatusEnum; +import lombok.Data; +import lombok.experimental.Accessors; + +@Data +@Accessors(chain = true) +public class ResponseResult { + + private int code; + private String message; + private T data; + + /** + * 成功响应的方法 + * @param + * @return + */ + public static ResponseResult success(){ + return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode()).setMessage(CommonStatusEnum.SUCCESS.getValue()); + } + /** + * 成功响应的方法 + * @param data + * @param + * @return + */ + public static ResponseResult success(T data){ + + return new ResponseResult().setCode(CommonStatusEnum.SUCCESS.getCode()).setMessage(CommonStatusEnum.SUCCESS.getValue()).setData(data); + } + + /** + * 失败:统一的失败 + * @param data + * @param + * @return + */ + public static ResponseResult fail(T data){ + return new ResponseResult().setData(data); + } + + /** + * 失败,自定义失败,错误码和提示信息 + * @param code + * @param message + * @return + */ + public static ResponseResult fail(int code,String message){ + return new ResponseResult().setCode(code).setMessage(message); + } + + /** + * 失败:自定义失败 错误码和提示信息 + * @param code + * @param message + * @param data + * @return + */ + public static ResponseResult fail(int code,String message,String data){ + return new ResponseResult().setCode(code).setMessage(message).setData(data); + } +} diff --git a/internal-common/src/main/java/com/mashibing/internal/common/request/VerificationCodeDTO.java b/internal-common/src/main/java/com/mashibing/internal/common/request/VerificationCodeDTO.java new file mode 100644 index 0000000..3d0c674 --- /dev/null +++ b/internal-common/src/main/java/com/mashibing/internal/common/request/VerificationCodeDTO.java @@ -0,0 +1,13 @@ +package com.mashibing.internal.common.request; + +import lombok.Data; + +@Data +public class VerificationCodeDTO { + + private String passengerPhone; + + private String verificationCode; + + +} diff --git a/internal-common/src/main/java/com/mashibing/internal/common/response/NumberCodeResponse.java b/internal-common/src/main/java/com/mashibing/internal/common/response/NumberCodeResponse.java new file mode 100644 index 0000000..4ac8f51 --- /dev/null +++ b/internal-common/src/main/java/com/mashibing/internal/common/response/NumberCodeResponse.java @@ -0,0 +1,8 @@ +package com.mashibing.internal.common.response; + +import lombok.Data; + +@Data +public class NumberCodeResponse { + private int numberCode; +} diff --git a/internal-common/src/main/java/com/mashibing/internal/common/response/TokenResponse.java b/internal-common/src/main/java/com/mashibing/internal/common/response/TokenResponse.java new file mode 100644 index 0000000..cfd6dd2 --- /dev/null +++ b/internal-common/src/main/java/com/mashibing/internal/common/response/TokenResponse.java @@ -0,0 +1,8 @@ +package com.mashibing.internal.common.response; + +import lombok.Data; + +@Data +public class TokenResponse { + private String token; +} diff --git a/internal-common/src/main/java/com/mashibing/internal/common/util/JwtUtils.java b/internal-common/src/main/java/com/mashibing/internal/common/util/JwtUtils.java new file mode 100644 index 0000000..44f5d63 --- /dev/null +++ b/internal-common/src/main/java/com/mashibing/internal/common/util/JwtUtils.java @@ -0,0 +1,43 @@ +package com.mashibing.internal.common.util; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTCreator; +import com.auth0.jwt.algorithms.Algorithm; + +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +public class JwtUtils { + //盐 + private static final String SIGN = "CPFmsb!@#$$"; + + //生成token + public static String generatorToken(Map map){ + //token过期时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DATE,1); + Date date = calendar.getTime(); + + JWTCreator.Builder builder = JWT.create(); + map.forEach((k,v)->{ + builder.withClaim(k,v); + }); + //整合过期时间 + builder.withExpiresAt(date); + + String sign = builder.sign(Algorithm.HMAC256(SIGN)); + return sign; + } + + //解析token + + public static void main(String[] args) { + Map map = new HashMap<>(); + map.put("name","zhangsan"); + map.put("age","18"); + String s = generatorToken(map); + System.out.println("生成的token:"+s); + } +} diff --git a/internal-common/target/classes/com/mashibing/internal/common/constant/CommonStatusEnum.class b/internal-common/target/classes/com/mashibing/internal/common/constant/CommonStatusEnum.class new file mode 100644 index 0000000000000000000000000000000000000000..345d652e37d35b6a2c5d6e4991f5169178319216 GIT binary patch literal 1709 zcmbtUZExFD6n<`ECr;+Bt=FaNSfMK&BpECWI>y#eTCx;Ovjx>#qza_Tb-mV;k*N(ji1lnhQ2V(Fi5YN4iM7EVLt0mua&-FRyInO!g`uBf+{tdt))(g;Z zzKFMQA&=QSE*5bFOLD2pFK^3b*}#;6cZ%GuNPX2n$-ujE+b}R~;F8=n^H>v@?ld>- zHM_BT)ox$8-e_NHUT#}UxhR_zvr*W305ge{=oa>D`lR_msF%dLejV>?No5Ylm> zv)a1Wq~pbp4uGFi7_mUTTscS_t)bE$Zv~NmWzgO7`&Zqqkjdv2K>LQkZ)wHK=#e_D+>6PlMBB3yrN37)Z)StO_%bcI0(;M_Xe=U$rI{M^fo{6t^g&IRFVnuOGffkl2n0-$ z2WkQ*x#rY2o%Zv1k@4nuwn!;Gik4P=0R15}X`gw_et{=uYK2o08!z$I1x|e`O<7-L zRj`jKb$+s{r%&8Rt~z@c`Ra^z7sih~O@mq_3U({UK!-?Sk|ZR+9DV7DiXtm_l5Tn? z32O>;QbTnDIL-H%3In`CnZc{f?+j{O=cr35DD~=3$bX{@PI65PFs1NPLi!L-;5D4x z$JuzY8l`=l4ZMywhR&Z5L_V!wplw=(?4-7C74PHF9hmB5Ow+8xN*`DHgr2n~m2TyJ urAu}Xrn9N-Vcgl&_h319AY}2<4yMH`usCDvp+#Js+|vpy;vDTVc=KOky?#aj literal 0 HcmV?d00001 diff --git a/internal-common/target/classes/com/mashibing/internal/common/dto/ResponseResult.class b/internal-common/target/classes/com/mashibing/internal/common/dto/ResponseResult.class new file mode 100644 index 0000000000000000000000000000000000000000..e2c6db973c047df774c770ece99a6604cf04ce35 GIT binary patch literal 4259 zcmb_eTUQfT6#h;!lY}rxh=8JqP_+#Nj2EnxTU!AY1hoXQ+SWRR2+>?Hnb_L<@90b4 z>WdF;m&Uc~T3zjnU8}#S54HB&Gm{&F#k4LwXP>?I?7h#oFDHNe{qrvXhVhLb9|fUs zy$K)VMv#js$7P`sLaoS>3}T!C2}iC1vR7K&m;>4bCsv?+%5C28B3el)mYrhr?RV~)Lbzw zvtD*_`BpMvQPvbst!7QDnCHjd#YJ-bg<>K>dkVvm{<%ah6U&%|wbU|g#Zp--na`T( z7}=RzHnw8rVhhQ_dM;Z?axbREq&8^>);gEUCNC5-%gOwrxtyl`*|Eiun)uupCK~f{ zCi0@GhQbZc>>5KlqCn7Tq;Xl&IcjdbU3pIDCEBgOZ z66b5Xr(r|o82yaV!E!9pP}P?W`I2{vW|{@mQ5&C|lKyL)b~yz-XRRgk3Wn6$!OG}s zvDwvglPz{eU(k^`hZC<}X9H4YEpf|C+@3er?HR#0z#hYagqfX|s1*Wh9F$HS>X#N~ z=BE{Wd3!2SRt-!)=)@7Qat`tek8kk1ZKo9mC=tZA_*Koi<9On#-h{{=^#xQPR z5vLS(ZS1$x#Z-Dla@JlSa75lPe)R>ul;tb7?qIK*(Q)?mV6Q-BD}2r5_ZzqhW+GIz z@8F_v^5u6<@P)F>tQDKIA1-FnDi)@*#SERqFHcTR$Kwj8{-rRsG{TSq94AX=y2zyX z%=PtTc12;RwumcDR*l_Zx!BM~x6FyH#dYS&J+Y-e`uMYAAAhfS;gQ6V@<{INo#~_W zpiLh_2u*k$Z%`f~=NNbSx917e)yMGs1aApi3A#=AO7Q z$7uSIL~VNfHK^%0fj23yq9&Y^-FPM9X;DZh3nzw0=LuM0m%^Qoy*rqv7Di`1C zWgo)WXs%^j=A15?V0;{z1WPcSr+KLh|G?fy2o7vC?4anBgWpAw%685;Hu#~_03s7S z-E!|?#W>z1Y>wp@yhR_OdE4G(7`((=Z^hdb)j0oMZ&xaJqc>yQ-kgymcdOo8?k4w^ zUUS;OZtC(a&ydNN#YvUw;qIq;F*@))bnQX(H>hu+dmlu9g_<8^kGI%I5K9kQtc-we~H$M(>Ig+gb41*nhQ! zSZ-&kGI)6(s)bl?Y_||+=|jm=&sEC(PkPX~PlZOuwDIoH=$a(q#<-2X9Ep7(6ul4s zPzhn1-!`I&pi6Tl0m%qO-J2sl?AUja_HsyF=99+Xf^51aQXWpXBe=q_y$pL7-Y2Ei zTwuyYRj{0e_MCuf#8N532c@3#v+CI+j1K5!g|d!T&!QS5;13cPg>^k8iOX%KwLO4@k*u8Z%9m0{`@wnsQ8a}X3AN~V- Ceq!1H literal 0 HcmV?d00001 diff --git a/internal-common/target/classes/com/mashibing/internal/common/request/VerificationCodeDTO.class b/internal-common/target/classes/com/mashibing/internal/common/request/VerificationCodeDTO.class new file mode 100644 index 0000000000000000000000000000000000000000..72fad15c65ae3b205b1c6cc6614e9a2172bb7920 GIT binary patch literal 2084 zcmbVNU31%15IxtHY}r*3+lieRQW|JV{SntdTOf84piTNk+-90iX5b0M5wVIb1zGNo z;RleHJirXNGcd!zOPS#}@H2R%E$2!~ie*1AOfvWG-QBx;_UvByj~74v0^l09)5xNc zf`X=8){Xz^!uiLXu3Nc z$2J9W+mDSWM!jp;hxJ|0wd}*DK<0_*T3=di!?PUwrgK2Q#F}MW-iAQDRNfO%0`1JU zWt;a0y?xVtWbAkScuw2s?isEn&!JNBI#yqxx!rbp^`6o1So=&=w`|XJZKGSKy64z+ z*Zg{5_PzREB>U#02LzQpG`*b&`nghh68>4bMuRXwe>_0GG=5*!muZ<^$2r(BT%%_a zCDG6F`gqU;F&kZ)MzFR%N^+K?eVOyEW9q!`Jl>u{ z;684c+Vza~S1senZv{uk9|Nsz*jo~~fYxC@f^M?491(Tr;oa62fm2SnW`EH21ZKvN zWS7U2X`U0zkU)CZ8MtlpmL-Q`A<7#&dPUBijywuFa+uXIhgpHu|2-i(>R8sXi1Ruw zO6d(Ly@PiJ=A$EiV_Rf{)pIQ+y(l` zN&?(cl0*nn!*cnakm2F2$syzaHKgS9EaaRYl7kbX{EK^%**ewAw@{Un>TgiKff_%l z{tBhFQW-+^j}#L3SGY8k+V415RGuMw482xVhDe@zXbqJvS|d?ZrBC7+a>tk|s>Q^q zlXAjbaYXxfC%|yVLkE}eHbLjHi_7e3jCeOuqArdKHc+Od;5K=xP*TyNPnA*vD~!K{ zR8spJ(@E5xqmaZE{%hhn76LJKM#d$Qp~&|XlCjE^vLUKuK_ZQfAq_gFo*`9M@eFAyQvRz1C2qp{RrwO%hAf;$*_E z1yMs7alXy>aFsb#T<0(8Rc1}|n{b`b;`~a?<9$ksPtH9kFR4&Sju0dSLcFBYt8+{$ z@=#A5PJNV772TMR--NKzhs-HhY3XOAKYNOEIemyJSunTUbRcU|p5Zb?CiosMTqdjn)&pY6yr8fzXO+na(4DU@E;Upm;mOMbk2#x<{Ys z@9Hg6_Wq*c)XcU(p;)mS`G(%EnPt=3%bS*Cv@E@z=W@fg@-3s?w5_(0 z_a;h+ZGWjC5Zg1H-iAwrykhOst4eA^@{5-Yr)F2T^p@T*h(h#`@w%heS&XHM`}!L_ zU)RZDv%GIqoI?5qW!jQ{-eLP){>VO~j<<1{&p5_6E)bA*unM!LJB$f-d1k?^W{w~}u?XM-W5`>? zC~M8H$1u*0R$!9x^ySY89GtlvKKJqzE)qgsUSQ>cl9=&FzGV(_E0@iDfT|p1e*C8{`4SiyY9NE^4H#A6(ACyC8PW= p>uwJuzajMe2;oHJ5Cd}lA)<*v)`!qO^4z~3O47#>NV}&pe*u2c{6GKz literal 0 HcmV?d00001 diff --git a/internal-common/target/classes/com/mashibing/internal/common/response/TokenResponse.class b/internal-common/target/classes/com/mashibing/internal/common/response/TokenResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..3beb1f4b0e7ce6a038ae8315bde1e7beb66ea655 GIT binary patch literal 1514 zcmbVLTTjzq7=FI4UCXFACI`VOBB(ns<^fL()JQZTVMxS~=#|}QSaoZ0>--&F`vdfb z3rut-ni##&#NXuU`PzyOc4e}>r+)9@dER&5e!l+*U=BAE7{K{H#Bf2!#RT=76qjW9 zvJ_WzTus2hc>~v^o;OgEdO^pcfaZHoY*!$)^4NN273-F}Rb2O*j=NP7h%Y#<<6jqu zWwILr>XNr<3mjf?Tzj?MsMyW>R;A8JYQ?Ks^$n}(NIwdye$8nKTwbYqjbg)U)tm~e z79H2Oo32$aGTiXoV$*JIdv41v-j{>ii##?rwroF$2@GYjy~Z8Yr&g%rx%^uw zy<3ljFA%ntV@V7GY36DCQw0ubk4o-RYy7m7&%K1E?&Los_5xaLC;tht@=UG+HE?NY zt1}eyYT+yT$J8$vdV`83SL$b>lk*be#Ty5gljvGxmT?5Qr)-DFSkhH6=HiL?A~wxRsC^ZEqBf1ISS# zY9<3}c#I55wx6?vNTtpu}2Ph7S=G1 z8CnVw1Xu`QOR!T=evu88V1*!12=R-I{Ph(fua37KO?QVS1QXLAU_5w-zEq-vemNvn Y%B1Mv(Ej_<{<*JoG@9T&OR~=W26bNxV*mgE literal 0 HcmV?d00001 diff --git a/internal-common/target/classes/com/mashibing/internal/common/util/JwtUtils.class b/internal-common/target/classes/com/mashibing/internal/common/util/JwtUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..2076d7263362d84be82d03eeaaf2dfe63e529af3 GIT binary patch literal 3279 zcmb7G`BxKH6#j+;CWJv^5Ep8x3RV^|xRxrVYFvN<+JaDPw?{IB(PSo_OhE14+Scy2 zwVPe6|3Q~?5cQn?0X_XY>VMJG@68Nm0&(dNGjHB~_r80-@7{Oc{Ppk6KLPB*wJ2I} zG>Q-gR1C^-NWPwmVi+TFs*KfP94DgKfe96p5j-2kNjxX#r&K&2#R?pa;DrcYlzJ~k z@NxtqiYTUPkwRL99>p4|GA+l9e9c5*;I!P~jEby+@YvwdQ3dhg(_&U6vck+H#vI!) zGy4?OCoQw!2-BGm*`ltXrq3`9r(Z#+y<>u=Nh?ih!?0oMqs82mZjXzpEG6+_DD~rsySMn2v6nBAcK%XPJqjV`LLUbIu8l1;(%0V#n<&r*O-7i^ib6prz)dbdQFLZ{5~t^!#L(n;($*z_Hs3@# zDHs`Uvbvn8bNNNGb_cu@W1lw-W@ovipZmr}bZ5p&9~ZXB=_Ho%)Q-`WaEdlT4KCsC z0r#!Qa5yIn38DSe@=)CB5O#*{8!Id;P`I)tD{@n5(N><|wjMW3StR%5aJkdv5*dba zhR>{m=$KWsQ~D7@7HIuqfo+rZpfehx0MKs^K-fuHp?1Z{jTtZ{r;WUH_x*71Sk8cdqx*2XC;S3I<26(eQ;1_QKiwiAtA=g4E&S1a+zB; ztCT!-v}mKnvh}4$GKz2Tt%5E70dcAEaP14!l`rX-kUjRhCF*|L45<4O37|%#QhMG| zkZiwyFhNSDi)P9(*ccBQvKtq3x=nWKOEuu;U!At>!y+}q_7gnfm5gOH^>c?@`bjBzKXUC2UmMgLr9r ze_waG3GziEEc1Q$#0HY*E0tCH*tvqE=UAMU+_TBkHmt;PUYHIM=_1EqYeYWJJBD{% zMZl$l<8e^B6(Wx1iFi3JmU-Zia_dIdxZEQt&P)GUcH^c>9+~i3nQ&fF27@1{pcBA- zm&8=O#@3c6rKF?cdkt6clZFF0$U-S$Hq2Qzmc+2z``J9jv`F!8Jjces8*6c<;wpI@ zwyZNncDKKS5&Ii>eRn{Z>8xI8^E87;)rS!PR%STPyEdr);ESHid)o#tOn+y#w(OX} z{|FVoDA>G=kV<$IwA@<{8`+0i_@Aht8INEC$Bmp-p$=hw^IGG(jgkaMg=2N+btu2N zDx3MPafKQl<+tW3U<=wgtCbf9e?_J79~`SW?p#3Ca91Qek8syKsz(-3GuqjG6Dn{6 zkt%d=ok#6tcf4)^+C1v_hS!CErCA8l)h0yvZe(1m7;_UE_%GUswTyZ_*IUrTFB!%z z&lS3`m9sD-@5VNU*1%8_)T*M@25iS}?%Ts>4`*RKMqLlUPFnVI_Bfwv-ntz2@~Of; zV(P;a{F0ci(KN*IiCb84@;ZMMyW+9<${UD>FxeGvjIZ)P7tl2FJ67Mq8fvYLubW3R zQ8v%xp?R#AM0)6&NhOFQLJW7qV_ u?Xeh=G2jrN5DrsVg(J)a5a-tp literal 0 HcmV?d00001 diff --git a/online-taxi-public.iml b/online-taxi-public.iml new file mode 100644 index 0000000..78b2cc5 --- /dev/null +++ b/online-taxi-public.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..66a6c52 --- /dev/null +++ b/pom.xml @@ -0,0 +1,97 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.4.13 + + + + com.mashibing + online-taxi-public + 1.0-SNAPSHOT + + + api-passenger + internal-common + service-passenger-user + + + pom + + + 8 + 8 + + + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + + + org.projectlombok + lombok + 1.18.24 + + + + + com.auth0 + java-jwt + 3.14.0 + + + + + junit + junit + 4.12 + test + + + + com.mashibing + internal-common + 1.0-SNAPSHOT + + + + com.auth0 + java-jwt + 3.14.0 + + + + + + + + + com.alibaba.cloud + spring-cloud-alibaba-dependencies + 2021.1 + pom + import + + + + org.springframework.cloud + spring-cloud-dependencies + 2020.0.1 + pom + import + + + + + + \ No newline at end of file diff --git a/service-passenger-user/pom.xml b/service-passenger-user/pom.xml new file mode 100644 index 0000000..4d919bb --- /dev/null +++ b/service-passenger-user/pom.xml @@ -0,0 +1,40 @@ + + + + online-taxi-public + com.mashibing + 1.0-SNAPSHOT + + 4.0.0 + + service-passenger-user + + + + + org.springframework.boot + spring-boot-starter-web + + + + + + com.baomidou + mybatis-plus-boot-starter + 3.4.3.1 + + + + mysql + mysql-connector-java + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + \ No newline at end of file diff --git a/service-passenger-user/service-passenger-user.iml b/service-passenger-user/service-passenger-user.iml new file mode 100644 index 0000000..78b2cc5 --- /dev/null +++ b/service-passenger-user/service-passenger-user.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/ServicePassengerUserApplication.java b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/ServicePassengerUserApplication.java new file mode 100644 index 0000000..cd0d7a2 --- /dev/null +++ b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/ServicePassengerUserApplication.java @@ -0,0 +1,15 @@ +package com.mashibing.servicepassengeruser; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +@MapperScan("com.mashibing.servicepassengeruser.mapper") +public class ServicePassengerUserApplication { + public static void main(String[] args){ + SpringApplication.run(ServicePassengerUserApplication.class); + } +} diff --git a/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/TestController.java b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/TestController.java new file mode 100644 index 0000000..978495e --- /dev/null +++ b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/TestController.java @@ -0,0 +1,12 @@ +package com.mashibing.servicepassengeruser.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestController { + @RequestMapping("/test") + public String test(){ + return "service-passenger-user"; + } +} diff --git a/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/UserController.java b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/UserController.java new file mode 100644 index 0000000..e04cff3 --- /dev/null +++ b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/controller/UserController.java @@ -0,0 +1,24 @@ +package com.mashibing.servicepassengeruser.controller; + +import com.mashibing.internal.common.dto.ResponseResult; +import com.mashibing.internal.common.request.VerificationCodeDTO; +import com.mashibing.servicepassengeruser.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class UserController { + + @Autowired + private UserService userService; + + @PostMapping("/user") + public ResponseResult loginOrRegister(@RequestBody VerificationCodeDTO verificationCodeDTO){ + + String passengerPhone = verificationCodeDTO.getPassengerPhone(); + System.out.println("手机号:"+ passengerPhone); + return userService.loginOrRegister(passengerPhone); + } +} diff --git a/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/dto/PassengerUser.java b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/dto/PassengerUser.java new file mode 100644 index 0000000..7932644 --- /dev/null +++ b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/dto/PassengerUser.java @@ -0,0 +1,22 @@ +package com.mashibing.servicepassengeruser.dto; + +import lombok.Data; + +import java.time.LocalDateTime; +@Data +public class PassengerUser { + + private Long id; + + private LocalDateTime gmtCreate; + + private LocalDateTime gmtModified; + + private String passengerPhone; + + private String passengerName; + + private byte passengerGender; + + private byte state; +} diff --git a/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/mapper/PassengerUserMapper.java b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/mapper/PassengerUserMapper.java new file mode 100644 index 0000000..73702b7 --- /dev/null +++ b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/mapper/PassengerUserMapper.java @@ -0,0 +1,9 @@ +package com.mashibing.servicepassengeruser.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mashibing.servicepassengeruser.dto.PassengerUser; +import org.springframework.stereotype.Repository; + +@Repository +public interface PassengerUserMapper extends BaseMapper { +} diff --git a/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/service/UserService.java b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/service/UserService.java new file mode 100644 index 0000000..a2d669f --- /dev/null +++ b/service-passenger-user/src/main/java/com/mashibing/servicepassengeruser/service/UserService.java @@ -0,0 +1,53 @@ +package com.mashibing.servicepassengeruser.service; + +import com.mashibing.internal.common.dto.ResponseResult; +import com.mashibing.servicepassengeruser.dto.PassengerUser; +import com.mashibing.servicepassengeruser.mapper.PassengerUserMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class UserService { + + @Autowired + private PassengerUserMapper passengerUserMapper; + + public ResponseResult loginOrRegister(String passengerPhone){ + System.out.println("user service被调用"+passengerPhone); + //根据手机号查询用户信息 + + Map map = new HashMap<>(); + map.put("passenger_phone",passengerPhone); + List passengerUsers = passengerUserMapper.selectByMap(map); + System.out.println(passengerUsers.size() == 0 ? "无记录":passengerUsers.get(0).getPassengerName()); + + + //判断用户信息是否存在 + if(passengerUsers.size()==0){ + + //如果不存在,插入用户信息 + PassengerUser passengerUser= new PassengerUser(); + passengerUser.setPassengerName("张三"); + passengerUser.setPassengerGender((byte)0); + passengerUser.setPassengerPhone(passengerPhone); + passengerUser.setState((byte)0); + + LocalDateTime now = LocalDateTime.now(); + passengerUser.setGmtCreate(now); + passengerUser.setGmtModified(now); + + passengerUserMapper.insert(passengerUser); + + } + + //如果不存在,插入用户信息 + + + return ResponseResult.success(); + } +} diff --git a/service-passenger-user/src/main/resources/application.yml b/service-passenger-user/src/main/resources/application.yml new file mode 100644 index 0000000..c2e5593 --- /dev/null +++ b/service-passenger-user/src/main/resources/application.yml @@ -0,0 +1,17 @@ +server: + port: 8083 + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/service-passenger-user?characterEncoding=utf-8 + username: root + password: root + + cloud: + nacos: + discovery: + server-addr: 127.0.0.1:8848 + + application: + name: service-passenger-user \ No newline at end of file diff --git a/service-passenger-user/target/classes/application.yml b/service-passenger-user/target/classes/application.yml new file mode 100644 index 0000000..c2e5593 --- /dev/null +++ b/service-passenger-user/target/classes/application.yml @@ -0,0 +1,17 @@ +server: + port: 8083 + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/service-passenger-user?characterEncoding=utf-8 + username: root + password: root + + cloud: + nacos: + discovery: + server-addr: 127.0.0.1:8848 + + application: + name: service-passenger-user \ No newline at end of file diff --git a/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/ServicePassengerUserApplication.class b/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/ServicePassengerUserApplication.class new file mode 100644 index 0000000000000000000000000000000000000000..bc5ca67101ab99722b999431b2c7793b76d4c478 GIT binary patch literal 1024 zcmbtTOK%e~5dJo=rJF!Y3Wf519g-g63l|hrsY&6KLPa1w^yJ;RiOa4XdA))DEKVRK z_yPPV#CVgoDFks~rS;e|<8NlZ8UOhC^*ey4cpRXNTRv|4xD((m?)kXyq4HcRX}3KT z8_j`-QdbX!ht-}`;#HP}!o1~SOqzO6M?4;IBi(tfEZMP4J?!=(ov?(bV;M>{VyQ4w z8Hou`Q=vw}WTasInR5SB`Hqx3lSwQiZlzXjik)z&JZv-$d&hjrSukuPSPEs?P^OWd z3Uk6A9QRiKVR^BsmEwt#qCZ<7auYJwBNT(~r2Lv^?c;M%6c|L9Md}wTSvZ z8boGyv4#qK51s$-DD~v`Hu`u_!$Ul}V0s-Mi^x)8e`R;Z=K_~BttO*U2^$NO(v4}f z+DnF`xtw;btoUeIciuL~_Cg3!J9C@TEzrAhUjg)7;M01EPK=~Svb^;f-lyEWLTe>g zRuRy?HgiCgcEAcQ;|hVe%g=H!pjs~!zoGaArGs;bfQ%sLfZWevs#wJu>95jXrWZ=0 ZfO@{J;~L2g6mdP5zzvFg^AKK&&0o^LCCLB) literal 0 HcmV?d00001 diff --git a/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/controller/TestController.class b/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/controller/TestController.class new file mode 100644 index 0000000000000000000000000000000000000000..beb43fd018f55df44f8fbdc5a43381ed5df55f3f GIT binary patch literal 670 zcmbtR%TDAl5G>CVhWGGVj@$rg@P)%li;z}GoB~LI=EBJd1`LTkIL`1}yC)+=hMJ#2K)!0Hs%+E{Pnhd^uJSQ8Ee>Ra1=fySY`(gF*K zvHGMcQtdBPnlsZ)T&D8A@+QXPWFy>~Qs5xTTppnE!4$f0N<;16*1DjAahB3Q z6Xz*7h|p`V3jOH(y?oTEuYMCR-8o>ErGT1WqOm-^x|y<_P=vLfyIxjou+p>3)n=RKRP}&a7DCe+l(Z= zpl|LxLHvC$PtnFQ2$-gw9Rbk63?spKj!h!D$0*|J-P#|z8a}9<|ETpbb)J}c5*GL_ TUP6>uBB%S#TxMk?y8^rcV`Qt* literal 0 HcmV?d00001 diff --git a/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/controller/UserController.class b/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/controller/UserController.class new file mode 100644 index 0000000000000000000000000000000000000000..19a80f45ea3ab713d6fbb6853c2909a8254fa983 GIT binary patch literal 1755 zcmb7E+fp1w82)-;8Q4r90b-2D9Mml2(4G<#K@^BwLD+&wmE~3MZnJcpnO5+KENs{a*4FgD-TnXH_n-Rz^PeYw0Qe9~6`V!2f+8VLrS!|Y6}*S{M-bwJ3Qg_=xEtUjfirog({-J0n}!y+x7@I?j8(Q} z>LzJP-ua8R$}*j_bn2C#9m+2bEoTHSt>uX`vEDG5sYiM~Nvu=O*d+6?HYHd)CFW+T zV!dP2uVr1UB$Jz};cU7qRo6hy=g#h!R5uAbG;0#$<^%?+QyT(E})pRl_DOwNb6&ht%;{9X zR-eN(3C|N1NhUD1iA?o3xz3#2(5cxpjUp4?_Xm$wXQocDZ8|I0bk=6>G-Vz+`Y^G5 z97$m21gQUVLtwO9*xHs&iYz`>+e$`?wO@C>Tx34CqTQBl)|9Utqhv4^~ImN-Eac;dlCOfy9%6d zX;*tT0uDN5vO2YV$a2^#N6vQnRAN3{o0I=SN84CgV_P{IXce zzW$WwxErE8Pg$a5mvNosPErcW^7KB$&&Blxu3j00d8t?n1zg0-+;Jr16;6I{9Akh# z;QEa{lvaMhz;77*av$aKp*;jQ`R!qN4CQ;_@4U%}8%N?i# z8iL|gyhge*uHtoSmGCCD%7Vuz0vhGzWqwz_g2|UaK4BC6DU4;^JP44|7LcCvj8NQu(p6M@QYu#d_VV%zL$& zg=&SSxrpaOjapgx?g~-U#U+Az!u=cj93 z;6jxmOjsrg)j7*WMM2t_AtuhD>X6QzRoB<=9caJ3q%t$*H5RI+nPQD)Xm~Xy%B4Xh zq<-HnCL(drtIg&JXJu2|V88DTUFY;ipx?1c#iJacejY9BK~ zK3VhXD~k;dk_tDyEfSb3n`Qt#+uCp0-IVCNIE|_Pl_S+h0~=7}j4#=qhB&59L5>jEcvdC&>oz==xtCiJOD+|uG z7lw2P=??B>HMm-XU%>c8!FG}+l`x5`$-5eWYxtWA@+>xKtMO+@eB5T7iZy0`#29z9 z8+XPUv#(-|&35CiSY!5MjIq^j+!JfeK8`U?wi{<-jX5VV#`cA_g!RT6bG~AXop$5C zSmRr98~bAi4=Qj?a7_*leU3zYq1S7KUubCp=`aJkX=fSSWVqRby>Tu(*6LE4HFSBo za=98#bIyb+>bwAHXs%41J5#Sy&wxhQ2{+ zYItxJX|*NOIn4iaqT|Np#tk-I)7*6x%#rWWnK!>f_B`B?yt#_*z_zDg5z&83APqHbI$!leY!r_#iv)L_pa>ilA&EolglU?SoSJbOe+u$YpZ{H{U5B z*9VacK&DJv2X@N*Fgrr!VSGg=Bb=9CF^#*Z@59fS;bWQL=zfa3DeGW|e}seNOcZej zhsar&$0-~pm&9v0j(f=Q>jEB*kaO@M_Tyf1DSU!kaUZ!fe&qXqKec81w%%@p&Q-0w6*1U-k$;)9$wcDQ^oe2GK zSYaY8hA)ZmAC4K-M*Iq(h;Nbc8~r)-crG)x%N*~|j4epR91S@4=s5RX)1qLLIGLgI zut!$WtK>ZeQxtjA*ErHTT9qkSO2w{GMo!)eRM|pOsgj|Jy`-&j1zV}uM!uD;RQ>Tq zKd7(n$J&ASSt$XQro>&%l&;tgz|UWzUy z`~~U1_+4hQgoeSQ!7%=!i{?Hdf<9OQAi$WdA|IBFz?#T*sSmbW!A*RO!Z&gLVbZjU z*U^w^;^&p_0-R>5WR^-_Vcq>-pf9(66&s}RtGFna*L;ug7i&Hv{6@`Zx#apapA-HP l&3CS1Q|?mDb9y)BHj`h)miFK2=!Z?oFQtKFyiEef{{}a-`#1mq literal 0 HcmV?d00001 diff --git a/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/mapper/PassengerUserMapper.class b/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/mapper/PassengerUserMapper.class new file mode 100644 index 0000000000000000000000000000000000000000..760958b1d09527f68f7179b8f9ba94f349c4e877 GIT binary patch literal 448 zcmb7Bu};J=40R4@xdS9d_y#1huoaMCU@8LL3HG#SN{%Luob*t|pE2+Od=$c0U;rT@ zhS=7#;`jXg`u6++07tNs!z72T9JUpVXSVSsb&Lw0%7s}P-5THMt7?IDD$1Iit_(Rl zr%t=RGRel!c2U>FsGSJ`S)ZGTmqU3xd~hb-+sewAh`h8l1`{Lt2DuYJ&lBnEFXTp$ z;~4fq|^u0Qw$VsBJPFpWVPHMT0b}ZMUH~qpLQt_TmI!&ra-|+-kMwnB(6&w!3JbQ M&S6t>CjBwMJJFJnt^fc4 literal 0 HcmV?d00001 diff --git a/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/service/UserService.class b/service-passenger-user/target/classes/com/mashibing/servicepassengeruser/service/UserService.class new file mode 100644 index 0000000000000000000000000000000000000000..95680fbfdd7141facd8a4210d959d7c8f2d0584c GIT binary patch literal 2770 zcmbVOZF3V<6n-|@X4`aWOQ1ji1$<3`vZw_sEk(*pLDN!OXvH_!CfoKxvKx0dtwj_q zDB=r#P{tWQp)-!oIOCw>6e{ZY+20|`e{e>8?q-`Nw2sved+y$I&OPUz=e+Fx`qvLX z18BpCacsnaIvhlghC^{gaiA85<@%H)Psfo)uZF%j>ZIgIJ^JxX9X4Q~9)mbqk7F3B z#jsqT)o?tH1fG+Gy3fn?1xa3%fG@BaLL^urR7&OvAW>6$R7tEPKpy zk9n5cYZeNYt6)z$5YpKVUHOUO^A$D)-94ju~att7aHhLkQ^x5zQ|ic!V@Do zYp-oPzUd3c_7t?I9hWu>E=`ZRX5N}~+|$O0W!j!GYG!=Loifbw0b_5`cP52vWob6n zDQw|)DTt<8h7_p#oUEmwF)eJXub3aP+@mJFDM+N9jF}rUT_N`&Q}xG1;C>0gg%KMP zmBCW-Ug#6UaDuY@)b6@8I2SRGZTA9u3-rYub6 zjRD37ouZqu4hmUWO%)ZfO=6=UwP-!d`mh|Iu^V#*q~k$6q#>`vhNEEh-KcjLMJ_9o z-z>AcF--aG&%eHX?ff4ff2E^Yw<@}x~$OJPw9TS+; zu?hESctyt)&M;mbui~tNy5B#!di$Gew|=^!<2Aglplu2Lv7qvFoCC3n-TLwBZ#ORK zcmqWpZ(>@t{`ZBE2!L0+xBQW~~Vg}snd=^|t) z*u8`#_oa9F6GIK#%`L_bVAW=UvMhZntE6Q$*O z*T)8Bdb|a!L?x?-sgNzDrn==9V|k@49DlXsaVYq-R%*$GQ&YjZxr{6nGBG+$^yK}0 zEE#ELeHiv4y7CeYCGB1(D@KLIN{I=63fv&@MbboAwpVB6-@hoV6|b1dSRQ+_jaUD# z=Q}tnHt=5sP!N%GgX{g=#kfAeHNus{jPzmd46X{-n$6dtd>e>Uq*57ZL<^~2Qov?x z;ZDI;w9*I%=cM~@B0)1Ncd1D=(L94yNi{ly z)k&3()&%d#8(6!mCaEUreqCu%)Vr|$}(wfBzmSbuK^)dy#xr@_NZVszJASn12dw; z-KbI5yz=2awY0>OUF)&crfPu&tVl|!>g*#ur@K=$@8N05<_Mldg}X`N6O<~3|Dpk3 zRWb!e7z<{Mr96 z^C{%ROigEIapRGbFA5g4XoQAe_Y1ii3Ci!KV`?$ zZ2Hy1VP#hVp>OOqe~m|lo@^276Ik<~*6eRSOe;$wn_0@St#cJy}qI#RP= zHVMXyFYYX%T_k3MNbtOX{<*_6Htq*o|7~MkS|A|A|8AqKl!%zTirAJGz;R<3&F7_N z)uC9$9K1M-)g0#}tnM(lO2k~W&4xT7gshgZ1-y2Yo-q9Li7%zguh7W#kGfnjo7Cl6 z!^wTtP392HU0aVB!$cPHjdK}yi7xNMp+KVZy3_u}+lBCloJ&C?#NE@y$_{Uv83*iV zhDOcv`=|CiyQ5)C4fghUmxmwBP0fvuR>aV`bZ3{Q4&6-(M@5sHt0M(}WetqItGB1C zCU-)_n-VD;(6T1%0(@6%U`UgUwgJCCdXvI#f%79Elbg4^yucgfW1^ zNF!|C39SaXsqU9kIimX0vZ`U29)>O|Kfs*hXBXC;Cs9_Zos3%8lu)JGm~c19+j8Va z)~kFfHouwMbfRHJ``%9mLj_bCx!<)O9XNq&uH(>(Q0V7-gom7$kxSpjpPiYGG{IT8 zKdjoDkkMTL9-|vXDuUL=B-K)nVaSFd5TsX0v1C$ETE1Ajnhe9ept?d;xVCWMc$MbR zL{-oP*vjp_3%f0b8h!Qija6rzq~E!#7X~8^ZUb#@rnF~sG0hx^Ok?G9dwmit494OT z_WQzm_sR_#%|I`jx5(6aJYTLv;3U#e@*^jms9#~U`eHOZZEB~yn=4UA(=_U#pYn5e zeeaDmq-$-)&)5Y}h1zDbftv>|?GjQ=)qUw*^CkcAG#o%I8i186AbS@;qrezPCQYWHe=q-5zF>xO*Kk|VTZD;t={XqrKfR|{itr~k71VS?cBc=9zgeFbpeQf*Wad-tAW7(o ze6RbNeu31Uebi}b0>|=7ZjH*J+zSj8fy|+T)+X{N8Vv^d+USG3arWZ?pz)WD)VW}P z0!D>}01W#e@VWTL8w1m|h`D(EnHc*C5#1WK4G|C5ViXO$YzKfJkda# z2c2*qXI-StLW*7_c-%Dws+D#Kkv^gL!_=GMn?Y^0J7*3le!!fTzSux%=1T$O8oy8j z%)PQ9!O+>+y+Dw*r`*}y4SpUa21pWJ$gEDXCZg8L+B!pYWd8X;jRBQkN_b=#tb6Nx zVodM4k?gF&R&P=s`B3d@M5Qvr;1;i_w1AI=*rH(G1kVRMC`_nohm~Ie5^YWYqZMV2<`J* z`i)p799U_mcUjKYn!^T&hu7`Lw$PkddV&W(ni)y|9f}rGr|i-7nnfH6nyB$Q{(*Nv zZz@~rzWM#V@sjT3ewv9c`pP@xM6D!StnV@qCdO${loe(4Gy00NDF5&@Ku;h2P+Vh7 z(X6De$cX5@V}DHXG?K^6mV>XiT768Ee^ye&Cs=2yefVcFn|G zBz$~J(ld&1j@%`sBK^^0Gs$I$q9{R}!HhVu|B@Bhb29PF(%U6#P|T|{ughrfjB@s- zZ)nWbT=6f6aVyk86h(0{NqFg#_d-&q^A@E2l0Iu0(C1@^s6Y-G0r32qll>aW3cHP# zyH`KWu&2?XrIGVB6LOgb+$1zrsW>c2!a(2Y!TnGSAg(|akb#ROpk$~$h}jiY&nWEz zmMxk4&H$8yk(6GKOLQCx$Ji-5H%$Oo4l7~@gbHzNj;iC%_g-+`hCf=YA>Z&F)I1sI z%?Mm27>#i5b5x*U%#QE0wgsN|L73Qf%Mq)QW@O+)a;#mQN?b8e#X%wHbZyA_F+`P%-1SZVnTPPMermk1Rpm#(;z^tMJqwt zDMHw=^c9%?#BcjyPGZFlGOC12RN(i`QAez>VM4#BK&Tm~MZ_!#U8PR->|l+38rIqk zap{3_ei_txm=KL<4p_ukI`9GAEZ+--)Z%)I+9LYO!c|rF=Da5DE@8%g-Zb*O-z8Tv zzbvTzeUcYFgy{b)8Q6+BPl*C}p~DiX%RHMlZf;NmCH;xy=D6Ii;tGU~ zM?k;9X_E?)-wP|VRChb4LrAL*?XD6R2L(MxRFolr6GJ$C>Ihr*nv#lBU>Yklt`-bQ zr;5c(o}R!m4PRz=CnYcQv}m?O=CA(PWBW0?)UY)5d4Kf;8-HU@=xMnA#uw{g`hK{U zB-EQG%T-7FMuUQ;r2xgBi1w69b-Jk8Kujr>`C#&kw-kx_R_GLRC}oum#c{je^h&x9 zoEe)8uUX|SahpME4SEog-5X^wQE0^I!YEHlwawJ|l^^0kD)z{o4^I$Eha$5tzD*A8 zR<*lss4U5N*JCYl;sxBaQkB3M8VT|gXibxFR-NH4Hsmw|{={*Xk)%!$IeqpW&($DQ zuf$~fL+;QIaK?EUfKSX;Gpbm8{<=v#$SrH~P-it--v1kL>3SbJS@>hAE2x_k1-iK# zRN~My-v@dGN3E#c!V1(nOH>vJ{rcOVCx$5s7B?7EKe%B`bbx(8}km#t2a z1A~COG(S4C7~h~k+3;NkxdA4gbB7bRVbm%$DXK0TSBI=Ph6f+PA@$t){_NrRLb`jp zn1u=O0C8%&`rdQgO3kEi#QqiBQcBcbG3wqPrJ8+0r<`L0Co-n8y-NbWbx;}DTq@FD z1b)B$b>Nwx^2;+oIcgW(4I`5DeLE$mWYYc7#tishbd;Y!oQLxI>?6_zq7Ej)92xAZ z!D0mfl|v4EC<3(06V8m+BS)Vx90b=xBSTwTznptIbt5u5KD54$vwl|kp#RpZuJ*k) z>jw52JS&x)9&g3RDXGV zElux37>A=`#5(UuRx&d4qxrV<38_w?#plbw03l9>Nz$Y zZS;fNq6>cGvoASa2y(D&qR9_{@tVrnvduek+riBR#VCG|4Ne^w@mf2Y;-k90%V zpA6dVw|naH;pM~VAwLcQZ|pyTEr;_S2GpkB?7)+?cW{0yE$G43`viTn+^}IPNlDo3 zmE`*)*tFe^=p+a{a5xR;H0r=&!u9y)kYUv@;NUKZ)`u-KFTv0S&FTEQc;D3d|KEKSxirI9TtAWe#hvOXV z>807~TWI~^rL?)WMmi!T!j-vjsw@f11?#jNTu^cmjp!+A1f__Dw!7oqF>&r$V7gc< z?6D92h~Y?faUD+I8V!w~8Z%ws5S{20(AkaTZc>=z`ZK=>ik1td7Op#vAnD;8S zh<>2tmEZiSm-nEjuaWVE)aUXp$BumSS;qw#Xy7-yeq)(<{2G#ap8z)+lTi( ziMb-iig6!==yk zb6{;1hs`#qO5OJQlcJ|62g!?fbI^6v-(`tAQ%Drjcm!`-$%Q#@yw3pf`mXjN>=BSH z(Nftnf50zUUTK;htPt0ONKJq1_d0!a^g>DeNCNpoyZhsnch+s|jXg1!NnEv%li2yw zL}Y=P3u`S%Fj)lhWv0vF4}R;rh4&}2YB8B!|7^}a{#Oac|%oFdMToRrWxEIEN<0CG@_j#R4%R4i0$*6xzzr}^`rI!#y9Xkr{+Rt9G$*@ zQ}XJ+_dl^9@(QYdlXLIMI_Q2uSl>N9g*YXMjddFvVouadTFwyNOT0uG$p!rGF5*`1 z&xsKPj&;t10m&pdPv+LpZd$pyI_v1IJnMD%kWn{vY=O3k1sJRYwPoDV1S4OfVz4FB z$^ygjgHCW=ySKSsoSA&wSlq83JB+O-)s>>e@a{_FjB{@=AlrX7wq>JE=n@}@fba(;n4EG| zge1i)?NE@M@DC5eEv4; z#R~0aNssmFHANL@-eDq2_jFn=MXE9y>1FZH4&v<}vEdB6Kz^l)X%%X@E#4)ahB(KY zx8RH+1*6b|o1$_lRqi^)qoLs;eV5zkKSN;HDwJIx#ceKS!A$ZJ-BpJSc*zl+D~EM2 zm@Kpq2M*kX`;gES_Dd1Y#UH`i!#1HdehqP^{DA-AW^dV(UPu|O@Hvr>?X3^~=1iaRa~AVXbj z-yGL<(5}*)su2Tj#oIt+c6Gh}$0|sUYGGDzNMX+$Oi$e&UJt3&kwu)HX+XP{es(S3 z%9C9y({_fu>^BKjI7k;mZ4DKrdqxw`IM#8{Sh?X(6WE4S6-9M}U0&e32fV$2w{`19 zd=9JfCaYm@J$;nSG3(|byYDqh>c%`JW)W*Y0&K~g6)W?AvVP&DsF_6!fG3i%j^Q>R zR_j5@NguaZB{&XjXF+~6m|utO*pxq$8?0GjW0J-e6Lnf0c@}hvom8KOnirhjOM7!n zP#Iv^0_BqJI?hR5+Dl}p!7X}^NvFOCGvh9y*hgik<&X)3UcEBCdUr$Dt8?0f&LSur ze*n!(V(7umZ%UCS>Hf(g=}39OcvGbf2+D;OZ089m_nUbdCE0PXJfnyrIlLXGh2D!m zK=C#{JmoHY1ws47L0zeWkxxV=A%V8a&E^w%;fBp`PN_ndicD@oN?p?Bu~20>;h;W` ztV=hI*Ts$6JXOwOY?sOk_1xjzNYA#40dD}|js#3V{SLhPEkn5>Ma+cGQi*#`g-*g56Q&@!dg)|1YpLai3Bu8a;l2fnD6&)MZ~hS%&J}k z2p-wG=S|5YGy*Rcnm<9VIVq%~`Q{g(Vq4V)CP257v06=M2W|8AgZO0CC_}HVQ>`VU zy;2LDlG1iwIeMj?l40_`21Qsm?d=1~6f4@_&`lp~pIeXnR)wF0z7FH&wu~L~mfmMr zY4_w6tc{ZP&sa&Ui@UxZ*!UovRT})(p!GtQh~+AMZ6wcqMXM*4r@EaUdt>;Qs2Nt8 zDCJi#^Rwx|T|j_kZi6K!X>Ir%%UxaH>m6I9Yp;Sr;DKJ@{)dz4hpG>jX?>iiXzVQ0 zR$IzL8q11KPvIWIT{hU`TrFyI0YQh`#>J4XE*3;v^07C004~FC7TlRVVC}<}LC4h_ zZjZ)2*#)JyXPHcwte!}{y%i_!{^KwF9qzIRst@oUu~4m;1J_qR;Pz1KSI{rXY5_I_ z%gWC*%bNsb;v?>+TbM$qT`_U8{-g@egY=7+SN#(?RE<2nfrWrOn2OXK!ek7v`aDrH zxCoFHyA&@^@m+#Y(*cohQ4B76me;)(t}{#7?E$_u#1fv)vUE5K;jmlgYI0$Mo!*EA zf?dx$4L(?nyFbv|AF1kB!$P_q)wk1*@L0>mSC(A8f4Rgmv1HG;QDWFj<(1oz)JHr+cP|EPET zSD~QW&W(W?1PF-iZ()b|UrnB(#wG^NR!*X}t~OS-21dpXq)h)YcdA(1A`2nzVFax9rx~WuN=SVt`OIR=eE@$^9&Gx_HCfN= zI(V`)Jn+tJPF~mS?ED7#InwS&6OfH;qDzI_8@t>In6nl zo}q{Ds*cTG*w3CH{Mw9*Zs|iDH^KqmhlLp_+wfwIS24G z{c@fdgqy^Y)RNpI7va^nYr9;18t|j=AYDMpj)j1oNE;8+QQ)ap8O??lv%jbrb*a;} z?OvnGXbtE9zt;TOyWc|$9BeSGQbfNZR`o_C!kMr|mzFvN+5;g2TgFo8DzgS2kkuw@ z=`Gq?xbAPzyf3MQ^ZXp>Gx4GwPD))qv<1EreWT!S@H-IpO{TPP1se8Yv8f@Xw>B}Y z@#;egDL_+0WDA)AuP5@5Dyefuu&0g;P>ro9Qr>@2-VDrb(-whYxmWgkRGE(KC2LwS z;ya>ASBlDMtcZCCD8h+Awq1%A|Hbx)rpn`REck#(J^SbjiHXe-jBp!?>~DC7Wb?mC z_AN+^nOt;3tPnaRZBEpB6s|hCcFouWlA{3QJHP!EPBq1``CIsgMCYD#80(bsKpvwO)0#)1{ zos6v&9c=%W0G-T@9sfSLxeGZvnHk$SnHw57+5X4!u1dvH0YwOvuZ7M^2YOKra0dqR zD`K@MTs(k@h>VeI5UYI%n7#3L_WXVnpu$Vr-g}gEE>Y8ZQQsj_wbl&t6nj{;ga4q8SN#Z6cBZepMoyv7MF-tnnZp*(8jq848yZ zsG_fP$Y-rtCAPPI7QC^nzQjlk;p3tk88!1dJuEFZ!BoB;c!T>L>xSD<#+4X%*;_IB z0bZ%-SLOi5DV7uo{z}YLKHsOHfFIYlu8h(?gRs9@bbzk&dkvw*CWnV;GTAKOZfbY9 z(nKOTQ?fRRs(pr@KsUDq@*P`YUk4j=m?FIoIr)pHUCSE84|Qcf6GucZBRt;6oq_8Z zP^R{LRMo?8>5oaye)Jgg9?H}q?%m@2bBI!XOOP1B0s$%htwA&XuR`=chDc2)ebgna zFWvevD|V882V)@vt|>eeB+@<-L0^6NN%B5BREi8K=GwHVh6X>kCN+R3l{%oJw5g>F zrj$rp$9 zhepggNYDlBLM;Q*CB&%w zW+aY{Mj{=;Rc0dkUw~k)SwgT$RVEn+1QV;%<*FZg!1OcfOcLiF@~k$`IG|E8J0?R2 zk?iDGLR*b|9#WhNLtavx0&=Nx2NII{!@1T78VEA*I#65C`b5)8cGclxKQoVFM$P({ zLwJKo9!9xN4Q8a2F`xL&_>KZfN zOK?5jP%CT{^m4_jZahnn4DrqgTr%(e_({|z2`C2NrR6=v9 z*|55wrjpExm3M&wQ^P?rQPmkI9Z9jlcB~4IfYuLaBV95OGm#E|YwBvj5Z}L~f`&wc zrFo!zLX*C{d2}OGE{YCxyPDNV(%RZ7;;6oM*5a>5LmLy~_NIuhXTy-*>*^oo1L;`o zlY#igc#sXmsfGHA{Vu$lCq$&Ok|9~pSl5Q3csNqZc-!a;O@R$G28a@Sg#&gnrYFsk z&OjZtfIdsr%RV)bh>{>f883aoWuYCPDP{_)%yQhVdYh;6(EOO=;ztX1>n-LcOvCIr zKPLkb`WG2;>r)LTp!~AlXjf-Oe3k`Chvw$l7SB2bA=x3s$;;VTFL0QcHliysKd^*n zg-SNbtPnMAIBX7uiwi&vS)`dunX$}x)f=iwHH;OS6jZ9dYJ^wQ=F#j9U{wJ9eGH^#vzm$HIm->xSO>WQ~nwLYQ8FS|?l!vWL<%j1~P<+07ZMKkTqE0F*Oy1FchM z2(Nx-db%$WC~|loN~e!U`A4)V4@A|gPZh`TA18`yO1{ z(?VA_M6SYp-A#%JEppNHsV~kgW+*Ez=?H?GV!<$F^nOd+SZX(f0IoC#@A=TDv4B2M z%G-laS}yqR0f+qnYW_e7E;5$Q!eO-%XWZML++hz$Xaq@c%2&ognqB2%k;Cs!WA6vl z{6s3fwj*0Q_odHNXd(8234^=Asmc0#8ChzaSyIeCkO(wxqC=R`cZY1|TSK)EYx{W9 z!YXa8GER#Hx<^$eY>{d;u8*+0ocvY0f#D-}KO!`zyDD$%z1*2KI>T+Xmp)%%7c$P< zvTF;ea#Zfzz51>&s<=tS74(t=Hm0dIncn~&zaxiohmQn>6x`R+%vT%~Dhc%RQ=Cj^ z&%gxxQo!zAsu6Z+Ud#P!%3is<%*dJXe!*wZ-yidw|zw|C`cR z`fiF^(yZt?p{ZX|8Ita)UC$=fg6wOve?w+8ww|^7OQ0d zN(3dmJ@mV8>74I$kQl8NM%aC+2l?ZQ2pqkMs{&q(|4hwNM z^xYnjj)q6uAK@m|H$g2ARS2($e9aqGYlEED9sT?~{isH3Sk}kjmZ05Atkgh^M6VNP zX7@!i@k$yRsDK8RA1iqi0}#Phs7y(bKYAQbO9y=~10?8cXtIC4@gF#xZS;y3mAI`h zZ^VmqwJ%W>kisQ!J6R?Zjcgar;Il%$jI*@y)B+fn^53jQd0`)=C~w%Lo?qw!q3fVi{~2arObUM{s=q)hgBn64~)W0tyi?(vlFb z>tCE=B1cbfyY=V38fUGN(#vmn1aY!@v_c70}pa(Lrle-(-SH8Nd!emQF zf3kz0cE~KzB%37B24|e=l4)L}g1AF@v%J*A;5F7li!>I0`lfO9TR+ak`xyqWnj5iwJ$>t_vp(bet2p(jRD;5Q9x2*`|FA4#5cfo8SF@cW zeO{H7C0_YJ*P@_BEvm2dB}pUDYXq@G1^Ee#NY9Q`l`$BUXb01#lmQk^{g3?aaP~(* zD;INgi#8TDZ&*@ZKhx$jA^H-H1Lp`%`O{Y{@_o!+7ST}{Ng^P;X>~Bci{|Qdf1{}p z_kK+zL;>D30r6~R?|h!5NKYOi6X&I5)|ME+NG>d9^`hxKpU^)KBOpZiU^ z;|SzGWtbaclC-%9(zR-|q}kB8H&($nsB1LPAkgcm+Qs@cAov{IXxo5PHrH(8DuEMb z3_R#>7^jjGeS7$!`}m8!8$z|)I~{dhd)SvoH9oR9#LjO{{8O&r7w{d9V1z^syn&E6 z{DG0vlQF_Yb3*|>RzVop^{$mWp|%NDYj@4{d*-@O^<(=L=DMFIQHEp-dtz@1Rumd; zadt^4B#(uUyM6aeUJkGl0GfaULpR!2Ql&q$nEV^+SiDptdPbuJ=VJ)`czZ@&HPUuj zc5dSRB&xk)dI~;6N?wkzI}}4K3i%I=EnlKGpPJ9hu?mNzH7|H0j(mN3(ubdaps3GM z1i+9gk=!$mH=L#LRDf4!mXw0;uxSUIXhl|#h*uK+fQPilJc8RCK9GNPt=X^8`*;3$ zBBo77gkGB5F8a8)*OR10nK&~8CEMPVQyhY>i`PS{L^-*WAz$ljtU%zlG1lm%%U4Zw zms0oZR8b|`>4U1X*9JLQQ>m9MF5%ppoafz^;`7DbmmIENrc$hucekkE4I83WhT%(9 zMaE;f7`g4B#vl(#tNP8$3q{$&oY*oa0HLX6D?xTW3M6f<^{%CK4OE1Pmfue`M6Dh= z&Z-zrq$^xhP%|hU&)(+2KSSpeHgX^0?gRZ5wA8@%%9~@|*Ylux1M{WQ4ekG(T+_b` zb6I)QRGp%fRF)^T?i^j&JDBhfNU9?>Sl6WVMM%S?7< ze|4gaDbPooB=F4Y=>~_+y~Q1{Ox@%q>v+_ZIOfnz5y+qy zhi+^!CE*Lv-}>g^%G=bGLqD(aTN;yHDBH#tOC=X02}QU~Xdme``Wn>N>6{VwgU~Z>g+0 zxv0`>>iSfu$baHMw8(^FL6QWe;}(U>@;8j)t)yHAOj?SdeH;evFx-kpU@nT>lsrUt zqhV}2pD^5bC4786guG1`5|fK@pE6xcT#ns)vR|^?A08G62teHaE&p`ZrCBj_Swt*~dVt=5*RK6Y{% zABqK$X59BnrK3r3u=wxklRnA1uh+q`?T0kE1YhvDWF4OY#<(+V|R@R%tdkq2huF(!Ip+EpZF3zr*|9pmKHPo)Cu z;H+^s&`Ql}u=Jt~ZWj`bAw|i-3#7(2WuRU3DU{BW8`?!O?YO1M$*MMTsaEM!5Jyp~ z!gp6yR4$O%wQ8%dyz43ZPeoJwy;o;yg=S0^Y}%|)to>=N^`!3VMf1~}OZ`Dl$q&|w z9$!i3!i1uAgPTuKSWdBrDr*N$g=E#mdqfj*h;Z}OG`{n245+g;IKfdn!&gF2OtHaD zyGDzj@@d2!P(_Ux)3v;1ABTj__{w*kaRF-1YVU`})Acgk?(T*1YqEve3=5)8bkZK* z!Tus*e$h@^u z>#zV0771Bix~r&h2FJ9)%N{>s>?2tk1$bId)1#G;OKgn-U8jUo^AK;Hu)hQEi}swD(264kAS-SBCD$R(Ro0rh8~Le zzRwxbz_JHDbD+hTX15AWmVw!#rC)-zeZahQQmo6FG1)ah3uuyIuTMof}RO!`Y3^Fxn_-G$23RDOh(@NU?r6`*S?#E50)w zpcsgDZ-iO{;EesgDQq9;p*C#QH(sp~2w^zAJWaUL%@yo)iIL6y8;e_}=dwQc%k%;H zFt5lenH*`}LWd+fPqi;exJeRZgl&nLR%|a!%1x0RQ54cgyWBYrL>sskcAtPxi&8c( zw_K?sI*3n%S;lKiYpveBN08{rgV&-B1NN5Jiu07~%n#%&f!(R(z1)xsxtRBkg#+Lv zh21zX?aYDd_f}qdA`Os*j!eC<5)iUJ&Twj7?*p%vEOGElGhpRZsccM!<k}DeC;TY;rULQs3e}lZyP#UVb=6 zB$Dkm2FaHWUXr7<{R&46sfZ)&(HXxB_=e`%LZci`s7L6c-L7iF&wdmTJz`*^=jD~* zpOZ@jcq8LezVkE^M6D9^QgZqnX&x*mr1_Cf#R9R3&{i3%v#}V$UZzGC;Or*=Dw5SXBC6NV|sGZp^#%RTimyaj@!ZuyJ z6C+r}O1TsAzV9PAa*Gd!9#FQMl)ZLHzTr99biAqA(dz-m9LeIeKny3YB=*+|#-Gq# zaErUR5Z*Wh^e<+wcm70eW;f-g=YTbMiDX)AznDM6B73)T4r%nq+*hKcKF?)#vbv?K zPMe=sFCuC*ZqsBPh-?g!m*O`}6<}Pfj}Y1n9|Y@cUdD5GX_)6Sx9pPfS7 zxkt?g6ZwJ+50C7qrh6dMFmr7qah`FskT_H=GC92vkVh$WfZa2%5L99_DxyM{$#6HQ zx$VR-Wwt!q9JL2{ybEGJr$^?!V4m_BqDqt!mbs=QjHf340+^a{)waVvP0+98(BA$M ztWr&sM=juyYgvf`(SC}+y@QtYgU>0ghJ6VbU}|kEraR&&W%#;!#KI?le%g`e>ZVPiDrneh#&1(Y?uiMo^f5qo@{JEr(p9>8GhDa+PC9yG;lX+D?hQ^fZB&Sdox219zUj_5;+n<0@Wi3@DK`MU8FM!OFJ z8*_mTA-u!Ab#95FRVWTIqAL#BVQGxE_s?>Ql|@0o9vos&r<_4d!+Q6(_270)6#lu$ zV!j$a?_V0I<(3Z=J7C-K0a^Kc1Go9p&T6yQeAD+)dG-$a&%Fo0AOte~_Z&_m2@ue~ z9cKFf-A41Dz31Ooj9FSR`l?H5UtdP?JS=UU$jF#znE1k@0g%K?KQuwZkfDI3Ai)(q z#x_Yo6WR_Y@#6I_02S&NpcP<%sw!!M_3#*8qa+*4rS@x=i{-2K#*Qr)*Q$-{<_(<| z0730e+rubnT38*m;|$-4!1r6u&Ua2kO_s-(7*NGgDTe##%I>_9uW;X__b_k)xlv$; zW%K2hsmr>5e^Z~`tS-eUgWmSF9}Yg8E}qydSVX0nYZMX_x94QK?tw2>^;raVTqstR zIrNAX2`X~|h->dTOb9IrA!i5INpLV}99ES|i0ldzC`;R$FBY5&7+TIy8%GO8SZ37_ zw=^Swk?z+j-&0-cTE|LU0q@IKRa&C6ZlXbSa2vN5r-)*f<3{wLV*uJUw980AFkWN7 zKh{?97GmVu-0rs9FB6ludy|n`gN5p~?y51aJzBg6#+-=0pWdZ2n4xTiQ=&3As-!-6 zFlb|ssAJEJL#s8(=odfz8^9b#@RrvNE4gjuEITzAd7R4+rq$yEJKXP?6D@yM7xZ&^ z@%jnE3}bteJo{p(l`hu`Yvzg9I#~>(T;>c;ufeLfc!m3D&RaQS=gAtEO-WbI+f_#| zaVpq-<%~=27U8*qlVCuI6z9@j)#R!z3{jc>&I(qT-8IBW57_$z5Qm3gVC1TcWJNc% zDk?H3%QHno@fu9nT%L^K)=#sRiRNg|=%M zR;8BE)QA4#Dsg^EakzttRg9pkfIrF3iVYVM#*_+#3X+~qeZc^WQJvEyVlO@9=0pl!ayNOh|{j0j^a z+zi_$_0QKhwArW)sJ$wji;A`?$ecbr?(4x5%2pLgh#wggbt)#T^2R3a9m+>GcrUxU z*u-WTgHAN*e!0;Wa%1k)J_P(Vdp>vwrROTVae@6Wn04q4JL-)g&bWO6PWGuN2Q*s9 zn47Q2bIn4=!P1k0jN_U#+`Ah59zRD??jY?s;U;k@%q87=dM*_yvLN0->qswJWb zImaj{Ah&`)C$u#E0mfZh;iyyWNyEg;w0v%QS5 zGXqad{`>!XZJ%+nT+DiVm;lahOGmZyeqJ-;D&!S3d%CQS4ZFM zkzq5U^O|vIsU_erz_^^$|D0E3(i*&fF-fN}8!k3ugsUmW1{&dgnk!|>z2At?h^^T@ zWN_|`?#UM!FwqmSAgD6Hw%VM|fEAlhIA~^S@d@o<`-sxtE(|<><#76_5^l)Xr|l}Q zd@7Fa8Bj1ICqcy2fKl1rD4TYd84)PG5Ee2W4Nt@NNmpJWvc3q@@*c;~%^Vasf2H`y z+~U-19wtFT?@yIFc4SE_ab?s@wEUfSkOED}+qVjjy>=eac2^S^+|_3%cjH%EUTJ&r znp9q?RbStJcT*Vi{3KDa^jr4>{5x+?!1)8c2SqiCEzE$TQ+`3KPQQnG8_Qk<^)y_o zt1Q^f{#yCUt!1e(3;E6y?>p+7sGAYLp`lA3c~Y`re9q&`c6>0?c0E2Ap5seFv92#X z1Vldj!7A8@8tWr&?%;EBQ_Fwd)8A3!wIx`V!~~h(!$pCy7=&*+*uIzG@*d%*{qG#4 zX0^}}sRN^N=p{w(+yjv%xwb!%lnVTE7l1l6gJwQmq_G83J&Y98$S!r*L8}IiIa2E= zE!0tbOuEDb*No0-KB{zjo1k#_4FHtr{!)>o+Y@bll}Sa6D^xktI0H&l{jKAK)A(iz zB-N00F?~Z}Y7tG+vp)-q*v71(C}65$-=uXx^|R$xx9zZip-V>Hqeyfd(wteM)+!!H z$s+>g4I@+`h2>C|J;PhvtOq)`xm4;CyF}R<)!ma3T{Vf_5|zo;D4YI4ZDBkE(vMeE zb#ZV;n}CgA0w8x!UC2&5Z(K)9bibj#?~>R(72lFx_Am~jS?;7mo~p+05~XGD+(wV4 zEVYnf0N5+-7O+Gc1L!sPGUHv<6=cV8}*m$m`kBs@z zy;goR(?J^JrB7uXXpD00+SD0luk!vK3wwp(N%|X!HmO{xC#OMYQ&a7Yqv-54iEUK4 zVH;)rY6)pUX~ESvQK^w|&}>J{I?YlvOhpMgt-JB}m5Br`Q9X+^8+Xa%S81hO<1t#h zbS+MljFP1J0GGNR1}KwE=cfey%;@n&@Kli+Z5d>daJjbvuO3dW{r$1FT0j zR$c9$t~P50P+NhG^krLH%k}wsQ%mm+@#c;-c9>rYy;8#(jZ|KA8RrmnN2~>w0ciU7 zGiLC?Q^{^Ox-9F()RE^>Xq(MAbGaT0^6jc>M5^*&uc@YGt5Iw4i{6_z5}H$oO`arY z4BT(POK%DnxbH>P$A;OWPb@gYS96F7`jTn6JO@hdM za>_p!1mf?ULJZb1w-+HamqN__2CtI%VK`k^(++Ga0%z*z@k0wYJDqT^)~%|4O299; zh1_iRtc7you(kOK8?Q$R7v-@Qk4+i=8GD2_zI0%{Ra`_prF{+UPW^m5MCA&4ZUpZb z2*!)KA8b--Upp~U%f+rsmCmV~!Y>Gzl#yVvZER2h;f&rkdx{r#9mc8DZMJaQXs?SL zCg3#>xR6ve8&YkP*`Z=lng|Ow+h@t*!Ial*XQg3P;VS8@E1C)VS`?L9N+rxlD7bxC z3@Ag)Vu?#ykY`ND+GvRYTUP&-KDMiqly$Z~uFXt^)4Jjk9RIs*&$?-UPM*d7&m${m zm12kaN3mV1J|c6f$>V+{lvHp~XVW3DU0;cBR>7|)4bo{xa1-ts-lYU-Q-b)_fVVl`EP5X}+J9EzT20x8XIv=m7witdu7!3Lh=KE#OyKpT1GWk{YAo^ny|fvZt<+jmsFs=l*%e& zmRkBt5ccv4O7!HAyv2~rsq*(FmMTm?@TX3&1`nu|7C^F{ad%GLuoX}Rl}6`)uHF_xlx^gVca+mGH4T8u8;q{S*x3=j;kelz^atO~)v!Q_BT z4H6%IA}bvfuk0_vweELeEl8N5w-Q1GF!@f{VKnbyYB2?}d&QvI-j}~RI_+9t9$tC2 z94m=3eLi=sQb^S5;fqP?3aaXc&`}`lq z&M8dOXvxx9Y1^u_ZQHhO+qP}nwkvJhwoz$Mp6Qcq^7M#eWm}!3U@s07hop` zW24|J{t$aB`W>uBTssEvYMyi$hkaOqWh+^(RV_1MYnE0XPgW?7sBDk=Cqs(;$qrPEflqa0ZE?A3cBfW%0RPA235Wb6@=R_d>Sez; z`spwa50bq?-zh+id~Q!T`AYn`$GHzs;jxIw(A1_Ql&f|qP}|bon#H;sjKmSDM!nyn z>bU8l%3DB3F+$}|J^da!!pN|DO!Ndc2J)wMk!+Rr1hes#V}5o(?(yQSphn|9_aU<- zn|nsDS{^x&tweP;Ft`2ur>Koo2IdXJDsr6IN)7vB41Yy-^Wbo9*2th2QA@C zE0-0Gk12YOO?d_Guu6b3&(PIL`d zh4{`k54hu9o%v1K3PGuccez-wdC<&2fp)>`qIIaf)R{5un7-vwm=>LD7ibnJ$|KyE zzw`X*tM0S|V(I3vf454PY{yA5lbE+36_<1kd=&0Xy4jfvUKZ0$Jq!AG4KS7DrE9rph;dK^6*#CIU9qu7 z?)6O`TN&MCWGmUVd1@E2ow2`vZ1A#nGo8_n!dmX77DCgAP1va*ILU+!a&$zdm6Pa6 z4#|*&3dM+r_RJb%!0}7X!An&T4a4@ejqNJ;=1YVQ{J6|oURuj8MBZ8i7l=zz%S4-; zL}=M^wU43lZVwNJgN|#xIfo$aZfY#odZ6~z?aNn=oR1@zDb=a(o3w`IGu&j>6lYxL z&MtqINe4Z>bdsHNkVIu$Dbq0wc#X-xev221e~L zbm8kJ(Xzij$gF4Ij0(yuR?H1hShSy@{WXsHyKtAedk4O!IdpR{E32Oqp{1TD{usJi zGG@{3A$x%R*pp8b$RQo4w&eDhN`&b~iZ2m3U>@9p1o5kXoEVmHX7I6Uw4dn((mFw` zilWrqFd=F5sH$&*(eJB52zaLwRe zz`sruIc=Ck75>v5P5kd>B2u=drvGPg6s&k5^W!%CDxtRO)V6_Y_QP{%7B>E~vyMLG zhrfn8kijyK&bX+rZsnSJ26!j$1x+V!Pyn|ph%sXWr9^f&lf|C;+I^Fi_4;`-LJI&F zr;5O@#4jZX=Yaw0`pUyfF4J8A9wE#7_9!X|_s8~YUzWu&#E^%4NxUA3*jK-F5R3LP2|msHBLmiMIzVpPAEX)2 zLKYjm3VI4r#7|nP^}-}rL+Q4?LqlmBnbL+R8P%8VmV{`wP0=~2)LptW_i682*sUR# z+EifOk_cWVKg-iWr^Qf4cs^3&@BFRC6n0vu{HqZzNqW1{m)3K@gi$i}O(hT`f#bT- z8PqCdSj~FncPNmMKl9i9QPH1OMhvd42zLL~qWVup#nIJRg_?7KQ-g3jGTt5ywN;Qx zwmz4dddJYIOsC8VqC2R%NQ>zm=PJH70kS|EsEB>2Otmtf-18`jUGA6kMZL3vEASDN zNX%?0+=vgsUz!dxZ@~)eU17m4pN3xGC0T;#a@b9Iu0g_v*a3|ck^s_DVA^%yH-wt= zm1)7&q6&Rq#)nc9PQ6DKD{NU=&ul10rTiIe!)x^PS~=K(wX9|?k&{Mv&S$iL9@H7= zG0w~UxKXLF003zJ-H%fGA4Db9{~#p&Bl7ki^SWwv2sfoAlrLMvza)uh;7Aa_@FL4b z4G>`j5Mn9e5JrrN#R$wiB(!6@lU@49(tawM&oma6lB$-^!Pmmo;&j57CDmKi)yesg~P;lJPy9D(!;n;^1ql)$5uYf~f z&GywSWx=ABov_%8pCx=g-gww_u26?5st=rdeExu?5dvj^C?ZZxDv@Si^nX~2qA&K= z2jr;{=L(x~9GLXrIGXs>dehU^D}_NMCMegdtNVWyx)8xHT6Qu!R>?%@RvADs9er;NMkweUBFNrBm1F5e0_>^%CwM6ui}K_MpRqLS0*@lAcj zB6TTCBv>w2qh)qU3*kN+6tPmMQx|5Z0A4n67U-nss90Ec_rDF}r)IR4PE{$8;BSt= zT%6|jyD^(w6a*A5>_|TkMqx~e$n@8{`q?|)Q&Y4UWcI!yP-8AwBQ#P`%M&ib;}pli z9KAPU_9txQ3zOM#(x}*lN8q$2(Tq1yT4RN0!t~|&RdQMXfm!81d0ZuyD}aG3r4+g` z8Aevs3E_ssRAMR+&*Q30M!J5&o%^(3$ZJ=PLZ9<@x^0nb>dm17;8EQJE>hLgR(Wc% zn_LXw|5=b$6%X zS~ClDAZ?wdQrtKcV9>_v1_IXqy)?<@cGGq#!H`DNOE1hb4*P_@tGbMy6r@iCN=NiA zL1jLwuMw&N-e9H(v7>HGwqegSgD{GSzZ@sZ?g5Y`fuZ^X2hL=qeFO(;u|QZl1|HmW zYv+kq#fq_Kzr_LaezT zqIkG6R+ve#k6!xy*}@Kz@jcRaG9g|~j5fAYegGOE0k8+qtF?EgI99h*W}Cw z7TP&T0tz4QxiW!r zF4?|!WiNo=$ZCyrom-ep7y}(MVWOWxL+9?AlhX<>p||=VzvX`lUX(EdR^e5m%Rp_q zim6JL6{>S%OKoX(0FS>c1zY|;&!%i-sSE>ybYX3&^>zb`NPj7?N^ydh=s=0fpyyz% zraFILQ17_9<ettJJt~I+sl=&CPHwz zC9dEb#QFQcY?bk11Y=tEl{t+2IG`QFmYS>ECl;kv=N6&_xJLQt>}ZQiFSf+!D*4Ar zGJ~LFB7e_2AQaxg*h{$!eJ6=smO(d2ZNmwzcy3OG@)kNymCWS44|>fP^7QkJHkE9JmLryhcxFASKb4GYkJ|u^Fj=VdF0%6kgKllkt zC|_ov2R4cJ2QjjYjT6jE#J1J<xaNC>Xm;0SX<`LuW*}*{yQ3c9{Zl=<9NP z^2g5rAdO!-b4XfeBrXa4f{M0&VDrq+ps&2C8FYl@S59?edhp~7ee>GR$zQI4r8ONi zP^OA+8zrTAxOMx5ZBS03RS@J_V`3{QsOxznx6Yt*$IuEd3%R|Ki&zZkjNvrxlPD$m z%K+rwM!`E&Z46ogXCu!3 z8use`FJJ?g_xi?~?MxZYXEu=F=XTC8P3{W*CbG3Wk)^31nD~W>*cJ@W4xg%Qqo7rq z`pUu8wL!6Cm~@niI*YmQ+NbldAlQRh?L!)upVZ)|1{2;0gh38FD&8h#V{7tR&&J}I zX1?;dBqK}5XVyv;l(%?@IVMYj3lL4r)Wx9$<99}{B92UthUfHW3DvGth^Q0-=kcJ1 z!*I9xYAc$5N$~rXV>_VzPVv`6CeX(A_j3*ZkeB~lor#8O-k+0OOYzTkri@PVRRpOP zmBV|NKlJT?y4Q82er)@lK&P%CeLbRw8f+ZC9R)twg5ayJ-Va!hbpPlhs?>297lC8 zvD*WtsmSS{t{}hMPS;JjNf)`_WzqoEt~Pd0T;+_0g*?p=dEQ0#Aemzg_czxPUspzI z^H5oelpi$Z{#zG$emQJ#$q#|K%a0_x5`|;7XGMuQ7lQB9zsnh6b75B9@>ZatHR_6c z0(k}`kfHic{V|@;ghTu>UOZ_jFClp>UT#piDniL(5ZNYXWeW0VRfBerxamg4su5<; z(}Ct2AhR@I-ro0}DdZLRtgI@dm+V`cRZjgV-H+aXm5|Mgz`aZX63i<|oHk-E)cABn z0$NR?(>fla7)Ong28FZSi9Yk0LtYl5lZw5wT!K5=fYT$avgkMKJWx~V#i@7~6_{dM zxDDPIW2l{O2Elv#i^cjYg~lGHRj(W*9gD`(FILKY$R`tL2qo&rtU*c;li!V`O$aV{ z!m|n!FAB2>MR_FVN*Ktv5+2dW4rr3YmfEheyD+48%USM#q6)w%#2}~=5yZE1LLcth zF%VtefH&#AcMx7)JNC$P>~OFuG6sK}F7V$D7m!{ixz&inpAVpFXiu^QruAw@Sc7Y2 z_A^V(2W_+KTGRp2aQSMAgyV#b3@{?5q@hPEP6oF3^}|@8GuD6iKbX;!LI!L=P#Za zL$Zuv#=x3fseRMZ()#SQcXv->xW`C|6quwqL1M&KByBj z2V`}(uL4JB-hUs6304@%QL~S6VF^6ZI=e-Nm9Tc^7gWLd*HM-^S&0d1NuObw-Y3e> zqSXR3>u^~aDQx>tHzn9x?XRk}+__h_LvS~3Fa`#+m*MB9qG(g(GY-^;wO|i#x^?CR zVsOitW{)5m7YV{kb&Z!eXmI}pxP_^kI{}#_ zgjaG)(y7RO*u`io)9E{kXo@kDHrbP;mO`v2Hei32u~HxyuS)acL!R(MUiOKsKCRtv z#H4&dEtrDz|MLy<&(dV!`Pr-J2RVuX1OUME@1%*GzLOchqoc94!9QF$QnrTrRzl`K zYz}h+XD4&p|5Pg33fh+ch;6#w*H5`@6xA;;S5)H>i$}ii2d*l_1qHxY`L3g=t? z!-H0J5>kDt$4DQ{@V3$htxCI;N+$d^K^ad8q~&)NCV6wa5(D${P!Y2w(XF!8d0GpJ zRa=xLRQ;=8`J2+A334};LOIhU`HQ*0v4Upn?w|sciL|{AJSrG_(%-(W9EZb%>EAGG zpDY?z1rQLps`nbCtzqJ#@wxU4}(j!ZQ{`g`g*SXlLah*W9 zyuh)UWoRCknQtd~Lk#BT_qjwj&Kw8U)w=owaJ;A5ae}3)y>{neYNS`|VHJdcSEBF# zBJ6a;T)u;^i#L~LVF-X7!E$SggILXMlsEy~v}K*DM2)f@U~g|Q6I-Pss@)`>fgFWx zsq&7pe!|VA-h;@=fBF{(mR1^{1>ukTYUdyF^#A+(|I_&nm{_xaKn3h4&yMyym2k-wMFg(s@ez=DPmuB%`| z6;e@HQKB(|!PU1sW)W6~x|=8m6rL~4dQ9LTk|RzL-_(_77B4I~ZG=q7K%qHiv!FD8 zmt;Vnhb{ymaydv2V;X-5p zTt2ln?kaB9&(dH_X70^@rrCfz)nwfa9LYTHXO(IPcTEf$QiEhTpl??L+`Eetyqof8 zzl=q)?KdYni!C_9b8Z3xm7r5<5ZG-0uA`u^7Dm7k4mAsQ(rkoWy*^DZJa~#y6+hNG zh?7{D9$a9LS`a@SvZ5?C{JUHovWU9KI}z8YV4pWftx21v*Q;MpU{+b@>Or(}pwO^fu0qA3_k_Bo2}lIxvmMhucG-o>O=+R6YxZ zjs!o%K1AA*q#&bs@~%YA@C;}?!7yIml1`%lT3Cvq4)%A)U0o1)7HM;mm4-ZZK2`Lj zLo?!Kq1G1y1lk>$U~_tOW=%XFoyIui^Cdk511&V}x#n4JeB7>bpQkYIkpGQRHxH$L z%tS=WHC~upIXSem>=TTv?BLsQ37AO88(X+L1bI<;Bt>eY!}wjYoBn#2RGEP49&ZH-Z_}R_JK_ z>o*_y!pOI6?Vf*{x-XT;^(_0}2twfk`*)_lLl0H-g|}BC?dm7CU|^-gNJ~rx z($>97WTKf71$?2|V$Ybpf~Aj@ZZOcb3#uRq51%4^ts-#RMrJhgm|K3QpCsPGW=2dZ zAr5-HYX!D*o#Q&2;jL%X?0{}yH}j*(JC4ck;u%=a_D6CrXyBIM&O#7QWgc?@7MCsY zfH6&xgQmG$U6Miu$iF(*6d8Mq3Z+en_Fi`6VFF=i6L8+;Hr6J zmT=k0A2T{9Ghh9@)|G5R-<3A|qe_a#ipsFs6Yd!}Lcdl8k)I22-)F^4O&GP&1ljl~ z!REpRoer@}YTSWM&mueNci|^H?GbJcfC_Y@?Y+e4Yw?Qoy@VLy_8u2d#0W~C6j(pe zyO6SqpGhB-;)%3lwMGseMkWH0EgErnd9a_pLaxbWJug8$meJoY@o-5kNv&A$MJZ=U z^fXPLqV6m3#x%4V*OYD zUPS&WHikdN<{#Yj|EFQ`UojD4`Zh*CZO4Cv`w^&*FfqBi`iXsWg%%a< zk@*c%j1+xib(4q^nHHO^y5d8iNkvczbqZ5;^ZVu%*PJ!O?X-CoNP*&tOU!5%bwUEw zQN?P*a=KKlu{`7GoA}DE=#nDibRgecw>-*da~7&wgow}|DyCJq!-Lp8a~(zR@tO1 zgu(4s4HptPGn(HmN2ayYs@g+yx1n`nU3KM{tQHhMHBw7f#gwru$=C()`aKZAl^dYc ze7fC)8EZEXOryk6AD&-4L+4cJ&M@3;;{R)mi4=`ti7IZByr^|_HNsjcNFu?mIE)jD za2j)FPwRY!R_YR-P?URm0Pti*e#5jmfK)6EvaKCT{h)kbJl{AGr1Ekt}pG?^e z*botRf-RsB8q10BTroj{ZP**)2zkXTF+{9<4@$aNDreO7%tttKkR3z`3ljd?heAJEe<0%4zYK?};Ur*!a>PbGYFFi(OF-%wyzbKeBdbkjv^i9mn@UocSS z4;J%-Q$l`zb&r*Pb`U;3@qkc=8QaPE9KwmlVwAf01sa*uI2*N`9U^3*1lLsM9dJ(4 zZBkU}os|5YT#Z;PD8xVv!yo$-n{-n4JM5ukjnTciniiT`(cZ6sD6~67e5_?8am%!w zeCLUxq~7x-!Xg#PgKV&caC@7mu<86am{WaXo(lAemt4~I$utSp(URWpYNo$RvU*$N z#%iiA+h`(E;BUg;=I!#EaxO89bUK3*v5Nc3GPmURC5TqzC|))DsFNtJICH6oBW6#q z+B(N{ey+^mk_{!@ z)VhAWXG=_0j|0f9iJ;c404PiIFqK)(AD05Xh`Fk`r$^b`v+>*g+_+h@r)e+ELJ45) z?20~u<}HQyQ5AsBz(teF9!!_GLXnm{5Z0e{Ki*@!=&3x4-RcjBn##DDzHJ|KSZ5(E z9=tFZ)p~-}x%9sCY27)2i>(E-^OiYT?_)a;yXAGR$y+E`myMd;xDA#_Q49t*E}&ql#H~|x z2J2R1_#2lt91NnF!uqW%_=HlbF?A{B{n>}9$g5QF!bh_a7LTU~Jyz}7>W5{_LAov{ zy2_dmGy)d)&7^bJyUjEw%3xj{cuG0Eo zwL*XQB*Oi=r&HIIecC1%lbE;Y-*5|cL955S+2@uR18JDL<0;;Uc2Q9JEyo1R!!sz_ z#BqnkGfbLP#oQJk3y}nwMd(3Tt^PVA#zXnYF7D0W1)#+`i?@cm}fBkKD z+Mpcuim53|v7;8Tv(KraEyOK`HvJq^;rlNzOjIbW&HJDFqW>doN&j7)`RDv#v|PQ+ z03WnB4Y4X@Fe-@%3;He*FjY1MFmkyv0>64Cp~FIDKQTwmFP~_CxZOf{8gPy}I<=JC zo%_bmue&$UU0|GG%%99eI!m#5Y1MD3AsJqG#gt3u{%sj5&tQ&xZpP%fcKdYPtr<3$ zAeqgZ=vdjA;Xi##r%!J+yhK)TDP3%C7Y#J|&N^))dRk&qJSU*b;1W%t1;j#2{l~#{ zo8QYEny2AY>N{z4S6|uBzYp>7nP_tqX#!DfgQfeY6CO7ZRJ10&$5Rc+BEPb{ns!Bi z`y;v{>LQheel`}&OniUiNtQv@;EQP5iR&MitbPCYvoZgL76Tqu#lruAI`#g9F#j!= z^FLRVg0?m$=BCaL`u{ZnNKV>N`O$SuDvY`AoyfIzL9~ zo|bs1ADoXMr{tRGL% zA#cLu%kuMrYQXJq8(&qS|UYUxdCla(;SJLYIdQp)1luCxniVg~duy zUTPo9%ev2~W}Vbm-*=!DKv$%TktO$2rF~7-W-{ODp{sL%yQY_tcupR@HlA0f#^1l8 zbi>MV~o zz)zl1a?sGv)E}kP$4v3CQgTjpSJo?s>_$e>s2i+M^D5EfrwjFAo(8E%(^ROV0vz0o z-cg0jIk24n!wxZainfH)+?MGu@kg$XgaMY-^H}z^vG~XC7z2;p2Kv`b^3S#b5ssMOJ7724v>S36dD zeypxJ<=E~sD4f5wX060RIF-AR0#{Z z=&y$r8A-e6q18lIF{@O9Mi%dYSYT6erw!@zrl=uj>o(3=M*Bg4E$#bLhNUPO+Mn}>+IVN-`>5gM7tT7jre|&*_t;Tpk%PJL z%$qScr*q7OJ6?p&;VjEZ&*A;wHv2GdJ+fE;d(Qj#pmf2WL5#s^ZrXYC8x7)>5vq_7 zMCL}T{jNMA5`}6P5#PaMJDB2~TVt;!yEP)WEDAoi9PUt89S2Cj?+E0V(=_sv4Vn6b z_kS6~X!G;PKK>vZF@gWpg8Zuh%YX^2UYPdCg7?EH#^gkdOWpy(%RnXyyrhmJT~UJw zAR;%Zgb6z(mS+o9MT|Sc6O({!i0pzk;s9?Dq)%tTW3*XdM3zhPn*`z45$Bg!P4xfy zD*{>30*JsSk?bQ-DgG62v>Vw-w`SA}{*Za7%N(d-mr@~xq5&OvPa*F2Q3Mqzzf%Oe z4N$`+<=;f5_$9nBd=PhPRU>9_2N8M`tT<-fcvc&!qkoAo4J{e3&;6(YoF8Wd&A+>; z|MSKXb~83~{=byCWHm57tRs{!AI<5papN(zKssb_p_WT@0kL0T0Z5#KLbz%zfk?f7 zR!vXBs36XaNcq5usS7<>skM_*P$e*^8y1ksiuokbsGFQ_{-8BAMfu!Z6G=88;>Fxt z|F-RU{=9i6obkTa0k~L#g;9ot8GCSxjAsyeN~1;^E=o5`m%u7dO1C*nn1gklHCBUw z;R(LgZ}sHld`c%&=S+Vx%;_I1*36P`WYx%&AboA1W@P;BvuFW+ng*wh?^aH4-b7So zG?9kFs_6ma85@wo!Z`L)B#zQAZz{Mc7S%d<*_4cKYaKRSY`#<{w?}4*Z>f2gvK`P1 zfT~v?LkvzaxnV|3^^P5UZa1I@u*4>TdXADYkent$d1q;jzE~%v?@rFYC~jB;IM5n_U0;r>5Xmdu{;2%zCwa&n>vnRC^&+dUZKy zt=@Lfsb$dsMP}Bn;3sb+u76jBKX(|0P-^P!&CUJ!;M?R?z7)$0DXkMG*ccBLj+xI) zYP=jIl88MY5Jyf@wKN--x@We~_^#kM2#Xg$0yD+2Tu^MZ1w%AIpCToT-qQbctHpc_ z>Z97ECB%ak;R<4hEt6bVqgYm(!~^Yx9?6_FUDqQQVk=HETyWpi!O^`EZ_5AoSv@VbUzsqusIZ;yX!4CsMiznO}S{4e>^0`c<)c~mC#*{90@+T@%EQ~>bovc8n_$bvqkOU7CrYe8uI5~{3O7EijeX`js z-$LNz4pJA7_V5~JA_Wl*uSrQYSh9Wm($%@jowv^fSPW<~kK&M*hAleywHd?7v{`;Y zBhL2+-O+7QK_)7XOJAbdTV-S`!I)t~GE8z+fV7y;wp#!wj75drv;R*UdSh(}u$%{VSd0gLeFp;h6FkiVz%g=EY3G#>RU;alRy;vQmk*| z@x-ba0XKE%IyL4OYw6IXzMiS(q^UDk=t(#XgkuF`{P?=k8k3r)rmhkv`vg@kiWd34 z-~t+1aV3SabTbG=nQYs>3~E<}{5@0g**LAWi*~SfRZhGcgP{e5T!0M7CU}`f@r8xI z0bx%sI!?5);-wG+Mx&S=NRfIi>V-wP(n&$X0Bhd)qI^ch%96s6&u7qpiK8ijA=X_R zk&|9f$GXf-;VgnrxV83Cp-Q!!sHH`5O^o~qZu!xny1t?(Au(EAn)D??v<1Uo;#m7-M@ovk|()C(`o>QMTp}F?> zakm3bHBKUjH-MHXDow7#Z|@wea1X9ePH;%YA)fCZ9-MD)p^(p!2E`aU9nmJlm;CXQ zkx~$WQ`Yq{1h5k>E>Ex{Z=P=)N*0b8_O({IeKg?vqQ)hk=JHe z5iqUKm!~mLP0fnRwkCO(xxTV@&p+o8wdSP$jZofYP}yEkvSc z5yD-^>04{zTP7X44q9Af&-wgt7k|XtncO&L@y-wFFR44RsPu57FRvIBaI^Pqy_*DV z@i13CsaR5@X@xH=NT3}T`_vsy!a02n80eQqya=-p7#YW`Jc0z!QglGg`1zeg6uXwI zsB~hlNMo)kFL(V3Q1<%8yoI6X7ncn-&&Uh3rL@S(6@wKAXt6Wr=a2ObI7}8$D-FoI z>AJA>WsBEMi5ba6JhJ%9EAi&ocd(ZsD|MsXwu@X;2h#|(bSWu@2{+c7soC`%uo{sMYq&Vyufb)?OI59ds)O+kyE8@G z@tlpNr0UO~}qd0HQve6njJ zda2+l$gdX7AvvGhxM6OToCuQ|Zw|9!g1)O+7>~{KNvASjp9#Cqce-or+y5xdzWL3gLWt2oa+T(I+{j(&bF1laUsJB{fOgE-B}qslaS>C z)TjzG8XecbS%a+?yT!0QmTex?E478;D|sL*oS4C-g0Tq(YoH|eyxJ#1j088C|U-w5id`%Sz7X_w#l+U9+)$|2no<}5J zRb_9@0esSr?n}HvVGbD5@$p$8k4?qOe-GNOk3-K^Mw>Xg+drCKi5@$GTeijpI;;IG ziD<&go`ptLC&^<0jw^l0aY?_pUUK+xp#0Bk66iQ29vpR)VBE{JOJ&OL^gKsN<&t<| zCMLTYMSDG5Ie9O>6Dl#T{@cscz%)}?tC#?rj>iwQ0!YUk~R z$rB-k=fa9x&631Z9Mfqj_GRoS1MzqSMEdaZ2!isP19Sr>qG8!yL(WWF)_&{F)r>KnJGSciSp!P0fqHr+G=fGO02Q#9gHK zpwz+yhpC4w*<9JO@#(MdkZcWbdCO5B!H`Z|nV?UtcBo96$BgX+7VYMwp@b-%;BrJu zMd*K!{1txv{kHKPDs9?WZrz_^o1Tq2P=+=|E=Oy4#WE{>9}*9(apqhmE`&AeBzQgQ zELFLCmb~q|6y0FCt|B}*uI*ayZ#6=$BpGtF{Jfye#Q>FZ?BPnk)*Qmd?rNG^tvFUU z_b&antYsZnUR6Q9tQUy81r$&ovT#fy;(Db4F&M*C=KxQgHDrRcVR#d+ z0(D|*9#u`w_%2o3faI{?dNd9$#5nj1PROHNq z7HJ(;7B1ThyM>a@Fo^lJb2ls2lD`}ocREH|5pKN;$>gFyM6k)kZG;lA;@kSJIqUhf zX%dhcN(Jtomz4(rNng&1br3Xx33EvCWz%o8s;SpRiKEUFd+KJ+u|gn|J85dZ)Exc&=V|Ns8Xs#P>qv6PX&VAJXJ(ILZO!WJd0 z`+|f5HrEj~isRN7?dBHotcPI7;6W48*%J(9 zftl1Tr`bKH*WNdFx+h;BZ+`p!qKl~|Zt5izh}#pU9FQKE97#$@*pf38Hr8A+`N+50U3$6h%^!4fBN zjh^cl#8qW5OZbvxCfYzKHuyeKLF4z^@~+oqlz9(Hx8vypIiUlt!(vs}_t#4@nh$s; z>FYERg*KD#Xs+W4q-V-IBQK!)M1)Aa+h+V+is)z!_=gEn&^ci7<DEEmYcoSh?WdXUsP7O4)&lQXA(BVM5jI8s6;mO}94AC0gG(`>|T)yuV1l~i-ejCCt zoejDhX0nrZDP|x9u4zp%S2UeDzV`o#pBGu1tZ-$<9TIbN=ALwhQ0=9S{8#}Uu8n-~ z5~xIvUhLSz@c@0|me$CdZCpZl(vQw@a0Y4^{T0w_>pOkwI^x4KkBf3qGmm)nG|Ps5 z_XTY~^b^mL&_*yjl~RRIi&eS(>y?y}O4-)nWyTEPpQAb#Xz8SnnfIL+nAcNL9nqV9 zRL|eyF)RKI5-kJO6}>Q89XmgY@b1&!JI>g3ryZ@jN2v3vm7O`AL!BTWNouJzV+$+Y zYY}u%i>K6=IYU2O$2TAyVjGt?wgF9xCj;?EK(8fWu!!~48`3u^W$eUlCh*91PLxu1 zRY(F7Q3s7h$Q-p&L$ucN}it*-9KR z_<wHu?!dav0$P+PI3{J8?{+l|n&2YMLV2 z+hRta$A5WpCXl1RNbYBsX8IGX{2v>U|8_I-JD56K|GexW>}F_e_g_1r?08v8Kz{V$ zT=6aGMk>ibvRO@Yrc@ezaD0%ydHkXGHrR{7>q~~tO7ChJflwa4-xL|@#YIJejC5VT zInU4CjQ9V0+lClQY=vh^s4MadwQmk7li{54Y;Ht}gkZOIh9(vfK?3kXLoD72!lHD# zwI-Jg|IhT=Y#s|tso1PWp;|aJ2}M?Y{ETyYG<86woO_b+WVRh<9eJu#i5jxKu(s~3 z4mz+@3=aNl^xt{E2_xewFIsHJfCzEkqQ0<7e|{vT>{;WlICA|DW4c@^A*osWudRAP zJut4A^wh@}XW4*&iFq|rOUqg*x%1F+hu3U6Am;CLXMF&({;q0uEWG2w2lZtg)prt` z=5@!oRH~lpncz1yO4+)?>NkO4NEgP4U~VPmfw~CEWo`!#AeTySp3qOE#{oUW>FwHkZ3rBaFeISHfiVSB7%}M) z=10EZ1Ec&l;4 zG98m5sU!pVqojGEFh8P{2|!ReQ&hfDEH2dmTVkrS;$dN~G2v-qnxn^A2VeHqY@;P} zudZD5vHtVvB*loIDF1M7AEEvS&h0;X`u}!1vj6S-NmdbeL=r{*T2J6^VA7F`S`CDd zY|=AA6|9Tu8>ND6fQhfK4;L3vAdJPBA}d6YOyKP&ZVi%z6{lbkE|VyB*p1_julR^k zqBwjkqmFK=u&e8MfArjW-(Ei8{rWso1vt5NhUdN|zpXqK{ylJ8@}wq-nV~L4bIjtt zt$&(1FTIs+aw}{&0SO4*sa0H2h&7g}VN5uYjfed5h7eGp$2Wu*@m9WIr0kxOc}fX9eOWh zFKfV>+SD$@kESKYm{F*J90XQjr$!<~v(J%&RMuQM+6CkmnYZDGlOUdq}%)VA& zl#acS%XE2KuX~7IamK`og@C`21~*cEEc#PZM6HT*Veb_l&Ej~j0zL7p0Eo`mMu(=X zJ$v;&Lya75I4C^saKROgfi(fdP0C$GM3WyZn%mm3yEI>|S&O(u{{S<}ihUp#`X&_z zmQBma;82#`C;dR5Sx09e07FvtJLhZ{9R~|$FCdU6TDNUwTc9kNct?8e@o2MpQDrkg zN?G+aYtTjiUPA=RX5o{4RYu}6;)ET>TcgL^VpfIpluJ|lQR(_)>6k%L^FZmoK-Wm- zR5qy0P)hm8yvqOL>>Z;k4U}!s?%1~7v7K~m+gh=0c9Ip_9UC3nwr$%^I>yU6`;2kV z-uJ%y-afzA7;BC7jc-=XnpHK+Kf*tcOS>f5ab2&J&5hIOfXzs=&cz|Qmrpu6Z);`R z0%3^dioK5x?o7t~SK7u5m{dyUZ#QUPqBHYn@jETeG>VU=ieZuJ;mm^j>dZM7))cw?a`w8R z%3M0R=kdOt^W^$Kq5Z%aJ(a$(*qFpy^W}Ij$h+Jnmc9eaP(vB@{@8t zz=RQ$x4XYC#enS$fxh@;cSZ|D%7ug;0z{C8I8h{KocN-cyv3UG_nk99UNS4ki^OFkYea`q`rs zG@qdMI;4ogcd5Tr`di1JBg4I*6CFvCID_2SN5&)DZG&wXW{|c+BdQ4)G9_{YGA@A* zaf}o^hQFJCFtzt&*ua~%3NylCjLtqWTfmA-@zw;@*?d&RE3O8G&d;AVC|rZrU}jx# zC-9SF`9;CbQ(?07o8Q9E12vi)EP@tOIYKEKnO@-o!ggkC)^#L-c40iZtb4Y-cS>$I zTn~+>rn*Ts>*y*z^b3-fAlne+M-*%ecrI^rmKAVv23cB`aWD?JDJ5NIafRvRr*~~C z)99Afs`BPK!5BFT)b_^8GyH*{22}yDq;be`GnPl=vW+ITnaqzl(uYOHhXi}S!P+QZ z4SwfEPuu&z4t#?6Zaw}bvN{;|80DfxCTuOdz-}iY%AO}SBj1nx1(*F%3A-zdxU0aj z`zzw9-l?C(2H7rtBA*_)*rea>G?SnBgv#L)17oe57KFyDgzE36&tlDunHKKW$?}ta ztJc>6h<^^#x1@iTYrc}__pe0yf1OnQmoTjWaCG`#Cbdb?g5kXaXd-7;tfx?>Y-gI| zt7_K}yT5WM-2?bD-}ym*?~sZ{FgkQ9tXFSF zls=QGy?fZ=+(@M>P3Y>@O{f44yU^fP>zNzIQ0(&O$JCd_!p?2;} zI6E1j@`DxzgJvqcE@zgapQ?tophO14`=14DUZ*#@%rRi``pi0lkNgidSsHGjXK8gO{drQoNqR&tRjM4>^DtW`)fiRFO4LE=Z+nCBS~|B3gZsh`Y?-$g z@8@Z$D7C!L9l=SWoE;(+*YirPLWvBd$5Ztn3J3EaGM+#pW#@{3%yksGqy(2Bt5PVE zf*fICtPp77%}5j#0G8<=v=)LR>-a3dxja8cy3m$=MZ2#$8mbLvxE%NptMd+L?mG`v zF1cANFv17DqP^P5)AYHDQWHk*s~HFq6OaJ3h#BUqUOMkh)~!(ptZ2WP!_$TBV}!@>Ta#eQS_{ffgpfiRbyw1f)X4S z_iU`lNuTy86;%!sF3yh?$5zjW4F?6E9Ts-TnA zDyx5p1h$Z3IsHv7b*Q{5(bkPc{f`2Wfxg*Z#IvQ;W_q9|GqXGj<@abo)FyPtzI~i25&o zC!cJR%0!}lLf^L2eAfZg7Z69wp{J?D6UhXr%vvAn?%)7Ngct4Hrs@LZqD9qFHYAWy z4l=2LI?ER&$He2n`RiG&nsfLv?8$Cl)&d8a-~-N`I|&EPa@Y=v@>0Gl?jlt>AUY;H z`**5bpS#VGhdp4pKbf3iEF*>-eXg_$bqt5Dc%q0+)R50>zd^l7sN5R5Z)Ut+oz-8_ zJ`Z9HE9(=wRTD)T=%GZTEi9K5naPzlfE$|3GYGLRCLsnqLi8Sc6y&iskqA&Z$#7Ng z7Q@C0)6k;J$TlQ+VKZ5)-Ff_BNoIMm+~!@Cv1yAUI-U!R)LHc@+nSUzo$GlRb+8W< zYPG%NFfr;!(RlnvBbN~~EpT6Xj5*^Z&73tdIQ$LZu`vkfzdTKa5|JJtQ_rm4g$9LO zKtgYVdW=b<2WGM3I_j|Rd8gZ3j;)S#AT(aP^d>9wrtQS_+K>pZDX^?mN!Z>f^jP@1 zlJ;i79_MgOAJa`%S9EdVn>ip{d!k6c5%zizdIoB9Nr!n`*X#%6xP1?vHKc6*6+vKx zmEt|f^02)S_u_wlW_<`7uLQU%{wdH0iojOf_=}2=(krE<*!~kn%==#0Zz`?8v@4gP zPB=-O-W=OO3tD19%eX>PZj3YfrCt0sEjgTd#b$buAgBri#)wW14x7QcHf2Cneuizz z368r7`zpf`YltXY9|2V{stf8VCHgKXVGjv$m!hdDf0gi`(Q!(Pyg~FO28Vr#!BYP| zI)qG2?Ho=1Us9dTml}-ZOR?g5Vk)f+r=dbCN*N1=qNfG>UCLeA8pd3Ub-pRx1b3FA zEn`CIMf`2Mt3>>#3RkE19o}aMzi^C`+Z>8iIPHSdTdmjCdJBtNmd9o0^LrJc9|U9c zD~=FUnSyghk7jScMWT|SHkP(&DK$Z=n&lGm+FDTpGxfoIyKV)H6^nY~INQ#=OtIT! zyB*J=(#oHf=S)MNOncW->!c0r0H#=2QzobO&f@x&Y8sYi-)Ld;83zO$9@nPPhD}yt z{P`*fT@Z(?YAmF{1)C;o?G@dfd2$c+=Av*|;P@Yz1KnclB-Z-fJQ-=+T*g>0B7!g# zQH{dHt_%wj=wlmT&m59)TQ~xK)gB6f^EY$=1zcbGf~Q>p_PzDCHR6lndGmqPY2)&w z$Th^K%1v@KeY-5DpLr4zeJcHqB`HqX0A$e)AIm(Y(hNQk5uqovcuch0v=`DU5YC3y z-5i&?5@i$icVgS3@YrU<+aBw+WUaTr5Ya9$)S>!<@Q?5PsQIz560=q4wGE3Ycs*vK z8@ys>cpbG8Ff74#oVzfy)S@LK27V5-0h|;_~=j1TTZ9_1LrbBUHb?)F4fc)&F7hX1v160!vJc!aRI>vp*bYK=CB(Qbtw7 zDr2O^J%%#zHa7M5hGBh#8(2IBAk}zdhAk$`=QYe^0P6Bb+j5X)Grmi$ z6YH?*kx9hX>KCI04iaM_wzSVD+%EWS)@DR&nWsSBc2VIZ>C(jX((ZiV0=cp}rtTO&|GMvbmE4FpBF5Rd z6ZG=>X&>N3?ZN2^11pXEP4L?XUo`qrwxgQm4X~RCttXmZAhnhu4KDK=VkKq?@@Q_Z za`*xyHrsAEsR zV(7)2+|h)%EHHLD3>Qg{>G|ns_%5g5aSzA#z91R zMDKNuIt@|t?PkPsjCxUy&fu^At*yUYdBV!R_KOyVb?DO&z$GLJh9~b|3ELsysL7U6 zp24`RH+;%C(!bWHtX&*bF!l-jEXsR_|K~XL+9c+$`<11IzZ4>se?JZh1Ds60y#7sW zoh+O!Tuqd}w)1VxzL>W?;A=$xf1Os={m;|NbvBxm+JC@H^Fj$J=?t2XqL|2KWl$3+ zz$K+#_-KW(t)MEg6zBSF8XqU$IUhHj+&VwsZqd7) ztjz$#CZrccfmFdi_1$#&wl~A*RisBaBy~)w|txu1QrvR1?)2mb&m2N$C(5MS%hSX)VJnb@ZGXB5^%(<#1L@ zL^>fBd+dEe`&hxXM<0A9tviIs^BDkByJdc~mtTYr!%F7Q1XnK2$%h$Ob30*hSP$Bt zDd#w{2Z%x^Wpv8!)hm>6u01mY!xmPgwZ#Q0148)SxJc3Udt!-&}eRO^LN ze26pQB!Jhg&Z>#FD>`C`sU44><=v>O>tJdLs!HPpV#AM32^J@Za-9J(CQjKxpzXao zQfRkWP%g9P8XV21MmoHfx{DICLSc*t4qVeQL9t}&Pz0rM}YTba@XsD=XMW@FxFM{QYQJHvM(JsUSa3mcTUl9^qcVA zBveO--fqw%{#QGR1vy;x88+qMcgzmcYc#8U`CPPt6bl?uj%w_`b~9JliftnOa|ziW z|6(q&STs_*0{KNa(Z79@{`X&JY1^+;Xa69b|Dd7D&H!hVf6&hh4NZ5v0pt&DEsMpo zMr0ak4U%PP5+e(ja@sKj)2IONU+B`cVR&53WbXAm5=K>~>@0Qh7kK*=iU^KaC~-ir zYFQA7@!SSrZyYEp95i%GCj*1WgtDId*icG=rKu~O#ZtEB2^+&4+s_Tv1;2OIjh~pG zcfHczxNp>;OeocnVoL-HyKU!i!v0vWF_jJs&O1zm%4%40S7_FVNX1;R4h^c1u9V@f z`YzP6l>w>%a#*jk(Y82xQ@`@L(*zD&H>NY`iH(iyEU5R$qwTKC5jm4>BikQGHp^)u z-RQ`UCa70hJaYQeA=HtU1;fyxkcB2oY&q&->r-G9pis)t$`508$?eDDueFdW=n5hJ z08lH$dKN$y#OEE@k{#|<%GYY=_c~fHfC@pD54KSP9{Ek@T47ez$;m$}iwR}3?)hbkwS$@p2iVH0IM$lB*XYA+#}-re|UNzCE)SOYwy z=Y!fkG4&I%3J(_H#UsV#SjHulRIVcpJ`utDTY{k&6?#fzt~@Om=L(vs6cxAJxkIWI z@H7)f2h%9!jl@C!lm+X4uu;TT6o0pd7 zteFQ(ND@djf#o2kTkjcgT=dHs7ukmP0&l8{f;o3JuHGd2Op*?p7?Ct=jA*tIg{MZk z$2Lsc0e8Tdcwrjx|_Ok?9uB3Il|^2FF%X#ck}WoIvrzQXN%kT$9NI{79Wm~gZ3`8I+O`)`n30feZ( zDO-fl6IG3c^8S;Y_M-)+^CmM0tT^g0?H#>H8!oC8W%oU!~3|DJ?)~LT9*&GAQG13zOGq6gs*={cu|(V7{R$y@{-iV*9q@AD(#Ktb}J&3&k|5Djs$)9WM7!6#EaJ_ilvbfUvyh8c?-{n zfuFrC0u6}UJZ7aj@(cNG_(CKgjQQTA-UK@-MVmick zot}6F%@jhq(*}!rVFp5d6?dg|G}M*moyLriI!PQDI;E1L1eOa6>F9E6&mdLD>^0jJ z09l?1PptuV65gm=)VYiv<5?*<+MH~*G|$~9Z3XEy@B1-M(}o&*Fr9Sv6NYAP#`h{p zbwbUE3xeJ;vD}QMqECN)!yvDHRwb7c1s6IRmW!094`?Fm!l~45w)0X`Hg+6Y0-xf# zSMemBdE)Q=e^58HR{kWrL5-H0X6pDu%o{0=#!KxGp0A;6{N5kI+EoY_eTE%2q|rwm zekNeLY-R?htk!YP2|@dbd8TWG4#G)=bXlE{^ZTb^Q$}Er zz)Fp)ul24tBtQFIegdI37`K$VR3tVdi<(fIsu{#QMx=$&CK9M8oN%3Mk;>ZPd-;Q- zn|sSKSnc-S0yrw#TlA$+p{J~u=u98s>IoL@cNLOxH=+1m?;t1bR$vR=M$US&Z8DO3 z_&zhQuId1$wVNsS=X?&s(ecIi#00o{kuPs6kpYkL$jMyGW8U7mlCVaZeEL=HsIxqm zFRLxWin8B>!Dc#9Z#t0RNQiR-@5J+=;tC7|1D*~rxcwHa5iIVD@99cCFE@BukUC-S z^iJdt?dwU)kH2VY9?|zVShMbZctzFRz5Q4tiXa^>@U%jDYq}$rSyc#p2wXr}mc0qq z^lT>$y)N(Qg0dwmEwTopneoU(y)>Mj+f{iHM0o|>ZtCg-itPj4addYz??aE)Rp&hk z_SI)%XeSf=SjZq18h!Cc>Xy&EynnxdHQ){(x@g|ZA%`3LU^KzX02c5N;F#tEk1)7v z(|V9tO3>?^X|kQ*rRBf4>mWW2$-Lx})|M7z125&VHcxsCqB!<$l1F$zCrJ+nm0f3Z z%Hq^=SKpHyV2@Y*Cu2x>fXC0SscnR*($zEB{KOniJcpn@e`PMH*_Q6*0Z^8RNCEvZ z+UU9!927p9YZ&g=bnUvQUZcdisyn;-4;ACXOe-Xor9K8Qbp{ldE17+G@VQT+9ZJQ*9dZoXfU2ue|mMhrrZk2R7&~YjFW4`BTq45UwVc6JORKU)wBCTanITh0GD}s$`C5pb(9{b9 znwee6j%?-UV)_7opOioCf5@C?@w^@g& z&68+oMmV;5JW@TT63&CSDrfYL2$L)pVseDtAwPwleEM3F^-Ufn3PpfxFmx6o zQ`Wq9x#d$e`VKn5LOXNsrqhGao7~|s(u~drPrZ+;aP!C%z4NskZstCbAibD}O%8Ij zb~C(taxco~WzJLxhL1T}3ctXMbV6}_z=IZN9L0|SxLSe`$X`<)BhM`$1&&)e_}fCh z=idVL<+u6Vn{&ksP*ZLlMo$fC`dtzF_?~L?4Rril2G4%v5^7sUa^&8aMtMX&mtapl zD(dW|cisM3fqMaB`8?QbkyiUl2g>hMB5EoS&IB8TdoC~)b$nT=`%GgU`k-)+8}`)F*~I~DXMaTP%kZftx11~?iALs5J+&Rom#p%Y z>dH}-euH4u=_V3hc6^*2WMtL!9%yRTJ93p}@aV0zdY*?xchFI>m+UivV=;aMFp0P~ zwB8P)wvV6D-GL?6hJ#g7Hy7=2i^&Od#S=j!;Rc_yjO!*4aN7{vqzg2t-R|Dav%_NDk z`H_FVlSi==(~f-#65VmQ{EE92x<03lwo5p)s=ZJ^L7PlS>132Whr zR6v~t(#I+(`usYLCoO;Rt8j&b^5g_xgs*98Gp|N}b>-`HtVm)MscD)71y?(K6DRCZV26RsHPHKk)EKKZA%C99t3$t^B0-k5@?E>A-YMbFe?>ms?J?_guHHNU(;id*>xH zTrtam+Aq?n@-y@uY@A?hy?1qX^eLu_RaH4Ave?A8NapgQF=C%XI7wlcCf4<6BRo_% zBXxxc*A6-3CruF?3i8HOdbc%>N=-iiOF+9HX|ht6SCkz;A^am&qi_I&qk1B(x<=(m z>QG)nswCOLl_1{SZ@_eE#m^qb6#6DoMsB*)`17ui+XvF%(}|J4G$z2G*;E!1ERnAH z@q%=#uV6kBddqy4=g>!VTV)9*1=i{wJ}Ep!I*?)uJdA(LwE?(!?;}_u=^M2NShWC_ z*7l4aBJ=!QVU2-iehgb`$vOI8zkm{W%QO~?xOD;NgI;Iqa3#^$^U5D&McReLe&qs# zR<^@QpR4#W~Laz+QBsPt@3L#KF`Yr8}jgHe;5(cfpQ=;Zjtbt;c%y^#-m=hqOT z;KAYakW+$w0&F}>K10&SiPcD9SrDOuczj@U#W})5jGU-_htU`U6Q%wdy((%?J}y+$ z=$4jw1N nJo)qTxG{D(`3*#8tY|67hJRF;)r6F|#I`Ar6I0aafRa=kr-Z0I^}9xf^u;G5iEQCbpv3b#S#%H|HYHsQaHK$! zU#3Fpz8*^pK%RRmX<_09eIVziB0jOgPgFnI-*QcwEBtBiO#v!>{W1cLNXyw3D9M|A z*oGy(u8BkDA1c;MsXmpK^-~pl=We^RYnhZ4bz*)Q)C2G+E3tgx9PzU0T>c|1ilS!T zyE=bz`=wskDiOi!@!l?Y))#%{FM`}7r~X)i1)1*c6_2Q!_1{)fp%cS|YF+Q-CB%d< z=zYus`Vt@Mx*a7V)=mpLS$-5viaKgNB=+zN657qy0qR94!cTtX-Z%KBCg4OKw7b=t zr=`7q5Ox=lJ%!G5WIyNQC1xpqYU0{!I$hyrk!6%De$gp<_*Gc?ES(OwY8U^)Kjgc{ zSlhpXDb|;{+y9`u{EuMz54rlky2~p6xX2>MV6BZ&k`$q%q7v(xYps2wr9e8^4<;CB zc)eAT~B^rjzO6<4BDDH;il6 zFsM8jL+agQ;zazW(uiQjM%fPf2N~_p{cy29XP11_lQFpt`t#9nlk}>fv((FZt-dBa zuMIc4HmPHW04n0TTG9ug9;&OV9euL$Ib|+M7}}L~z4e%%%b|r~6OQj(S2d7XfYn#xp8;KQ55UYu#gY*De5j6Cc z#R%?rqwpy7I1(kpU7B*Pq=etXeYUn04jg%ZPjYqQNa$==yTG=6KX+=;i2Xg+kjV2T*Gc!(ef z`Q4fR*TA=M5-}z+s%YO+!K{k}S**ic&>o4_Tmv$EQTOp7F6TXPCj-UTXy?OQ=%*y62Qajk{rXbR%jMCOFMiVE3KekQa4xR}B%=iPtd8BXo~q$OX_ zSp910{Ew;m|GATsq_XiJ3w@s(jrj^NDtr(Dp!`Ve!Oq?|EJ9=vY2>IfrV{rT%(jiY zi}W@jA2iqd=?q>s;3%?@oi7~Ndo3Ge-2!zX58j(w&zVlPuXm3rcHb7O0RsM|!Ys(b zh(=*&Aywo3vuJoWZnU!u2_4bNkDTc&&bCYc%T zM~~xYxS#3KXFzQ@OXdc%9QDOxqiTd_> zT;(DX9{5dIuC4pO_xy+3{Ov)1I7j!Z)6&nHUvTRP>VU5dm#849icG)cvl0QOPkCIzG^lOp4#UcNr`VhBp(Ha%8@KPlvT*5u!v_$b#b~%sn3K{mu zaxeD%Q~{;Lw03ZAq(Pc-IVj>n*h3l2{sqioCMGatQY0kx zi`1(WWDQ=;gmLSGptEQ%UFC)th@|71<8eiRtX&Mx@#1q#nMF_BMfQdS>!!Qkx2o}= zuqRi?`UOX5P3fP%M+71Q$ctH4Av}bXED#fQ`KR4!b~60nsAv^*M7c-x`|~B}XIuq% zlqIJOf>WvlhQ@Uw$du|14)tZ?; zPNZ|xZSwp1y+d4sut8E4*l2JWR|~o0A9vD-?zC-w zDc@=wE1YKb*OMSi_Kx}&w;#h3>sHp|8^hnA3w?-WK)X?@Z2dgV7`9Cupf-B2RE4x^ zwlw+~!V9C^tyb`J;m2}ksD`w}G9`yu(^--{SQ+wt^Fu4Li~Fft!3QO`upSkAU?o;# z(1Q%GUVWbbkTK-M=T+ULkk3s6Dc9`G4CO6|=&-S&D+rbJQ$`Y-xL~ol;kc(l)VbU>{&>bV+*?ua;$bnDc29RW+Ig16)Vf6=L|fMR_P2b7>6}0 zdlB#-gj|j*C~M=F^2=K*k~=tl6YM3SXXi&K-`EvEXnWz&4D-^hQRBJI3gKKDj^6|> z*WhHSim1qAffNt60Mve9lfw^+&0bx-AM0%j>QP3%W=S@(l=(nrJ678mRQ(#+sI@d{ zdb#5fo#T;hK7xJ=M58wZf|?DHwD%!OZ3JrTGV5#{cfQwuiMvz%!CQ}CubJ7`z?@rSF<+KHNV2goc)a6hP0oHB@3LLKSH2w{um&J*z1Ka2 zLIR>lvOvh>Oxe%?3A@v<_T|}${zf_&@C~^FCo#jB(W9VLO?DX{)n(BQ0(V0`mI|9Y z#U3WwxixJkU_NTvA>5q(A@r2dnEXJp#6B=pww$XGU}~1~c``UKqQb=^*2P|4Dq*_! zhY^i61Sy%T5$Td0O6^C>h(xVvT!}Y##WeT8+s+Uuz=7)~V$>!zU;%d>H)rm*6^IrsCma%|cifwDLk_ z!^W2voQ)D;I$=v2E>iSaBw!d7aD+|LWl2iD!cBw`Q5p1~fk_xGiPi8e^mY&#viTAk zmaKL8m;JQ4bY(n6uBZt02z#noMMxTfF-RzjKre-c+@B)#J3pN-Zv7F}JtAwNk3j?OkpVCL6W1)Q$FLAj zGI!tX;g`O{%pt=0|q54Jyj##w*4e*|_;Us2Tn?!#^R(>u}|FAw1G_ z#wQsagnj9$TAC`2B_XgB$wNq~Sxgl?#0+QWWcB{G`c6~&SosbtRt}Tukw`TQ!oG1= zYyL(y<;Wh+H24>=E}Gs=Hs2%fg;&Qdvr74{E!R?Bd zIRQ?{{xkLJ_44P@y3^#(Be%(pk%$liKbUUo76wSoVfJmt9iTKL3z{uW6L&?jYg>EY zsx{kRiW@q%<$VZvbS(TKKTO4{Ad6l^IeY(F^3}=mX9|FZmQ`~RErNxlBPl3ast}W$T4V?SW=6kIGn@-^`qJv| zZXwhK4Kl1a4E}nLI`rdOi?^pd6;LZ-|8G&INHgOeC5q{_#s+SXb0r(;5ryHFsoTJD zx$VtNDh=-Tx3t!NTlk=hgAaSM)#U}e>_-Ex(|JoX*hWmBPPdTIa-2(BIOUJ|Iddy| zwY*J%z%W$}*;uSoB!BIJB6N6UhQUIQE_yz_qzI>J^KBi}BY>=s6i!&Tc@qiz!=i?7 zxiX$U`wY+pL|g$eMs`>($`tgd_(wYg79#sL4Fo+aAXig?OQz2#X0Qak(8U8^&8==C z#-0^IygzQfJG4SWwS5vko2aaOJn*kM+f1-)aG{T43VJAgxdP(fJ4&U{XR90*#a)G8+clOwdF?hJ?D) zmxu>0>M|g_QRHe_7G|q6o`C>9x4xd$Gl7lAuR~+FtNid=%DRsnf}YI*yOToWO%xnP zY*1G5yDnTGv{{xg5FhWU65q3-|-(+-rJ2WCeSJn(7Az>ej4Jp9+l-GyZ_| zJ8}>iA4g|}q1AhEEv#uWR&$g&Uyht?fVU(qk(j?^D`))s>oG08pow!f>P1u71P%oL2)UC4GeS87&G?{)NE;D=my1Q9{~;y zJULE=bG6jXE28Y11YmoZoo945`MM*`v%5b=_02*0cwzDve#3(4M}NPt`)?SCa|7*q z-94ks(R6WH-l9fE4m4}10WSu&O`|;ZCIT%vL$_pbABY!}s33@~gIvZ0H4co|=_-T$ zF#lC7r`89_+RL9wYN=E3YwR?2{$^ki(KKd>smX(Wh*^VmQh|Ob5$n_%N{!{9xP~LJO0^=V?BK8AbCEFBhDd$^yih$>U z(o{RReCU{#zHSEavFNdc8Yt<%N9pd1flD{ZVSWQu*ea1t#$J5f6*6;tCx=&;EIN^S}*3s%=M#)`~=nz!&Q0&{EP|9nzWyS<#!QxP;!E8&3D}?QKh^ zqGum|+;xu9QE=F#fe2ws5+y1Igr&l`fLyLKry=1}(W+2W`waeOR`ZXlW1B{|;4sE3 zn^ZVlR11hiV~p<~TaSen8I~ay#7Ql=-_|U@$8yjZsZ=Vi+^`JV2+kn+oiSUi%omO_+7}saXnJ9 z5ETilbag(g#jZPopCgJu+n@(i7g}3EK2@N zd64$77H5a`i%b%a^iRjMaprwzWz(`=7E6QY)o)gek7H)yZ-BLw^6FAoHwTj9nJtWc ztKaytMlWGLg29W{?gr|rx&snb@XyvR_}x3fmC>d=-nQp5ab3*whTw}DfUcKlMDDx` z-%?ek^*|Kqooy#>2lfklZ|jN4X$&n6f)RNNPl(+0S>t(8xSeOGj~X0CGRrWmm(WXT z))DDW_t&y$D#2`9<-+JT0x1==26*gpWPV~IF=rePVF%e-I&y$@5eo~A+>yZ&z6&7> z*INESfBHGNegTWga&d@;n;FSCGyW?}e_Qw#GTLHo*fWxuuG@I~5VA!A1pOdRTiPA~ z^AGe(yo=9bwLJD}@oDf$d+34~=(vIuPtOKiP}obDc|?@hY}J*@V|UynBeAkYa?S{@ z_f$U=K+>deTAi&=a*xv>Ruyw$UsTWY=Yn=xjf;s)6NQu>_niQ_idmzIwuL`Scf)f= zyzK?D5a5)^D@H&qN%F6Zd0JeXX*Knbe~VLe^gi|?JK67&mB4jrapV-$`hCQT;C{%T z*pjxB+Y|~LD9bmMN%Iq}S$F$x1yWU7@GcR91V8h;!O2I5MN_rq*gRx(k8T!1WSDTp zr9eJO4$~H94aG^6k5p8k=kFJ>4lnY0q_Bsa$@vTRW6uY?slH|Qt)Yu6Yun&pfJ zBi!h;6x?FDs&79#PT*HSCEUsKws#s%TFy*=2PAfb`>gEPBn+D-WdfXA?MkB=<8kb_ z1+4D11mdHG0EcAyg4dneLtfJ8)RyHQl@6hWJNe(d_EjyCHf7%Xsd)S4A-4COz{G@% z5xQ!P>AS@H@;4Ws)N91)3A6PleMe2<& z!(zv#%Uc?N`(Xmm)OJPYt)BM`nRjoWA&P0Yxl@c9Y02zlPH1J5l$nhPrMwu=atkz4 z)a-1+OEL;d@ctx=s<<+3Sv1VYy0RYmiji|#hy$66#`5;u~BkH4^$EGZ-Y4xyZ=%3KuaeLYKAUr$xMtIh_5mga> zPz<#G0mQ7IxEw-yO}BueN}RaFlg$RwCDB)vLF$wDu%qZyLYsPKdcbHD23$qn9i#JFqIo#OK?u7db2-$GatzO!On87%}Br};~#}n zziVB;qf_4(K$u>Qyz$ln_kBGS!CD-t4Y}9oxL@7@Sx*?NOAzdeINUD>Hl#*V%pfA; zSA`==YatS*G*crJ3`3ll4)vKss&)UtY#7ZxiVoG%9(4<%`WWcjX2jV(^g7Yhj+h5J z$5=?S=tuCyEt74^6jo@6y|@~N>&cVfFNtaRl=)Gm!vR;Bc$3-;ySCI$%kdmjQ|si` z{$q_YCe6vjy6re9jGN|`43D``)1PODtz0)vhV4XV36nVpOnMx2uM%qZ<3TtcI%>BQ zf0(J`{JqPPJxw>k#&nIvoZ5e9Sno)B2r+E0G} z@&M|zf4E0Q$O*NBR2I;?i7N} z@2^Su#`%qeX}m3cbSojiLk#84kvW1fICNPS`OyT0SpUoA0(s^2m~J<^eKE!dhJx_N zG_T}0&(<*an>oF=@?6?55g&IxSgY3?7|@pmDRE6gJyJNPH6un~%0hZ@?h=hI6O$b^ z)29#<4$E)cE-5IFbRpk9JVrw$$966UDyw;Iym4OY4Fc!&s1ZH4BJ1-$9<)Zt1c)N- zU^&9hsk6z?3%<9kGKHW|6~k;&cghtWz`oz`_YjVuvy;B;T67=L2c6=8`7WyTBv*QH zNv*bo1#KOk{O&)@&pkd*?v+kcJ8tM>AGx$~WMhH{L40_N=bkrVg+^p!H)IqXCQf2_ z0fPig=8CEo>p4vE(nc^DKbZ|9_Xo}$i4zJ`jVh95; z5%aNP3@``=EJ=Vt9U`y+$YtX;%OPzgZ_3+;+mh{p#W&y4-%%Bf`LhOy-*kB0qnB^m z_nBTz_b?-`F$*ymByshU>D)za2g`0j^ioo;A#QeL@x3@|+_!=YXA5f6Xg(Ack&WOg zJ<2i|Fd6OmyH!@YSMVxb;=M)ZDhBt)4`5T*>cUXWPG#%@$&*>K&u3#|`fm2mj*FKVf?du{xZ}WKWETTFhq6_fO$PS5(ItF=3~pFp~*j z!ys1<4EL1)#{`mz@gW|t-FpPkd%pK)n_Rb)F;z7cQ6dym_>YI3&e!=!m006oS3Mjq{q ze%hNzW=G0jpfl2K(x`CDuZCsJV*hm9T~%5n7R_g}VFpk`G((D^MWVMAmRp--T{`P; zwMgD<;e`fm`g3|fPns|6qnd{|FCHY*YAguXH(?%sx%4+Gu|Y)_8mk4EljxmP+MP`* z`SUbI{TCIN2OV+$y#g->Jqv#$wL;}4xJmah#$0`v^ughM_XjTA$B}ux)JZuY5-GW4 zKy440I+w=ZtE-_i+0xImq}vyzD68?8;94-5L~_O6Ty>X3itdA-x?6P(c4jkr+f!H( zUDeqiG>3bn^Sf8(`_YwqPeJ9&-@OCQZm4X{FfRMeBtN4E9Ca@;GVpU*L>lVb;@=PH zTQvTr?^jKyCKh&ZVOI*<y%T*Aw(XCPrFC=39*y$A`FSzxBiQ#W+uW10d8&gYp4{teh;^p@anft+z$5!Hv&@h0X-@xJG>hbTCxjDwMiWK@1b%8wYL6BrV zT41m}tX8g-`P@vj4T!Mlk8F0S!MA`^J=SCy9-jdwDe^hVDa`WwyI^H@ryt=F5y6>b zT8&iI6&j8edAfX^ycgWbnMZQ26Q~`LmdEScKC8|~$Jgyw(>18NAQ$9AwCRmri!96L zp^)b0P2CR-9S%cG$#rU}MXnx21T#031o>2VrDs@sa-FpjfvgLPW>Q&LHUoNOtmkt# zoDZ=5OGp{^vO~=p29^`aXd8K?(+f-bW`N$U;-o;%f?RcR!k02Nod2h^^8ly%Z67#E zC3|IOuj~^YBO=Fklo@3mvd6I{Z*&FZ>iq* zxh|JuJoo2$p8MJ3zO@dQ;%1#~Mrm48 zB0053{1bDi_a@jo<4!@!`w4}B(&Qb`~IeSBh zu+_yIYl2Wgk+?x4pCmAM>x_SqBPUj#c`C`k>_fp@qPlAAwD$!zOxRkL7;=|nu(#ut zyF^;&hm-D_;ji{d6rOloACu5*NkF4IC3@rifMG(|^Skv$H&^YnYL*rpw=UCi;JOuz zN*NX(7wZXS4tF@6PIWAs%*j!$RoL*3sh)}iry%thDvN5AUM888q_(>|Tzt|Yea3AyMYBgm$H_`F^v2%)bux)3s znFIEBDK;-JS5SH|;1?afJb<*=c5puu=w%tv#ihn*R!^Hd$KWAp4$#`joJ*)$kNtZ z2Al6h>Z>(u?3tmzA4^d+jLKx{97!Pb4;CX&u;M||**7zXI7hO6nrdMx*Xa=|-`#1^ zBQ?Ha&7cd7hN=%y4yUp?zl8~Lo;%mQrDe8!ce-W_K94FFMN*g(w8q-_K5S+c0{o29X&PzpV;UJE^!xnFc%b@>kvW4m#xiOj-L*DadC&2N#0Us z;<-(m1WB7$=j6hjcPC6JB)D3T2#IC`ibu#yi!uK7W2!j|Z>~RaJ*&XXy#ytIk2DIp z5?Qd^s90_?ILjU#>ZWk5HXts}grg_!Gmgm!d?eLGR7xEP zvTCrslV~94ym5_i<5oqy(@@?wN}lIdtiY8=?|Ng!XeYnly`@9wCGx2S$3x|0x8T2h zz7A85Vb2>s44rKpI_4Y7_Pnd2^mYj2%^jM|Du>u4`^Psda^JIP%*DK6bo`Vf&f{!% zDTYCwF5Nhi=)QhU2$@eQv&ZzxsX+Hl+gP6kW|e!n9IU2>Vh~cioI{>4WvR}t*4Hpz z%5z?HjLGoka}Q3AbX9AkY|Yjf^M(>@tBAI9JO5pDCQu0R3Nns>)LC#vB2p96C*?K? zvX$un$sBDx$1=+NNj*@Oa@u*b@O*XBr_sg@8sCUq-|LK!MUmC)epklrv}5O_^<{NP zX16|c$9Wtbks3y7geI^tF5oRZJu;v zwkW8j+8Ccxo9stEDOT_Go&j%$KCgVO7pm+^%PKEPBZqbMw%s@732XS{cX+wCSjH1s z5)bc=g**<^NNsroY` z?}fHHlgu^B?2r{^^gQ&j zbF~T((>|Yg&C5WKL8DCnl1}Z3!YHFW2S1|;Xr0`Uz-;=FxEwYc4QpeAtnm7^f~uzX zl;xA!?>MLR?tL80Iudm;mi{!ewL91KhG7Hsa-XepKi<2mc6%zf0GwtbfJ1Zf-<@Xu z#|XWDzv|04t)&9Id!UxAAkN{t5qC%%8-WV3i;3duS19%m2||Y{!3pR1=g|zQYAMqc zff)_2nj-O4wfxy;UNM?|Uieo!^J$A*uDe>@V(NKH;KS;Y_dtE8${p>RdcrW;=2*fj4~d?OG0l-(g?ik}vz} z)5-wDppVts>K-=|@{=!53?=8)Jw#RGpS_FWpbwtn}{v!JEJ$q-sr7F6&OPBuI# zuVNFMPte79XgEu!P&qRq8u4J>r%$l-IQ00Lin90(_KtC)aR_de zxN=pY2<1b29_^AG2WJIGmmX4rv3$!`l15{e(H!1^+x9voZ6;882YAE12q7+lgy+>) zj|s0CyzI9=Mo!R}&LXB`&DYpZ7c?0r(&KNV+~TULd0y^e;G{KVR4nL0KvU9mr8&$^ zxrM-9P8zE`J?aZ(iB~Rz<{vvnk2HaZU#K$aVFfYnbAXVUOLU#As5JvS%+26 zi$sNuPY}dLGUS$0g&;oBqhzv2dY`l3@6Na403M!Sh${B|7(y|_cONa;6BrtUe@ZzV z7SThtHT8k?Rwc)(Z}@BP#H@JJHz&GR&M=E@P9KJ89yQKmRh&I~%vbL1L-K3E>7>CH z)Y!=jXVb1iPrAoAZZ3}3wU*5~nrV!ZjL5zqJ<@NwjHCZC>68Cc<{&E_#S;E*jOdjtg?uKN|l`P8sjz&Qf7a^z9 z;{3-8T+H4y99_zc;JYIvs!sk$G}` z??mt*Mm9Z@glCZb!X?!xXD-21sFDPEpZOK{sbQseQ$%6~b;n+*z0hRoR}0Pe>B|#t z$XrVcXv8M|q*Z8MY&r9J0A=d^1bHpjrUXu)qEj~$%%=gZp`^~%O*lzxUquG^p6;n; z^(3HL+hx4gRP?4N*b2p9!^|2~rcw3!9nQj$vmZusbXYz_x^AVc`3qBFm(jS9ueU5h z^AnNnbswfQ2Jq=W=T+p-V|nQco@bOAH$pLQZ+BKH8E$iM>IDz z3|wc?QP`yI=X5YTlp8h}%p6{Deq?S0QD$Ug>ih1SdPZg237Rl{S~=Ha4~-ckMoIWMn+X@@`V6 z#HHZj>MQbt$Qqp*9T(cjc^lxZ7UO(>PwzF-qEr(wo`vaulxdall|KP`7p4gd`23&Jy=#sAes*0diLB(U$Nx46VQvP)8idSs8^zaV91xw*O-JMH=)FoJshRob|_)O)ojtfP))WHCr(;*2;VMQ75^ zfN@a^f#o<|*9X;3IcGodLUz-3i~FAu+zI4c5h+nW^h_!^)b*B_xw-l4O$TB(ixaqW ziMoa%i=BeS<-F45kMO;Tw|FWa`G2c!SuOA3CbowPhF6csf1|&qqugUrj;UgGHm| z;j^yoH?MZhR;AYOW_XW2Lg2j%%ejL)B@*bUMD`g<#Z${1+fa57r7X82 zcqY-cfPnK%Y^3@szRner zt)bBToYCph6Jv*W+&t?&9FG4(Iu2w46 z4B#AcFy_^J@f*6<{>CN}Sj969*DYV*e7<61U>GoN{tz!Do90+jApFueVY_IW(MQF; zl?4yA_(MvMwN&pWKVyg{3uU_+y6RMdot2vu%mC?st=N0pf-~JZXE?3JFf)j<{1xsU z`2ephz)#HzsWEP!inHm2hI(V(~@W zY7gGU-lO52cHD&SY)>QHgy$=>^X%u0TQZfCizro!*weMyvZC=;MWOawdAx~`3C*W` z%^#^$uRP;gyqEE0<(i8xcQY$oc+6mY#z{-XFxsO1(cN8Y)>p;^q9|5bk`Z*p|c!?(rErw#y;yT(%@c7trQBv6cj)$3>pI z>tz+;IB?D=aQV=s(n)o63*yn8dX1m7#Z4G{%fF@K2o5n3jxR~mU?nzMi#;}8e#(>{ zy{Z4!AI)jZ8TY;nq1aq}tq;~=zzoTv)er06oeX3;9{uP{LWR*2%9cmE%S^`~!BW>X zn3PZFTf3g*dG68~^1*q@#^Ge(_8puPEFLD8OS|0b2a{5e=N4S%;~f3tC>F6UxK#v9 z)N-#Mv8=ePCh1KsUKD1A8jF_%$MPf|_yCN9oy%*@um6D{w*2|4GY zb}gafrSC+f=b*W{)!a!fqwZ9)K>fk=i4qf!4M?0v{CMNTo2A9}mQzV=%3UT&i{3{W z>ulG#M!K7%jPf6Mjff9BMslgQq3zIogY);Cv3v;&b#;^=sh#(Bn%W)H*bHNaLwdpq z85%fUTUJJNjYO_426T2TBj0D{6t zw&S_HZ|C?pI_2q(9Fas&@uJs6nVX;P*5K#6p|#)_(8PM-{L(;2wl`ma{ZAd5gA)?y z>0GSLoK<*FwW+G8@-M3vcffg7I(qm7lzF)n`Q9iCvp*mn7=|CjlpG{x z&r0n}XLWZ!>=lynUr7D`6n`7a_ZgT< zm!i;&?Fb0Q2QmqmCHfZ7ex=_tU~(7b)L?RIvPyEAU=gLIZ-VTAA~WR00yKyTXg^(G zqWLZJs!FnQYMOH3*fN&Tn(IKMLf{Ki?pRo8zZJ6YVyj)y0^)-sR}2-)%mI(Aw2AgT zbbp1T{qB(OSNJd0cVBH^tI>HR(q+#*lmi@LWe*rZz&M2h1L_=50uZ1e*n#E*`6?aw zj`ka&JpceRGe@}Ey1)Q~O}0qHRg4K_u>4e1arvJ7Q9!=t5AuzG`n=a-f0}{+lnCE#zu$`oVn44eS&T?N*wz~t~E&oQDBrB_MSg z_yVrQehWbD0xHX|v-hpselAu;O7s;P*!uAT`dr~}Lie=tknaGoiU?;*8Cwgala-65 zosOB4mATbdXJFujzgA4?UkCKE093A1KM?W&Pw>A?IACqg1z~IZYkdP70EeCfjii(n z3k%ax?4|rY(87N&_vhsyVK1zp@uils|B%`(V4e3%sj5f|i(eIhiSg-fHK1Pb0-mS^ zeh?WA7#{hhNci5e;?n*iVy|)iJiR>|8{TN3!=VBC2dN)~^ISSW_(g<^rHr$)nVrdA z39BMa5wl5q+5F@)4b%5-> zA^-P20l_e^S2PTa&HE2wf3jf)#)2ITVXzndeuMpPo8}kphQKhegB%QO+yBpDpgkcl z1nlPp14#+^bIA7__h16pMFECzKJ3p4`;Rf$gnr%{!5#oG42AH&X8hV8061%4W91ku z`OW_hyI+uBOqYXkVC&BqoKWmv;|{O|4d#Nay<)gkxBr^^N48(VDF7Sj#H1i3>9138 zkhxAU7;M)I18&d!Yw!V9zQA0tp(G4<8U5GX{YoYCQ?p56FxcD-2FwO5fqyx@__=$L zeK6Sg3>XQv)qz1?zW-k$_j`-)tf+yRU_%fXrenc>$^70d1Q-W?T#vy;6#Y-Q-<2)+ z5iTl6MA7j9m&oBhRXTKr*$3gec z3E;zX457RGZwUvD$l&8e42Qb^cbq>zYy@ive8`2N9vk=#6+AQlZZ7qk=?(ap1q0n0 z{B9Fte-{Gi-Tvax1)M+d1}Fyg@9X~sh1m|hsDcZuYOnxriBPN;z)q3<=-yBN2iM6V A?*IS* literal 0 HcmV?d00001 diff --git a/service-verificationcode/.mvn/wrapper/maven-wrapper.properties b/service-verificationcode/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..462686e --- /dev/null +++ b/service-verificationcode/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/service-verificationcode/mvnw b/service-verificationcode/mvnw new file mode 100644 index 0000000..66df285 --- /dev/null +++ b/service-verificationcode/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/service-verificationcode/mvnw.cmd b/service-verificationcode/mvnw.cmd new file mode 100644 index 0000000..95ba6f5 --- /dev/null +++ b/service-verificationcode/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/service-verificationcode/pom.xml b/service-verificationcode/pom.xml new file mode 100644 index 0000000..79f0d62 --- /dev/null +++ b/service-verificationcode/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + + online-taxi-public + com.mashibing + 1.0-SNAPSHOT + + + com.mashibing + service-verificationcode + 0.0.1-SNAPSHOT + service-verificationcode + Demo project for Spring Boot + + 1.8 + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplication.java b/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplication.java new file mode 100644 index 0000000..3641d96 --- /dev/null +++ b/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplication.java @@ -0,0 +1,15 @@ +package com.mashibing.serviceverificationcode; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +public class ServiceVerificationcodeApplication { + + public static void main(String[] args) { + SpringApplication.run(ServiceVerificationcodeApplication.class, args); + } + +} diff --git a/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/NumberCodeController.java b/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/NumberCodeController.java new file mode 100644 index 0000000..40565b7 --- /dev/null +++ b/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/NumberCodeController.java @@ -0,0 +1,32 @@ +package com.mashibing.serviceverificationcode.controller; + +import com.mashibing.internal.common.dto.ResponseResult; +import com.mashibing.internal.common.response.NumberCodeResponse; +import net.sf.json.JSONObject; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class NumberCodeController { + + @GetMapping("/numberCode/{size}") + public ResponseResult numberCode(@PathVariable("size") int size){ + System.out.println("size"+ size); + + // 获取随机值 + double mathRandom = (Math.random()*9 +1)*(Math.pow(10,size-1)); + System.out.println(mathRandom); + + int resultInt = (int)mathRandom; + System.out.println("generator src code" +resultInt); + + + // 定义返回值 + NumberCodeResponse response =new NumberCodeResponse(); + response.setNumberCode(resultInt); + + return ResponseResult.success(response); + } + +} diff --git a/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/TestController.java b/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/TestController.java new file mode 100644 index 0000000..7087c54 --- /dev/null +++ b/service-verificationcode/src/main/java/com/mashibing/serviceverificationcode/controller/TestController.java @@ -0,0 +1,13 @@ +package com.mashibing.serviceverificationcode.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TestController { + + @GetMapping("/test") + public String test(){ + return "service-verificationcode"; + } +} diff --git a/service-verificationcode/src/main/resources/application.yml b/service-verificationcode/src/main/resources/application.yml new file mode 100644 index 0000000..4b549b2 --- /dev/null +++ b/service-verificationcode/src/main/resources/application.yml @@ -0,0 +1,11 @@ +server: + port: 8082 + +spring: + cloud: + nacos: + discovery: + access-key: 127.0.0.1:8848 + + application: + name: service-verificationcode \ No newline at end of file diff --git a/service-verificationcode/src/test/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplicationTests.java b/service-verificationcode/src/test/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplicationTests.java new file mode 100644 index 0000000..aa05bec --- /dev/null +++ b/service-verificationcode/src/test/java/com/mashibing/serviceverificationcode/ServiceVerificationcodeApplicationTests.java @@ -0,0 +1,13 @@ +package com.mashibing.serviceverificationcode; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ServiceVerificationcodeApplicationTests { + + @Test + void contextLoads() { + } + +}