# Business Logic — KKW05602SFLogic.actionTokiUpdInit() [241 LOC]

| Field | Value |
|-------|-------|
| Fully Qualified Name | `eo.web.webview.KKW05602SF.KKW05602SFLogic` |
| Layer | Controller / Screen Logic (webview layer) |
| Module | `KKW05602SF` (Package: `eo.web.webview.KKW05602SF`) |

## 1. Role

### KKW05602SFLogic.actionTokiUpdInit()

This method is the **initial display handler** for the Toki (トウキ / Activation Request) Update and Cancellation screen. It is responsible for preparing all data needed to render the screen where a K-Opticom customer service representative can review and modify an existing activation request (トウキ登録 / activation registration) for an eo Hikari (fiber) subscriber.

The method supports two entry scenarios: a **first-time initial display** (mode=1), where the data map must exist in the session, and a **re-display after activation registration category change** (mode=2), where the existing data map is reused without re-validation. In both cases, it retrieves the customer contract succession list (引継ぎ情報) from the previous screen's data bean — including SYSID, service contract number, service detail number, and movement category — and sets these values back onto the bean for downstream screen rendering.

The core of the method executes a **unified batch service invocation** (invokeService) against the KKSV0170 module (KKSV0170 / Customer Agreement Review), which issues 22+ individual SC (Service Component) calls to fetch customer consent records, service detail details, activation period parameters, movement reservations, code name management data, address change records, work item data, and phone number consent status. After the service invocation completes, the method performs **contract status validation** via `initDispCheck` to determine whether the customer is eligible to proceed (services in "service provision", "rescinded", or "suspended" state block navigation). When the movement category indicates "eo Hikari / Forwarding-Transfer Toki Setting" (IDO_DIV = "00046"), it additionally validates work item, management, and address-change states through `initAddressChangeCheck`.

Finally, the method configures all screen-display fields by populating Toki (activation) information from the retrieved data bean via `setTokiInfoFromDB`, setting the operation date, and preparing the reservation phone number dropdown list via `setRsvTelNoPullDownList`. The method always returns `true`, indicating successful initialization — or returns `true` early to signal that navigation to the main screen should be blocked due to validation failure (error messages are set on the bean during those checks).

## 2. Processing Pattern (Detailed Business Logic)

```mermaid
flowchart TD
    START(["actionTokiUpdInit(mode)"])
    CHECK_BEAN(["Check bean is not null"])
    THROW_BEAN(["Throw Exception"])

    CHECK_MODE["mode != 2 ?"]
    CHECK_MAP["isDataMapExsit() ?"]
    THROW_MAP(["Throw Exception"])

    GET_OPE_DATE["JCCWebCommon.getOpeDate(this, null)"]
    SET_OPE_DATE["Set UNYO_YMD to bean"]

    GET_CUST_LIST["bean.getDataBeanArray(CUST_KEI_HKTGI_LIST)"]
    GET_CUST_BEAN["getDataBean(0) from list"]

    SET_SYSID["Set SYSID to bean"]
    SET_SVC_KEI_NO["Set SVC_KEI_NO to bean"]
    SET_SVC_KEI_UCWK_NO["Set SVC_KEI_UCWK_NO to bean"]
    SET_IDO_DIV["Set IDO_DIV to bean"]

    CREATE_MAPS["Create paramMap2, inputMap2, outputMap2
Create KKSV0170_KKSV0170OPDBMapper"]
    SET_UC_OP["Set UCID_KKSV0170, OPID_KKSV0170OP"]

    SET_UPPER_01["mapper2.setKKSV017001SC(customer consent)"]
    SET_UPPER_02["mapper2.setKKSV017002SC(service contract consent)"]
    SET_UPPER_03["mapper2.setKKSV017003SC(service detail consent)"]
    SET_UPPER_04["mapper2.setKKSV017004SC(eo phone detail consent)"]
    SET_UPPER_05["mapper2.setKKSV017005SC(phone reservation)"]
    SET_UPPER_06["mapper2.setKKSV017006SC(forwarding registration code)"]
    SET_UPPER_07["mapper2.setKKSV017007SC(forwarding type code)"]
    SET_UPPER_08["mapper2.setKKSV017008SC(code presence)"]
    SET_UPPER_09["mapper2.setKKSV017009SC(activation period)"]
    SET_UPPER_10["mapper2.setKKSV017010SC(activation content - suspension)"]
    SET_UPPER_11["mapper2.setKKSV017011SC(activation content - transfer)"]
    SET_UPPER_12["mapper2.setKKSV017012SC(activation content - suspension+contact)"]
    SET_UPPER_13["mapper2.setKKSV017013SC(movement reservation list)"]
    SET_UPPER_14["mapper2.setKKSV017014SC(service detail eo phone list)"]
    SET_UPPER_15["mapper2.setKKSV017015SC(movement reservation detail)"]
    SET_UPPER_16["mapper2.setKKSV017016SC(phone list SSID)"]
    SET_UPPER_17["mapper2.setKKSV017017SC(address change list)"]
    SET_UPPER_18["mapper2.setKKSV017018SC(address change consent)"]
    SET_UPPER_19["mapper2.setKKSV017019SC(address change detail)"]
    SET_UPPER_20["mapper2.setKKSV017020SC(service contract work item list)"]
    SET_UPPER_21["mapper2.setKKSV017021SC(work item consent)"]
    SET_WORK["mapper2.setWORK()"]
    SET_TELNOSTAT["mapper2.setTELNOSTATJUDGECC()"]
    SET_UPPER_22["mapper2.setKKSV017022SC(phone consent)"]

    INVOKE_SERVICE["invokeService(paramMap2, inputMap2, outputMap2)"]

    GET_LOWER_01["mapper2.getKKSV017001SC()"]
    GET_LOWER_02["mapper2.getKKSV017002SC()"]
    GET_LOWER_03["mapper2.getKKSV017003SC()"]
    GET_LOWER_04["mapper2.getKKSV017004SC()"]
    GET_LOWER_05["mapper2.getKKSV017005SC()"]
    GET_LOWER_06["mapper2.getKKSV017006SC()"]
    GET_LOWER_07["mapper2.getKKSV017007_2SC()"]
    GET_LOWER_08["mapper2.getKKSV017008SC()"]
    GET_LOWER_09["mapper2.getKKSV017009SC()"]
    GET_LOWER_10["mapper2.getKKSV017010SC()"]
    GET_LOWER_11["mapper2.getKKSV017011SC()"]
    GET_LOWER_12["mapper2.getKKSV017012SC()"]
    GET_LOWER_13["mapper2.getKKSV017013SC()"]
    GET_LOWER_14["mapper2.getKKSV017014SC()"]
    GET_LOWER_15["mapper2.getKKSV017015SC()"]
    GET_LOWER_16["mapper2.getKKSV017016SC()"]
    GET_LOWER_18["mapper2.getKKSV017018SC()"]
    GET_LOWER_21["mapper2.getKKSV017021SC()"]
    GET_LOWER_22["mapper2.getKKSV017022SC()"]

    CHECK_ERR_FLG["inputMap2.containsKey(KKSV017022SC) ?"]
    GET_ERR_FLG["JZMWebCommon.getSearchErrFlg()"]
    SET_ERR_FLG["TELNO_SEARCH_ERRFLG = getSearchErrFlg"]

    CHECK_DISP["initDispCheck(paramBean)"]
    RETURN_DISP_TRUE(["return true (block redirect)"])

    GET_IDO_KBN["Get IDO_DIV from bean"]
    CHECK_IDO_KBN["IDO_KBN_TEL_ITEN_TOKI == IDO_DIV ?
(= \"00046\")"]

    GET_KOJI_STATE["mapper2.getKojiakStat()"]
    GET_MANS_STATE["mapper2.getMansKojiakStatCd()"]
    GET_ADCHG_STATE["mapper2.getAdchgStat()"]

    CHECK_ADDR["initAddressChangeCheck(koji, mans, adchg)"]
    RETURN_ADDR_TRUE(["return true (block redirect)"])

    GET_SVC_LIST["bean.getDataBeanArray(EKK0191A010DETAILLIST)"]
    GET_SVC_BEAN["getDataBean(0) from svc list"]

    SET_TOKI_INFO["setTokiInfoFromDB(bean, custBean, svcBean, mode)"]
    SET_OPE_DATE_2["Set UNYO_YMD to bean (again)"]

    GET_IDO_DIV_2["Get IDO_DIV from custKeiHktgiBean"]
    GET_TELNO["Get TELNO from svcUtwkEoTelBean"]
    SET_RSV_TEL["setRsvTelNoPullDownList(paramBean, custBean, idoDiv, mapper2, telNo)"]

    LOG_DUMP["JSYwebLog.println(DataBean_Dump, dumpDatabean())"]
    RETURN_TRUE(["return true"])

    START --> CHECK_BEAN
    CHECK_BEAN -->|is null| THROW_BEAN
    CHECK_BEAN -->|not null| CHECK_MODE
    CHECK_MODE -->|mode == 2, skip| SET_OPE_DATE
    CHECK_MODE -->|mode != 2| CHECK_MAP
    CHECK_MAP -->|exists| SET_OPE_DATE
    CHECK_MAP -->|not exists| THROW_MAP

    SET_OPE_DATE --> GET_CUST_LIST
    GET_CUST_LIST --> GET_CUST_BEAN
    GET_CUST_BEAN --> SET_SYSID
    SET_SYSID --> SET_SVC_KEI_NO
    SET_SVC_KEI_NO --> SET_SVC_KEI_UCWK_NO
    SET_SVC_KEI_UCWK_NO --> SET_IDO_DIV
    SET_IDO_DIV --> CREATE_MAPS

    CREATE_MAPS --> SET_UC_OP
    SET_UC_OP --> SET_UPPER_01
    SET_UPPER_01 --> SET_UPPER_02
    SET_UPPER_02 --> SET_UPPER_03
    SET_UPPER_03 --> SET_UPPER_04
    SET_UPPER_04 --> SET_UPPER_05
    SET_UPPER_05 --> SET_UPPER_06
    SET_UPPER_06 --> SET_UPPER_07
    SET_UPPER_07 --> SET_UPPER_08
    SET_UPPER_08 --> SET_UPPER_09
    SET_UPPER_09 --> SET_UPPER_10
    SET_UPPER_10 --> SET_UPPER_11
    SET_UPPER_11 --> SET_UPPER_12
    SET_UPPER_12 --> SET_UPPER_13
    SET_UPPER_13 --> SET_UPPER_14
    SET_UPPER_14 --> SET_UPPER_15
    SET_UPPER_15 --> SET_UPPER_16
    SET_UPPER_16 --> SET_UPPER_17
    SET_UPPER_17 --> SET_UPPER_18
    SET_UPPER_18 --> SET_UPPER_19
    SET_UPPER_19 --> SET_UPPER_20
    SET_UPPER_20 --> SET_UPPER_21
    SET_UPPER_21 --> SET_WORK
    SET_WORK --> SET_TELNOSTAT
    SET_TELNOSTAT --> SET_UPPER_22

    SET_UPPER_22 --> INVOKE_SERVICE
    INVOKE_SERVICE --> GET_LOWER_01
    GET_LOWER_01 --> GET_LOWER_02
    GET_LOWER_02 --> GET_LOWER_03
    GET_LOWER_03 --> GET_LOWER_04
    GET_LOWER_04 --> GET_LOWER_05
    GET_LOWER_05 --> GET_LOWER_06
    GET_LOWER_06 --> GET_LOWER_07
    GET_LOWER_07 --> GET_LOWER_08
    GET_LOWER_08 --> GET_LOWER_09
    GET_LOWER_09 --> GET_LOWER_10
    GET_LOWER_10 --> GET_LOWER_11
    GET_LOWER_11 --> GET_LOWER_12
    GET_LOWER_12 --> GET_LOWER_13
    GET_LOWER_13 --> GET_LOWER_14
    GET_LOWER_14 --> GET_LOWER_15
    GET_LOWER_15 --> GET_LOWER_16
    GET_LOWER_16 --> GET_LOWER_18
    GET_LOWER_18 --> GET_LOWER_21
    GET_LOWER_21 --> GET_LOWER_22

    GET_LOWER_22 --> CHECK_ERR_FLG
    CHECK_ERR_FLG -->|contains key| GET_ERR_FLG
    CHECK_ERR_FLG -->|not contains| CHECK_DISP
    GET_ERR_FLG --> SET_ERR_FLG
    SET_ERR_FLG --> CHECK_DISP

    CHECK_DISP -->|checkOk=true| GET_IDO_KBN
    CHECK_DISP -->|checkOk=false| RETURN_DISP_TRUE

    GET_IDO_KBN --> CHECK_IDO_KBN
    CHECK_IDO_KBN -->|matches 00046| GET_KOJI_STATE
    CHECK_IDO_KBN -->|not match| SET_TOKI_INFO

    GET_KOJI_STATE --> GET_MANS_STATE
    GET_MANS_STATE --> GET_ADCHG_STATE
    GET_ADCHG_STATE --> CHECK_ADDR

    CHECK_ADDR -->|checkOk=true| GET_SVC_LIST
    CHECK_ADDR -->|checkOk=false| RETURN_ADDR_TRUE

    GET_SVC_LIST --> GET_SVC_BEAN
    GET_SVC_BEAN --> SET_TOKI_INFO
    SET_TOKI_INFO --> SET_OPE_DATE_2
    SET_OPE_DATE_2 --> GET_IDO_DIV_2
    GET_IDO_DIV_2 --> GET_TELNO
    GET_TELNO --> SET_RSV_TEL
    SET_RSV_TEL --> LOG_DUMP
    LOG_DUMP --> RETURN_TRUE
```

**CRITICAL — Constant Resolution:**

| Constant Name | Actual Value | Business Meaning |
|--------------|-------------|------------------|
| `JKKCommonConst.IDO_DIV_VALUE_00046` | `"00046"` | Movement category code for "eo Hikari / Forwarding-Transfer Toki Setting" — identifies when this method must perform additional address-change validation |
| `JKKCommonConst.FUNC_CODE_1` | `"1"` | Function code for read operations (search/view) |
| `JKKCommonConst.FUNC_CODE_2` | `"2"` | Function code for consent/review operations |
| `JKKCommonConst.FUNC_CODE_3` | `"3"` | Function code for code management (lookup) |
| `JKKCommonConst.FUNC_CODE_4` | `"4"` | Function code for phone list lookup (SSID) |
| `JKKCommonConst.UCID_KKSV0170` | UCID value | Use-case ID for KKSV0170 module (Customer Agreement Review) |
| `JKKCommonConst.OPID_KKSV0170OP` | OPID value | Operation ID for KKSV0170 operation |
| `X31CWebConst.DATABEAN_SET_VALUE` | Set marker | Signal for setting a value in the data bean |
| `X31CWebConst.DATABEAN_GET_VALUE` | Get marker | Signal for retrieving a value from the data bean |
| `KKW05602SFConst.CUST_KEI_HKTGI_LIST` | `引継ぎ情報` | Customer contract succession list DataBean key |
| `KKW05602SFConst.EKK0191A010DETAILLIST` | `サービス契約内訳<eo光電話>一斉照会詳細` | Service detail eo phone list DataBean key |
| `KKW05602SFConst.SYSID_11` | SYSID field (11th version) | SYSID field on customer succession bean |
| `KKW05602SFConst.SVC_KEI_NO_11` | Service contract number (11th version) | Service contract number on customer succession bean |
| `KKW05602SFConst.SVC_KEI_UCWK_NO_11` | Service detail number (11th version) | Service detail work number on customer succession bean |
| `KKW05602SFConst.IDO_DIV_11` | Movement category (11th version) | Movement category code on customer succession bean |
| `JPCModelConstant.SEARCH_ERR_FLG_ZERO` | `"0"` | Search result flag indicating "no error" (used in downstream validation) |

## 3. Parameter Analysis

| No | Parameter Name | Type | Business Description |
|----|---------------|------|---------------------|
| 1 | `mode` | `int` | Entry scenario flag for the initialization process. Value `1` indicates a **first-time initial display** of the Toki Update/Cancellation screen, where the data map must be validated from the session. Value `2` indicates a **re-display after the activation registration category was changed** (トーキ登録区分変更から), where the existing data map is reused without re-validation. All other values are not documented but will be treated as first-time initial display (mode != 2 triggers the data map check). |

**Instance fields / external state read:**

| Field | Type | Business Description |
|-------|------|---------------------|
| `bean` (via `super.getServiceFormBean()`) | `X31SDataBeanAccess` | The screen's data bean containing all form data and the data map from the previous screen |
| `TELNO_SEARCH_ERRFLG` | `String` | Instance field that stores the phone number search error flag, populated from the SC response to indicate whether the phone consent search returned any data or encountered an error |
| `DEBUG_LOG` | `Logger` | Debug logger instance used for logging the work item state, management state, and address change state values during the IDO_DIV=00046 branch |

## 4. CRUD Operations / Called Services

### Pre-computed evidence from code analysis graph:

The method performs a single unified service invocation (`invokeService`) against the **KKSV0170 module** (Customer Agreement Review / お客様一斉照会), which aggregates 22 Service Component (SC) operations plus a common component. All SC codes follow the pattern `KKSV0170xxSC` and are categorized as **Read (R)** operations — they retrieve customer consent records, service details, activation parameters, movement reservations, code name management data, address change records, work item data, and phone consent status for screen display.

| CRUD | SC / CBS | SC Code | Entity / DB | Operation Description |
|------|----------|---------|-------------|----------------------|
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017001SC` | `KKSV017001SC` | - | Set upper: Customer consent review (お客様一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017001SC` | `KKSV017001SC` | - | Get: Customer consent review (お客様一斉照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017002SC` | `KKSV017002SC` | - | Set upper: Service contract consent review (サービス契約一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017002SC` | `KKSV017002SC` | - | Get: Service contract consent review (サービス契約一斉照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017003SC` | `KKSV017003SC` | - | Set upper: Service detail consent review (サービス契約内訳一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017003SC` | `KKSV017003SC` | - | Get: Service detail consent review (サービス契約内訳一斉照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017004SC` | `KKSV017004SC` | - | Set upper: Service detail eo phone consent review (サービス契約内訳:eo光電話一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017004SC` | `KKSV017004SC` | - | Get: Service detail eo phone consent review (サービス契約内訳:eo光電話一斉照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017005SC` | `KKSV017005SC` | - | Set upper: Phone reservation list review (電話番号予約一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017005SC` | `KKSV017005SC` | - | Get: Phone reservation list review (電話番号予約一斉照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017006SC` | `KKSV017006SC` | - | Set upper: Code name management review (transfer Toki registration code) (コード名管理照会:移転トウキ登録コード) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017006SC` | `KKSV017006SC` | - | Get: Code name management review (transfer Toki registration code) (コード名管理照会:移転トウキ登録コード) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017007SC` | `KKSV017007SC` | - | Set upper: Code name management review (transfer Toki type code) (コード名管理照会:移転トウキ種類コード) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017007_2SC` | `KKSV017007_2SC` | - | Get: Code name management review (transfer Toki type code) — uses _2SC variant for update screen |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017008SC` | `KKSV017008SC` | - | Set upper: Code name management review (presence/absence code) (コード名管理照会:有無コード) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017008SC` | `KKSV017008SC` | - | Get: Code name management review (presence/absence code) (コード名管理照会:有無コード) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017009SC` | `KKSV017009SC` | - | Set upper: Business parameter management review (Toki execution period) (業務パラメータ照会:トウキ実施期間) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017009SC` | `KKSV017009SC` | - | Get: Business parameter management review (Toki execution period) (業務パラメータ照会:トウキ実施期間) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017010SC` | `KKSV017010SC` | - | Set upper: Business parameter management review (Toki content - suspension proposal) (業務パラメータ照会:トウキ内容(休止案内)) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017010SC` | `KKSV017010SC` | - | Get: Business parameter management review (Toki content - suspension proposal) (業務パラメータ照会:トウキ内容(休止案内)) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017011SC` | `KKSV017011SC` | - | Set upper: Business parameter management review (Toki content - transfer number proposal) (業務パラメータ照会:トウキ内容(移転番号案内)) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017011SC` | `KKSV017011SC` | - | Get: Business parameter management review (Toki content - transfer number proposal) (業務パラメータ照会:トウキ内容(移転番号案内)) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017012SC` | `KKSV017012SC` | - | Set upper: Business parameter management review (Toki content - suspension + contact proposal) (業務パラメータ照会:トウキ内容(休止案内かつ連絡先案内)) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017012SC` | `KKSV017012SC` | - | Get: Business parameter management review (Toki content - suspension + contact proposal) (業務パラメータ照会:トウキ内容(休止案内かつ連絡先案内)) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017013SC` | `KKSV017013SC` | - | Set upper: Movement reservation list review (移動予約一覧照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017013SC` | `KKSV017013SC` | - | Get: Movement reservation list review (移動予約一覧照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017014SC` | `KKSV017014SC` | - | Set upper: Service detail eo phone list review by service contract number (サービス契約内訳<eo光電話>一覧照会(サービス契約番号)) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017014SC` | `KKSV017014SC` | - | Get: Service detail eo phone list review by service contract number (サービス契約内訳<eo光電話>一覧照会(サービス契約番号)) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017015SC` | `KKSV017015SC` | - | Set upper: Movement reservation list review by service detail number (移動予約一覧照会(サービス契約内訳番号)) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017015SC` | `KKSV017015SC` | - | Get: Movement reservation list review by service detail number (移動予約一覧照会(サービス契約内訳番号)) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017016SC` | `KKSV017016SC` | - | Set upper: Phone list review by SSID (電話番号一覧照会(SSID)) — uses FUNC_CODE_4 (changed from FUNC_CODE_3) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017016SC` | `KKSV017016SC` | - | Get: Phone list review by SSID (電話番号一覧照会(SSID)) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017017SC` | `KKSV017017SC` | - | Set upper: Address change detail list review (change prior ID) (住所変更詳細一覧照会(変更前識別番号)) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017017SC` | `KKSV017017SC` | - | *(Not called — commented out in get phase)* |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017018SC` | `KKSV017018SC` | - | Set upper: Address change consent review (住所変更一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017018SC` | `KKSV017018SC` | - | Get: Address change consent review (住所変更一斉照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017019SC` | `KKSV017019SC` | - | Set upper: Address change detail list review (住所変更詳細一覧照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017019SC` | `KKSV017019SC` | - | *(Not called in get phase — commented out)* |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017020SC` | `KKSV017020SC` | - | Set upper: Service contract work item list review (サービス契約_工事案件一覧照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017020SC` | `KKSV017020SC` | - | *(Not called in get phase — commented out)* |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017021SC` | `KKSV017021SC` | - | Set upper: Work item consent review (工事案件一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017021SC` | `KKSV017021SC` | - | Get: Work item consent review (工事案件一斉照会) |
| - | `KKSV0170_KKSV0170OPDBMapper.setKKSV017022SC` | `KKSV017022SC` | - | Set upper: Phone consent review (電話番号一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKKSV017022SC` | `KKSV017022SC` | - | Get: Phone consent review (電話番号一斉照会) |
| R | `KKSV0170_KKSV0170OPDBMapper.getKojiakStat` | `KKSV0170` | - | Get work item status (工事案件ステータス) |
| R | `KKSV0170_KKSV0170OPDBMapper.getMansKojiakStatCd` | `KKSV0170` | - | Get management work item status code (管理工事案件ステータスコード) |
| R | `KKSV0170_KKSV0170OPDBMapper.getAdchgStat` | `KKSV0170` | - | Get address change status (住所変更ステータス) |
| R | `JCCWebCommon.getOpeDate` | `JCCBPCommon` | - | Retrieve the operation date (運用日) from the system context |
| R | `OneStopDataBeanAccessArray.getDataBean` | `OneStopDataBeanAccessArray` | - | Retrieve a specific DataBean from an array by index |
| R | `OneStopDataBeanAccess.getDataBeanArray` | `OneStopDataBeanAccess` | - | Retrieve a named array of DataBeans from the bean |
| - | `JCCBatCommon.invokeService` | `JCCBatCommon` | - | Execute the unified service invocation with upper-set and lower-get mappings |
| - | `KKW05602SFLogic.initDispCheck` | `KKW05602SFLogic` | - | Check contract status eligibility for navigation to the main screen |
| - | `KKW05602SFLogic.initAddressChangeCheck` | `KKW05602SFLogic` | - | Check address change status when movement category is "eo Hikari / Forwarding-Transfer Toki Setting" |
| - | `KKW05602SFLogic.setTokiInfoFromDB` | `KKW05602SFLogic` | - | Populate Toki (activation) display fields from the retrieved DB data beans |
| - | `KKW05602SFLogic.setRsvTelNoPullDownList` | `KKW05602SFLogic` | - | Build the reservation phone number dropdown list for screen display |
| - | `KKW05602SFLogic.isDataMapExsit` | `KKW05602SFLogic` | - | Verify that the data map exists in the session (first-time display only) |
| R | `JZMWebCommon.getSearchErrFlg` | `JCCWebCommon` | - | Retrieve the search error flag from the SC output map for phone consent |
| - | `X31SDataBeanAccess.sendMessageString` | `X31SDataBeanAccess` | - | Get/Set string values in the data bean for inter-screen data passing |

## 5. Dependency Trace

| # | Caller (Screen/Batch) | Call Chain (Full Path to this Method) | Terminal (SC / CRUD / Entity) |
|---|----------------------|--------------------------------------|-------------------------------|
| 1 | `KKW05602SFLogic.actionChgTokiAdd` | `actionChgTokiAdd()` → `actionTokiUpdInit(mode)` | `setRsvTelNoPullDownList [-], sendMessageString [-] (x7), getOpeDate [R] (x5), setTokiInfoFromDB [-], getDataBean [R] (x4), getDataBeanArray [R], initAddressChangeCheck [-], getAdchgStat [R]` |
| 2 | `KKW05602SFLogic.actionInit` | `actionInit()` → `actionTokiUpdInit(mode)` | `setRsvTelNoPullDownList [-], sendMessageString [-] (x7), getOpeDate [R] (x5), setTokiInfoFromDB [-], getDataBean [R] (x4), getDataBeanArray [R], initAddressChangeCheck [-], getAdchgStat [R]` |

**Terminal operations resolved from this method (all leaf-level SC/CRUD/Entity endpoints):**

| Terminal Method | Type | Entity / Data |
|----------------|------|---------------|
| `setRsvTelNoPullDownList` | - | Populates reservation phone number dropdown list (view preparation) |
| `sendMessageString` (x7) | SET | Sets values on the data bean (UNYO_YMD, SYSID, SVC_KEI_NO, SVC_KEI_UCWK_NO, IDO_DIV, SYSID_11, SVC_KEI_NO_11, SVC_KEI_UCWK_NO_11, IDO_DIV_11) |
| `getOpeDate` | R | Operation date from system context (called via JCCWebCommon and others) |
| `setTokiInfoFromDB` | - | Populates Toki activation fields from DB data beans |
| `getDataBean` | R | Retrieves specific indexed DataBeans from arrays |
| `getDataBeanArray` | R | Retrieves named array DataBeans (CUST_KEI_HKTGI_LIST, EKK0191A010DETAILLIST) |
| `initAddressChangeCheck` | - | Validates address change status |
| `getAdchgStat` | R | Retrieves address change status from KKSV0170 module |

## 6. Per-Branch Detail Blocks

### Block 1 — IF (bean is null check) (L208-215)

Guard clause: validates that the service form bean exists. The bean is the primary data carrier between screens — if it is null, the method cannot proceed.

| # | Type | Code |
|---|------|------|
| 1 | GET | `bean = super.getServiceFormBean();` // Get the service form DataBean |
| 2 | SET | `paramBean = { bean };` // Wrap bean in array for service invocation |
| 3 | IF | `null == bean` → throw Exception [L213] |

### Block 2 — IF (mode-based data map validation) (L219-226)

Conditional validation of the data map based on the entry mode. When mode is 2 (re-display after Toki registration category change), the data map check is skipped. For mode=1 (initial display), the data map must exist.

| # | Type | Code |
|---|------|------|
| 1 | IF | `mode != 2` (first-time initial display) [L220] |
| 2 | IF | `!isDataMapExsit()` → throw Exception [L222-224] // Data map must exist for first-time display |

### Block 3 — SET (Operation date setting) (L230-231)

Sets the operation date (運用日) onto the bean for display. This is the business date used for all downstream processing.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `JCCWebCommon.getOpeDate(this, null)` // Get current operation date |
| 2 | SET | `bean.sendMessageString(UNYO_YMD, DATABEAN_SET_VALUE, getOpeDate(...))` // Set operation date [-> "運用日"] |

### Block 4 — SET (Customer contract succession data extraction) (L234-250)

Extracts customer contract succession information from the previous screen's data bean and sets it onto the current bean. This data (SYSID, service contract number, service detail number, movement category) is fundamental to all subsequent operations.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `bean.getDataBeanArray(CUST_KEI_HKTGI_LIST)` [-> `引継ぎ情報`] // Get customer succession list |
| 2 | EXEC | `custKeiHktgiList.getDataBean(0)` // Get first element |
| 3 | SET | `bean.sendMessageString(SYSID, SET, custKeiHktgiBean.sendMessageString(SYSID_11, GET))` // Set SYSID |
| 4 | SET | `bean.sendMessageString(SVC_KEI_NO, SET, custKeiHktgiBean.sendMessageString(SVC_KEI_NO_11, GET))` // Set service contract number [-> "サービス契約番号"] |
| 5 | SET | `bean.sendMessageString(SVC_KEI_UCWK_NO, SET, custKeiHktgiBean.sendMessageString(SVC_KEI_UCWK_NO_11, GET))` // Set service detail number [-> "サービス契約内訳番号"] |
| 6 | SET | `bean.sendMessageString(IDO_DIV, SET, custKeiHktgiBean.sendMessageString(IDO_DIV_11, GET))` // Set movement category [-> "移動区分"] |
| 7 | COMMENT | `IDO_RSN_CD` block commented out — movement reason code not currently transferred |

### Block 5 — SET (KKSV0170 mapper preparation) (L289-340)

Creates the mapper and parameter maps for the KKSV0170 Customer Agreement Review module. Configures 22+ SC operations covering customer consent, service details, activation parameters, movement reservations, code name management, address change records, work item data, and phone consent.

| # | Type | Code |
|---|------|------|
| 1 | SET | `paramMap2 = new HashMap()` // Parameter setup map [-> "パラメータ設定用マップ"] |
| 2 | SET | `inputMap2 = new HashMap()` // Search condition map [-> "検索条件格納用マップ"] |
| 3 | SET | `outputMap2 = new HashMap()` // Result storage map [-> "結果格納用マップ"] |
| 4 | SET | `mapper2 = new KKSV0170_KKSV0170OPDBMapper()` // DataBean-BP mapper |
| 5 | SET | `paramMap2.put(TELEGRAM_INFO_USECASE_ID, UCID_KKSV0170)` // Set use-case ID |
| 6 | SET | `paramMap2.put(TELEGRAM_INFO_OPERATION_ID, OPID_KKSV0170OP)` // Set operation ID |
| 7 | EXEC | `mapper2.setKKSV017001SC(..., FUNC_CODE_2)` // Customer consent review |
| 8 | EXEC | `mapper2.setKKSV017002SC(..., FUNC_CODE_2)` // Service contract consent review |
| 9 | EXEC | `mapper2.setKKSV017003SC(..., FUNC_CODE_2)` // Service detail consent review |
| 10 | EXEC | `mapper2.setKKSV017004SC(..., FUNC_CODE_2)` // eo phone detail consent review |
| 11 | EXEC | `mapper2.setKKSV017005SC(..., FUNC_CODE_1)` // Phone reservation list review |
| 12 | EXEC | `mapper2.setKKSV017006SC(..., FUNC_CODE_3)` // Forwarding registration code |
| 13 | EXEC | `mapper2.setKKSV017007SC(..., FUNC_CODE_3)` // Forwarding type code |
| 14 | EXEC | `mapper2.setKKSV017008SC(..., FUNC_CODE_3)` // Code presence/absence |
| 15 | EXEC | `mapper2.setKKSV017009SC(..., FUNC_CODE_1)` // Activation period |
| 16 | EXEC | `mapper2.setKKSV017010SC(..., FUNC_CODE_1)` // Activation content - suspension proposal |
| 17 | EXEC | `mapper2.setKKSV017011SC(..., FUNC_CODE_1)` // Activation content - transfer number proposal |
| 18 | EXEC | `mapper2.setKKSV017012SC(..., FUNC_CODE_1)` // Activation content - suspension+contact proposal |
| 19 | EXEC | `mapper2.setKKSV017013SC(..., FUNC_CODE_1)` // Movement reservation list |
| 20 | EXEC | `mapper2.setKKSV017014SC(..., FUNC_CODE_1)` // Service detail eo phone list by contract number |
| 21 | EXEC | `mapper2.setKKSV017015SC(..., FUNC_CODE_1)` // Movement reservation list by detail number |
| 22 | EXEC | `mapper2.setKKSV017016SC(..., FUNC_CODE_4)` // Phone list by SSID [Changed from FUNC_CODE_3 per IT1-2013-0001383] |
| 23 | EXEC | `mapper2.setKKSV017017SC(..., FUNC_CODE_2)` // Address change detail list by change-prior ID |
| 24 | EXEC | `mapper2.setKKSV017018SC(..., FUNC_CODE_1)` // Address change consent review |
| 25 | EXEC | `mapper2.setKKSV017019SC(..., FUNC_CODE_1)` // Address change detail list |
| 26 | EXEC | `mapper2.setKKSV017020SC(..., FUNC_CODE_1)` // Service contract work item list |
| 27 | EXEC | `mapper2.setKKSV017021SC(..., FUNC_CODE_1)` // Work item consent review |
| 28 | EXEC | `mapper2.setWORK(..., FUNC_CODE_1)` // Work flag |
| 29 | EXEC | `mapper2.setTELNOSTATJUDGECC(..., FUNC_CODE_2)` // Phone number status judgment CC [ANK-4494-00-00 ADD] — set for initial display check only, not performed at initial display |
| 30 | EXEC | `mapper2.setKKSV017022SC(..., FUNC_CODE_1)` // Phone consent review [ANK-4494-00-00 STEP2 ADD] |

### Block 6 — CALL (Unified service invocation) (L344)

Executes the batch service invocation that performs all SC calls configured in Block 5. This is the core data retrieval step — the upper-set methods populate input data and the lower-get methods retrieve results.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `invokeService(paramMap2, inputMap2, outputMap2)` // Execute unified KKSV0170 service |

### Block 7 — SET (Lower-get mapping / data extraction) (L348-391)

Extracts results from the service invocation output map. Each get method populates the data bean with the corresponding review data. Note: KKSV017006_2SC is commented out (replaced with KKSV017006SC per OT-2013-0000311 — pludown handling). KKSV017007_2SC variant is used for update screen.

| # | Type | Code |
|---|------|------|
| 1 | CALL | `mapper2.getKKSV017001SC(paramBean, outputMap2)` // Customer consent |
| 2 | CALL | `mapper2.getKKSV017002SC(paramBean, outputMap2)` // Service contract consent |
| 3 | CALL | `mapper2.getKKSV017003SC(paramBean, outputMap2)` // Service detail consent |
| 4 | CALL | `mapper2.getKKSV017004SC(paramBean, outputMap2)` // eo phone detail consent |
| 5 | CALL | `mapper2.getKKSV017005SC(paramBean, outputMap2)` // Phone reservation list |
| 6 | CALL | `mapper2.getKKSV017006SC(paramBean, outputMap2)` // Forwarding registration code [Changed from 06_2SC per OT-2013-0000311] |
| 7 | CALL | `mapper2.getKKSV017007_2SC(paramBean, outputMap2)` // Forwarding type code (_2SC variant for update screen) |
| 8 | CALL | `mapper2.getKKSV017008SC(paramBean, outputMap2)` // Code presence/absence |
| 9 | CALL | `mapper2.getKKSV017009SC(paramBean, outputMap2)` // Activation period |
| 10 | CALL | `mapper2.getKKSV017010SC(paramBean, outputMap2)` // Activation content - suspension |
| 11 | CALL | `mapper2.getKKSV017011SC(paramBean, outputMap2)` // Activation content - transfer |
| 12 | CALL | `mapper2.getKKSV017012SC(paramBean, outputMap2)` // Activation content - suspension+contact |
| 13 | CALL | `mapper2.getKKSV017013SC(paramBean, outputMap2)` // Movement reservation list [IT1-2012-0000780 ADD] |
| 14 | CALL | `mapper2.getKKSV017014SC(paramBean, outputMap2)` // Service detail eo phone list by contract number |
| 15 | CALL | `mapper2.getKKSV017015SC(paramBean, outputMap2)` // Movement reservation list by detail number |
| 16 | CALL | `mapper2.getKKSV017016SC(paramBean, outputMap2)` // Phone list by SSID |
| 17 | CALL | `mapper2.getKKSV017018SC(paramBean, outputMap2)` // Address change consent [OM-2016-0000157 ADD] |
| 18 | CALL | `mapper2.getKKSV017021SC(paramBean, outputMap2)` // Work item consent [OM-2016-0000157 ADD] |
| 19 | CALL | `mapper2.getKKSV017022SC(paramBean, outputMap2)` // Phone consent [ANK-4494-00-00 STEP2 ADD] |

### Block 8 — IF (Phone search error flag extraction) (L393-400)

After retrieving phone consent data, extracts the search error flag if the SC key exists in the output map. This flag indicates whether the phone consent search returned data or encountered an error condition.

| # | Type | Code |
|---|------|------|
| 1 | IF | `inputMap2.containsKey("KKSV017022SC")` [L394] |
| 2 | SET | `TELNO_SEARCH_ERRFLG = JZMWebCommon.getSearchErrFlg("KKSV017022SC", outputMap2)` // Get search error flag [L396-398] |

### Block 9 — IF (Contract status check for navigation) (L404-411)

Validates whether the customer's contract status permits navigation to the main screen. This check is for services in "service provision", "rescinded", or "suspended" state — if the check fails, an error message is set on the bean and the method returns `true` to block navigation (the bean carries the error message).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `checkOk = initDispCheck(paramBean)` // Check contract status eligibility [L405] |
| 2 | IF | `!checkOk` → return true (block redirect) [L406-408] |

### Block 10 — IF (IDO_DIV-based address change validation) (L415-444)

When the movement category (移動区分) equals `00046` (eo Hikari / Forwarding-Transfer Toki Setting), additional validation is required. This block retrieves work item status, management status, and address change status, then validates them through `initAddressChangeCheck`. If any validation fails, the method returns `true` to block navigation.

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoKbn = bean.sendMessageString(IDO_DIV, DATABEAN_GET_VALUE)` // Get movement category from bean [L418] |
| 2 | IF | `IDO_KBN_TEL_ITEN_TOKI.equals(idoKbn)` (== `"00046"`) — only for "eo Hikari / Forwarding-Transfer Toki Setting" [L423] |
| 3 | SET | `kojiAnkState = mapper2.getKojiakStat()` // Get work item status [L425] |
| 4 | SET | `mansKojiAkStatCd = mapper2.getMansKojiakStatCd()` // Get management work item status code [L427] |
| 5 | SET | `adchgStat = mapper2.getAdchgStat()` // Get address change status [L429] |
| 6 | EXEC | `DEBUG_LOG.debug("# # # #actionTokiAddInit:kojiAnkState:" + kojiAnkState)` |
| 7 | EXEC | `DEBUG_LOG.debug("# # # #actionTokiAddInit:mansKojiAkStatCd:" + mansKojiAkStatCd)` |
| 8 | EXEC | `DEBUG_LOG.debug("# # # #actionTokiAddInit:adchgStat:" + adchgStat)` |
| 9 | CALL | `checkOkShoki = initAddressChangeCheck(kojiAnkState, mansKojiAkStatCd, adchgStat)` [L435] |
| 10 | IF | `!checkOkShoki` → return true (block redirect) [L436-438] |

### Block 11 — SET (Toki info population) (L446-451)

Retrieves the service detail eo phone list data bean and passes it along with the customer succession bean to `setTokiInfoFromDB`, which populates all Toki (activation) display fields on the screen. Then sets the operation date again (possibly overwriting from the earlier set in Block 3, ensuring the latest date is used).

| # | Type | Code |
|---|------|------|
| 1 | CALL | `svcUtwkEoTelBeanList = bean.getDataBeanArray(EKK0191A010DETAILLIST)` [-> `サービス契約内訳<eo光電話>一斉照会詳細`] |
| 2 | EXEC | `svcUtwkEoTelBean = svcUtwkEoTelBeanList.getDataBean(0)` // Get first service detail entry |
| 3 | CALL | `setTokiInfoFromDB(bean, custKeiHktgiBean, svcUtwkEoTelBean, mode)` // Populate Toki display fields |
| 4 | SET | `bean.sendMessageString(UNYO_YMD, SET, JCCWebCommon.getOpeDate(this, null))` // Set operation date (again) [L452] |

### Block 12 — SET (Reservation phone dropdown setup) (L456-461)

Prepares the reservation phone number dropdown list for the screen. Reads the movement category and phone number from the customer succession and service detail beans, then delegates to `setRsvTelNoPullDownList` which builds the dropdown options.

| # | Type | Code |
|---|------|------|
| 1 | SET | `idoDiv = custKeiHktgiBean.sendMessageString(IDO_DIV_11, GET)` // Get movement category from succession bean [L458] |
| 2 | SET | `telNo = svcUtwkEoTelBean.sendMessageString(TELNO_05, GET)` // Get phone number from service bean [-> "電話番号"] [L460] |
| 3 | CALL | `setRsvTelNoPullDownList(paramBean, custKeiHktgiBean, idoDiv, mapper2, telNo)` // Build reservation phone dropdown [L461] |

### Block 13 — RETURN (DataBean logging and return) (L473-474)

Logs the full DataBean dump for debugging purposes, then returns `true`.

| # | Type | Code |
|---|------|------|
| 1 | EXEC | `JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null)` // Log full DataBean state [L473] |
| 2 | RETURN | `return true` [L474] — Always returns true. Early returns (true) in Blocks 9 and 10 signal navigation blocked by contract/address status checks |

## 7. Glossary

| Term | Type | Business Meaning |
|------|------|------------------|
| トウキ (Toki) | Business term | Activation Request — a telecom service activation process where a customer's phone number, forwarding settings, or other service parameters are to be activated on a specific date. "更新・解除" = Update/Cancellation. |
| トウキ登録区分変更 | Business term | Activation Registration Category Change — the scenario where the user changes the type of activation request (e.g., from forwarding to number change) and returns to this screen for re-initialization. |
| 引継ぎ情報 (Hikitsugi Jouhou) | Field | Customer Contract Succession Information — data passed from the previous screen containing the customer's core contract identifiers. |
| IDO_DIV (移動区分) | Field | Movement Category Code — classifies the type of service change. Value `"00046"` specifically means "eo Hikari / Forwarding-Transfer Toki Setting" (光電話・移転トウキ設定). |
| SYSID | Field | System ID — internal customer identifier used across all service modules. |
| SVC_KEI_NO (サービス契約番号) | Field | Service Contract Number — the primary identifier for a customer's service contract. |
| SVC_KEI_UCWK_NO (サービス契約内訳番号) | Field | Service Detail Work Number — internal tracking ID for a specific line item within a service contract. |
| EKK0191A010DETAILLIST | Field | Service detail eo phone list — DataBean array key for retrieving eo Hikari phone service detail records. |
| KKSV0170 | SC Code | Customer Agreement Review module (お客様一斉照会) — a consolidated screen component that reviews multiple customer consent records in a single invocation. |
| KKSV017001SC - KKSV017022SC | SC Code | Individual Service Component IDs within the KKSV0170 module, each corresponding to a specific customer consent or data review operation. |
|FUNC_CODE_1 | Constant | Function code `"1"` — read/search operation mode. |
| FUNC_CODE_2 | Constant | Function code `"2"` — consent/review operation mode. |
| FUNC_CODE_3 | Constant | Function code `"3"` — code management (lookup) mode. |
| FUNC_CODE_4 | Constant | Function code `"4"` — phone list lookup by SSID mode (added in IT1-2013-0001383). |
| UCID / OPID | Field | Use-case ID / Operation ID — enterprise tracing identifiers for audit and monitoring purposes. |
| getOpeDate | Method | Operation Date getter — returns the current business/operation date from the system context. |
| invokeService | Method | Unified service invocation — executes a batch of SC operations configured via set/get mappings, then extracts results via get mappings. |
| initDispCheck | Method | Contract status display check — determines whether the customer's contract state (active, rescinded, suspended) permits navigation to the main screen. |
| initAddressChangeCheck | Method | Address change status check — validates work item, management, and address change states when the movement category is eo Hikari / Forwarding-Transfer Toki Setting. |
| setTokiInfoFromDB | Method | Populates all Toki (activation) display fields from the service detail and customer succession data beans. |
| setRsvTelNoPullDownList | Method | Builds the reservation phone number dropdown list for the screen, based on movement category and the current phone number. |
| TELNO_SEARCH_ERRFLG | Field | Phone number search error flag — indicates whether the phone consent search returned data (value `"0"` = no error, per `JPCModelConstant.SEARCH_ERR_FLG_ZERO`). |
| 工事案件ステータス (Koji Anklei Status) | Field | Work item status — the current state of a construction/work order associated with the customer's service. |
| 管理工事案件ステータスコード | Field | Management work item status code — a code representing the management-level status of a work order. |
| 住所変更ステータス (AdchgStat) | Field | Address change status — indicates whether an address change is pending, in progress, or completed for the customer. |
| DataBean | Technical term | A data carrier object used for passing structured data between the presentation layer, logic layer, and service layer in the OneStop framework. |
| OneStop | Architecture | K-Opticom's enterprise web application framework that uses DataBeans, SC (Service Component) calls, and a unified invokeService mechanism for screen processing. |
