diff --git a/README.md b/README.md index c969bfe2b..571a4fafa 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,9 @@ This section explain how to install some python packages to Brightics Studio pyt /brightics-studio/lib/python/python get-pip.py : This step is only needed once. /brightics-studio/lib/python/Scripts/pip install +### Notes +Tokenizer (Korean) function will not work properly if the installation path contains Korean characters. You need to install Brightics Studio in a folder whose full path does not contain Korean characters in order to make use of this function. + ## Development ### Prerequisite * JDK 1.8, 1.9 (64bit) diff --git a/api-server/brightics-server/bin/start-server.cmd b/api-server/brightics-server/bin/start-server.cmd index cb6d0e368..4e3537cb9 100644 --- a/api-server/brightics-server/bin/start-server.cmd +++ b/api-server/brightics-server/bin/start-server.cmd @@ -21,6 +21,7 @@ if "%USER_ID%"=="" ( EXIT /b 1 ) +SET _JAVA_OPTIONS= SET GC_OPTS=-XX:+UseConcMarkSweepGC -verbose:gc --Xloggc:"%BRIGHTICS_SERVER_HOME%gc.out" -XX:+CMSClassUnloadingEnabled SET JAVA_OPTS=-Xms1g -Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Djava.net.preferIPv4Stack=true -Djava.io.tmpdir="%BRIGHTICS_SERVER_HOME%tmp" -Dbrightics.local.token=%ACCESS_TOKEN% -Dbrightics.local.user=%USER_ID% -Dfile.encoding=utf-8 SET MAIN=org.springframework.boot.loader.JarLauncher -Dspring.config.location="%BRIGHTICS_SERVER_HOME%BOOT-INF\classes\" diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ALSRecommend.csv/_SUCCESS b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ALSRecommend.csv/_SUCCESS new file mode 100644 index 000000000..e69de29bb diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ALSRecommend.csv/part-00000-41d44bb8-3671-405e-befb-115f0e2eb1f0-c000.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ALSRecommend.csv/part-00000-41d44bb8-3671-405e-befb-115f0e2eb1f0-c000.snappy.parquet new file mode 100644 index 000000000..28a095baa Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ALSRecommend.csv/part-00000-41d44bb8-3671-405e-befb-115f0e2eb1f0-c000.snappy.parquet differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ANOVA.csv/_SUCCESS b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ANOVA.csv/_SUCCESS new file mode 100644 index 000000000..e69de29bb diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ANOVA.csv/part-00000-5c60a788-b1c9-4953-9b5a-6b3e43bcc2ab-c000.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ANOVA.csv/part-00000-5c60a788-b1c9-4953-9b5a-6b3e43bcc2ab-c000.snappy.parquet new file mode 100644 index 000000000..ba1142e8d Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ANOVA.csv/part-00000-5c60a788-b1c9-4953-9b5a-6b3e43bcc2ab-c000.snappy.parquet differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ReplaceMissingNumber.csv/_SUCCESS b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ReplaceMissingNumber.csv/_SUCCESS new file mode 100644 index 000000000..e69de29bb diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ReplaceMissingNumber.csv/part-00000-ec8f2016-4f54-45b5-9b1b-e2a07cbd10ca-c000.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ReplaceMissingNumber.csv/part-00000-ec8f2016-4f54-45b5-9b1b-e2a07cbd10ca-c000.snappy.parquet new file mode 100644 index 000000000..1cd2710d7 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ReplaceMissingNumber.csv/part-00000-ec8f2016-4f54-45b5-9b1b-e2a07cbd10ca-c000.snappy.parquet differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_TimeSeriesDistance1.csv/_SUCCESS b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_TimeSeriesDistance1.csv/_SUCCESS new file mode 100644 index 000000000..e69de29bb diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_TimeSeriesDistance1.csv/part-00000-a732ff5b-9333-49bf-ba2c-8d42784d7fc0-c000.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_TimeSeriesDistance1.csv/part-00000-a732ff5b-9333-49bf-ba2c-8d42784d7fc0-c000.snappy.parquet new file mode 100644 index 000000000..417e5ee56 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_TimeSeriesDistance1.csv/part-00000-a732ff5b-9333-49bf-ba2c-8d42784d7fc0-c000.snappy.parquet differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/user_dict.csv/.part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet.crc b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_esw_user_dict.csv/.part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet.crc similarity index 100% rename from api-server/brightics-server/data/brightics@samsung.com/upload/user_dict.csv/.part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet.crc rename to api-server/brightics-server/data/brightics@samsung.com/upload/sample_esw_user_dict.csv/.part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet.crc diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/user_dict.csv/part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_esw_user_dict.csv/part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet similarity index 100% rename from api-server/brightics-server/data/brightics@samsung.com/upload/user_dict.csv/part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet rename to api-server/brightics-server/data/brightics@samsung.com/upload/sample_esw_user_dict.csv/part-00001-420db257-1ab6-4cb6-baf9-aa6b7e25ed27.snappy.parquet diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/script1.csv/.part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet.crc b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_extractSentimentalWords.csv/.part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet.crc similarity index 100% rename from api-server/brightics-server/data/brightics@samsung.com/upload/script1.csv/.part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet.crc rename to api-server/brightics-server/data/brightics@samsung.com/upload/sample_extractSentimentalWords.csv/.part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet.crc diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/script1.csv/part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_extractSentimentalWords.csv/part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet similarity index 100% rename from api-server/brightics-server/data/brightics@samsung.com/upload/script1.csv/part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet rename to api-server/brightics-server/data/brightics@samsung.com/upload/sample_extractSentimentalWords.csv/part-00001-8c37e7cf-7b5f-4bfe-98d2-6bb3d2c04b17.snappy.parquet diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ner_crf_train.csv/.part-00001-3cccdfea-037a-4f0d-b985-cd41eb8e501c.snappy.parquet.crc b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ner_crf_train.csv/.part-00001-3cccdfea-037a-4f0d-b985-cd41eb8e501c.snappy.parquet.crc new file mode 100644 index 000000000..3c05818b7 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ner_crf_train.csv/.part-00001-3cccdfea-037a-4f0d-b985-cd41eb8e501c.snappy.parquet.crc differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ner_crf_train.csv/part-00001-3cccdfea-037a-4f0d-b985-cd41eb8e501c.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ner_crf_train.csv/part-00001-3cccdfea-037a-4f0d-b985-cd41eb8e501c.snappy.parquet new file mode 100644 index 000000000..f5f5b2bc8 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ner_crf_train.csv/part-00001-3cccdfea-037a-4f0d-b985-cd41eb8e501c.snappy.parquet differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/text_eng.csv/.part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet.crc b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_eng.csv/.part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet.crc similarity index 100% rename from api-server/brightics-server/data/brightics@samsung.com/upload/text_eng.csv/.part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet.crc rename to api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_eng.csv/.part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet.crc diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/text_eng.csv/part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_eng.csv/part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet similarity index 100% rename from api-server/brightics-server/data/brightics@samsung.com/upload/text_eng.csv/part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet rename to api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_eng.csv/part-00001-948b463e-c4a8-4222-aa9e-f1f899fce781.snappy.parquet diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_kor.csv/.part-00001-c1430b07-c6a1-4bae-958c-f093a2e72259.snappy.parquet.crc b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_kor.csv/.part-00001-c1430b07-c6a1-4bae-958c-f093a2e72259.snappy.parquet.crc new file mode 100644 index 000000000..fcee55009 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_kor.csv/.part-00001-c1430b07-c6a1-4bae-958c-f093a2e72259.snappy.parquet.crc differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_kor.csv/part-00001-c1430b07-c6a1-4bae-958c-f093a2e72259.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_kor.csv/part-00001-c1430b07-c6a1-4bae-958c-f093a2e72259.snappy.parquet new file mode 100644 index 000000000..291e20ca7 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_text_kor.csv/part-00001-c1430b07-c6a1-4bae-958c-f093a2e72259.snappy.parquet differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ts_user_dict.csv/.part-00001-6be200ad-5a0a-4066-a886-7d594c44c246.snappy.parquet.crc b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ts_user_dict.csv/.part-00001-6be200ad-5a0a-4066-a886-7d594c44c246.snappy.parquet.crc new file mode 100644 index 000000000..aebc84c55 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ts_user_dict.csv/.part-00001-6be200ad-5a0a-4066-a886-7d594c44c246.snappy.parquet.crc differ diff --git a/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ts_user_dict.csv/part-00001-6be200ad-5a0a-4066-a886-7d594c44c246.snappy.parquet b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ts_user_dict.csv/part-00001-6be200ad-5a0a-4066-a886-7d594c44c246.snappy.parquet new file mode 100644 index 000000000..cb7ca59f5 Binary files /dev/null and b/api-server/brightics-server/data/brightics@samsung.com/upload/sample_ts_user_dict.csv/part-00001-6be200ad-5a0a-4066-a886-7d594c44c246.snappy.parquet differ diff --git a/common/network/pom.xml b/common/network/pom.xml index 096bf7b5b..a765e1ec1 100644 --- a/common/network/pom.xml +++ b/common/network/pom.xml @@ -88,7 +88,7 @@ io.netty netty-all - 4.1.17.Final + 4.1.42.Final diff --git a/docker/Dockerfile b/docker/Dockerfile index 4ff14521c..24dfc6589 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -28,8 +28,8 @@ WORKDIR /brightics-studio RUN mv /git/studio/build/target/dist/brightics-studio / RUN sed -i "s/\"127.0.0.1\",/\"0.0.0.0\",/g" /brightics-studio/visual-analytics/conf.json RUN sed -i "s/\%\*\ //g" /brightics-studio/setup.sh -RUN sed -i '24d' /brightics-studio/start-brightics.sh RUN ./setup.sh +RUN mv /brightics-studio/lib/nltk_data /brightics-studio/lib/brightics_python_env/ RUN rm -rf /brightics-studio/lib/etc /brightics-studio/lib/graphviz /brightics-studio/lib/hadoop /brightics-studio/lib/shortcut /brightics-studio/lib/node/node_modules/npm/changelogs /brightics-studio/lib/node/node_modules/npm/doc /brightics-studio/lib/node/node_modules/npm/html /brightics-studio/lib/node/node_modules/npm/man /brightics-studio/lib/node/node_modules/npm/scripts /brightics-studio/lib/node/node_modules/npm/*.md /brightics-studio/lib/node/node_modules/npm/AUTHORS /brightics-studio/lib/node/node_modules/npm/TODO.org /brightics-studio/lib/node/node_modules/npm/.github /opt/zulu8.46.0.19-ca-jre8.0.252-linux_x64/man diff --git a/function/python/brightics/brightics_data_api.py b/function/python/brightics/brightics_data_api.py index 0f3e2c236..fcb6ff57b 100644 --- a/function/python/brightics/brightics_data_api.py +++ b/function/python/brightics/brightics_data_api.py @@ -30,7 +30,7 @@ import brightics.common.data.table_data_reader as table_reader import brightics.common.data.utils as data_util -import brightics.common.json as data_json +import brightics.common.datajson as data_json from brightics.brightics_java_gateway import brtc_java_gateway as gateway from brightics.brightics_kv_store_client import KVStoreClient @@ -126,7 +126,8 @@ def col_dtype(col): def ensure_none(df): val = df.values - val[isna(df.values)] = None + if isna(val).any(): + val[isna(df.values)] = None return val return data_json.to_json({ diff --git a/function/python/brightics/brightics_kv_store_client.py b/function/python/brightics/brightics_kv_store_client.py index c584958e0..b0eec2731 100644 --- a/function/python/brightics/brightics_kv_store_client.py +++ b/function/python/brightics/brightics_kv_store_client.py @@ -14,7 +14,7 @@ limitations under the License. """ -import brightics.common.json as data_json +import brightics.common.datajson as data_json from brightics.brightics_java_gateway import brtc_java_gateway as gateway diff --git a/function/python/brightics/brightics_python_runner.py b/function/python/brightics/brightics_python_runner.py index 3605a3514..e62ef62fd 100644 --- a/function/python/brightics/brightics_python_runner.py +++ b/function/python/brightics/brightics_python_runner.py @@ -27,7 +27,8 @@ import json import matplotlib matplotlib.use("agg") - +import multiprocessing +multiprocessing.set_start_method('spawn', True) try: from StringIO import StringIO except ImportError: @@ -125,6 +126,7 @@ def _executer(self): interactive_code_object = compile(ast.Interactive(single_code), '', 'single') with redirect_stderr(): +# exec("print(' ')") exec(def_object, globals()) try: exec(exec_code_object) diff --git a/function/python/brightics/common/datajson/__init__.py b/function/python/brightics/common/datajson/__init__.py new file mode 100644 index 000000000..18e21c025 --- /dev/null +++ b/function/python/brightics/common/datajson/__init__.py @@ -0,0 +1,24 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +def to_json(data, for_redis=False): + from .encoder import encode + return encode(data, for_redis) + + +def from_json(json_str): + from .decoder import decode + return decode(json_str) diff --git a/function/python/brightics/common/datajson/decoder.py b/function/python/brightics/common/datajson/decoder.py new file mode 100644 index 000000000..2804de61c --- /dev/null +++ b/function/python/brightics/common/datajson/decoder.py @@ -0,0 +1,38 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +import json +import pickle +import numpy + + +def decode(obj): + def redis_read_hook(o): + if '__inf__' in o: + return float(o['__inf__']) + if '__set__' in o: + return set(o['__set__']) + if '__tuple__' in o: + return tuple(o['__tuple__']) + if '__numpy__' in o: + return numpy.array(o['__numpy__']) + # TODO add more support types + if '__pickled__' in o: + import array + return pickle.loads(array.array('B', o['__pickled__']).tobytes()) + return o + + return json.loads(obj, object_hook=redis_read_hook) diff --git a/function/python/brightics/common/datajson/encoder.py b/function/python/brightics/common/datajson/encoder.py new file mode 100644 index 000000000..cbcec0bb5 --- /dev/null +++ b/function/python/brightics/common/datajson/encoder.py @@ -0,0 +1,126 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +import json +import pickle +import numpy +import pandas as pd +from brightics.common.repr import BrtcReprBuilder + +def _to_default_list(np_arr): + return numpy.where(pd.isnull(np_arr), None, np_arr).tolist() + +class DefaultEncoder(json.JSONEncoder): + """ + DefaultEncoder is used for building viewable json string for in browser + """ + + def default(self, obj): + # TODO add more support types + if isinstance(obj, set): + return list(obj) + elif isinstance(obj, numpy.ndarray): + return _to_default_list(obj) + else: + rb = BrtcReprBuilder() + rb.addRawTextMD(str(obj)) + return {'type':'python object', '_repr_brtc_':rb.get()} + + +class PickleEncoder(DefaultEncoder): + """ + PickleEncoder is used for building json string saved in redis + """ + + def encode(self, obj): + + def hint_tuples(item): + if isinstance(item, tuple): + new_tuple = [] + for i in item: + if (isinstance(i,numpy.floating) or isinstance(i,float)) and i == numpy.inf: + new_tuple.append({'__inf__':'inf'}) + elif (isinstance(i,numpy.floating) or isinstance(i,float)) and i == -numpy.inf: + new_tuple.append({'__inf__':'-inf'}) + elif (isinstance(i,numpy.floating) or isinstance(i,float)) and pd.isnull(i): + new_tuple.append(None) + else: + new_tuple.append(hint_tuples(i)) + return {'__tuple__': new_tuple} + if isinstance(item, list): + new_list = [] + for i in item: + if (isinstance(i,numpy.floating) or isinstance(i,float)) and i == numpy.inf: + new_list.append({'__inf__':'inf'}) + elif (isinstance(i,numpy.floating) or isinstance(i,float)) and i == -numpy.inf: + new_list.append({'__inf__':'-inf'}) + elif (isinstance(i,numpy.floating) or isinstance(i,float)) and pd.isnull(i): + new_list.append(None) + else: + new_list.append(hint_tuples(i)) + return new_list + if isinstance(item, dict): + new_dict = {} + for key in item: + if (isinstance(item[key],numpy.floating) or isinstance(item[key],float)) and item[key] == numpy.inf: + new_dict[key] = {'__inf__':'inf'} + elif (isinstance(item[key],numpy.floating) or isinstance(item[key],float)) and item[key] == -numpy.inf: + new_dict[key] = ({'__inf__':'-inf'}) + elif (isinstance(item[key],numpy.floating) or isinstance(item[key],float)) and pd.isnull(item[key]): + new_dict[key] = None + else: + new_dict[key] = hint_tuples(item[key]) + return new_dict + else: + return item + + return super(DefaultEncoder, self).encode(hint_tuples(obj)) + + def default(self, o): + # TODO add more support types + if isinstance(o, set): + return {'__set__': _to_default_list(list(o))} + elif isinstance(o, numpy.ndarray): + return {'__numpy__': _to_default_list(o)} + elif hasattr(o, '_repr_html_'): + rb = BrtcReprBuilder() + rb.addHTML(o._repr_html_()) + if isinstance(o, pd.DataFrame): + return {'_repr_brtc_':rb.get(), '__pickled__': list(pickle.dumps(o)), 'type':'table'} + else: + return {'_repr_brtc_':rb.get(), '__pickled__': list(pickle.dumps(o))} + elif hasattr(o, 'savefig'): + rb = BrtcReprBuilder() + rb.addPlt(o) + if isinstance(o, pd.DataFrame): + return {'_repr_brtc_':rb.get(), '__pickled__': list(pickle.dumps(o)), 'type':'table'} + else: + return {'_repr_brtc_':rb.get(), '__pickled__': list(pickle.dumps(o))} + else: + rb = BrtcReprBuilder() + rb.addRawTextMD(str(o)) + if isinstance(o, pd.DataFrame): + return {'_repr_brtc_':rb.get(), '__pickled__': list(pickle.dumps(o)), 'type':'table'} + else: + return {'_repr_brtc_':rb.get(), '__pickled__': list(pickle.dumps(o))} + + + +def encode(obj, for_redis): + if for_redis: + return json.dumps(obj, cls=PickleEncoder) + else: + return json.dumps(obj, cls=DefaultEncoder) diff --git a/function/python/brightics/function/classification/ada_boost_classification.py b/function/python/brightics/function/classification/ada_boost_classification.py index ffdfa5ca6..9f84096d8 100644 --- a/function/python/brightics/function/classification/ada_boost_classification.py +++ b/function/python/brightics/function/classification/ada_boost_classification.py @@ -123,6 +123,16 @@ def ada_boost_classification_predict(table, model, **params): def _ada_boost_classification_predict(table, model, pred_col_name='prediction', prob_col_prefix='probability', suffix='index'): + if (table.shape[0] == 0): + new_cols = table.columns.tolist() + [pred_col_name] + classes = model['classifier'].classes_ + if suffix == 'index': + prob_cols = [prob_col_prefix + '_{}'.format(i) for i in range(len(classes))] + else: + prob_cols = [prob_col_prefix + '_{}'.format(i) for i in classes] + new_cols += prob_cols + out_table = pd.DataFrame(columns=new_cols) + return {'out_table': out_table} out_table = table.copy() classifier = model['classifier'] _, test_data = check_col_type(table, model['params']['feature_cols']) diff --git a/function/python/brightics/function/classification/classification_predict.py b/function/python/brightics/function/classification/classification_predict.py index 0ee3bd60b..0438e9847 100644 --- a/function/python/brightics/function/classification/classification_predict.py +++ b/function/python/brightics/function/classification/classification_predict.py @@ -20,6 +20,9 @@ from .decision_tree_classification import decision_tree_classification_predict from .random_forest_classification import random_forest_classification_predict from .naive_bayes_classification import naive_bayes_predict +from .ada_boost_classification import ada_boost_classification_predict +from .mlp_classification import mlp_classification_predict +from .xgb_classification import xgb_classification_predict import numpy as np @@ -35,7 +38,7 @@ def classification_predict(table, model, prediction_col='prediction', prob_prefi return logistic_regression_predict(table=table, model=model, prediction_col=prediction_col, prob_prefix=prob_prefix, output_log_prob=output_log_prob, log_prob_prefix=log_prob_prefix, thresholds=thresholds, suffix=suffix) - if tmp_model['_type'] == 'svm_model': + if tmp_model['_type'] == 'svc_model': return svm_classification_predict(table=table, model=model, prediction_col=prediction_col, prob_prefix=prob_prefix, display_log_prob=output_log_prob, log_prob_prefix=log_prob_prefix, thresholds=thresholds, suffix=suffix) @@ -52,4 +55,26 @@ def classification_predict(table, model, prediction_col='prediction', prob_prefi if tmp_model['_type'] == 'naive_bayes_model': return naive_bayes_predict(table=table, model=model, prediction_col=prediction_col, prob_prefix=prob_prefix, display_log_prob=output_log_prob, log_prob_prefix=log_prob_prefix, suffix=suffix) + if tmp_model['_type'] == 'ada_boost_classification_model': + return ada_boost_classification_predict( + table=table, model=model, + pred_col_name=prediction_col, + prob_col_prefix=prob_prefix, suffix=suffix + ) + if tmp_model['_type'] == 'mlp_classification_model': + return mlp_classification_predict( + table=table, model=model, + prediction_col=prediction_col, + prob_prefix=prob_prefix, + output_log_prob=output_log_prob, + log_prob_prefix=log_prob_prefix, + suffix=suffix, thresholds=thresholds + ) + if tmp_model['_type'] == 'xgb_classification_model': + return xgb_classification_predict( + table=table, model=model, + prediction_col=prediction_col, + probability_col=prob_prefix, + suffix=suffix, thresholds=thresholds + ) raise_runtime_error('''It is not supported yet.''') diff --git a/function/python/brightics/function/classification/knn_classification.py b/function/python/brightics/function/classification/knn_classification.py index c15a472a8..a8296f1a6 100644 --- a/function/python/brightics/function/classification/knn_classification.py +++ b/function/python/brightics/function/classification/knn_classification.py @@ -51,10 +51,19 @@ def _knn_classification(train_table, test_table, feature_cols, label_col, k=5, a # Predict the class labels for the provided data knn.fit(X_train, y_train) + classes = knn.classes_ + if (test_table.shape[0] == 0): + new_cols = test_table.columns.tolist() + [pred_col_name] + if suffix == 'index': + prob_cols = [prob_col_prefix + '_{}'.format(i) for i in range(len(classes))] + else: + prob_cols = [prob_col_prefix + '_{}'.format(i) for i in classes] + new_cols += prob_cols + out_table = pd.DataFrame(columns=new_cols) + return {'out_table': out_table} pred = knn.predict(X_test) out_col_pred = pd.DataFrame(pred, columns=[pred_col_name]) - classes = knn.classes_ if suffix == 'index': suffixes = [i for i, _ in enumerate(classes)] else: diff --git a/function/python/brightics/function/classification/logistic_regression.py b/function/python/brightics/function/classification/logistic_regression.py index 393c68982..beae6f9d7 100644 --- a/function/python/brightics/function/classification/logistic_regression.py +++ b/function/python/brightics/function/classification/logistic_regression.py @@ -206,6 +206,23 @@ def logistic_regression_predict(table, model, **params): def _logistic_regression_predict(table, model, prediction_col='prediction', prob_prefix='probability', output_log_prob=False, log_prob_prefix='log_probability', thresholds=None, suffix='index'): + if (table.shape[0] == 0): + new_cols = table.columns.tolist() + [prediction_col] + classes = model['lr_model'].classes_ + if suffix == 'index': + prob_cols = [prob_prefix + '_{}'.format(i) for i in range(len(classes))] + else: + prob_cols = [prob_prefix + '_{}'.format(i) for i in classes] + if output_log_prob: + if suffix == 'index': + log_cols = [log_prob_prefix + '_{}'.format(i) for i in range(len(classes))] + else: + log_cols = [log_prob_prefix + '_{}'.format(i) for i in classes] + else: + log_cols = [] + new_cols += prob_cols + log_cols + out_table = pd.DataFrame(columns=new_cols) + return {'out_table': out_table} if 'features' in model: feature_cols = model['features'] else: diff --git a/function/python/brightics/function/classification/meta/ada_boost_classification_train.json b/function/python/brightics/function/classification/meta/ada_boost_classification_train.json index 58bf96491..7153c8d6a 100644 --- a/function/python/brightics/function/classification/meta/ada_boost_classification_train.json +++ b/function/python/brightics/function/classification/meta/ada_boost_classification_train.json @@ -75,7 +75,7 @@ }, { "id": "max_depth", - "label": "Maximum Depth", + "label": "Max Depth", "description": "The maximum depth of the base estimator. In this Brightics Studio, the base estimator for Adaboost Regression model is Decision Tree Regression model. Note that it is one of the main parameters to tune to obtain good results by controlling the complexity of the base estimmators.", "visibleOption": [], "control": "InputBox", diff --git a/function/python/brightics/function/classification/meta/classification_predict.json b/function/python/brightics/function/classification/meta/classification_predict.json index 191b0abe5..24922d246 100644 --- a/function/python/brightics/function/classification/meta/classification_predict.json +++ b/function/python/brightics/function/classification/meta/classification_predict.json @@ -1641,4 +1641,4 @@ "base64": "data:image/png;base64,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" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/classification/meta/logistic_regression_predict.json b/function/python/brightics/function/classification/meta/logistic_regression_predict.json index 85984541d..dad4a10ad 100644 --- a/function/python/brightics/function/classification/meta/logistic_regression_predict.json +++ b/function/python/brightics/function/classification/meta/logistic_regression_predict.json @@ -1625,4 +1625,4 @@ "base64": "data:image/png;base64,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" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/classification/meta/naive_bayes_predict.json b/function/python/brightics/function/classification/meta/naive_bayes_predict.json index ce01769ac..0ab9fb25e 100644 --- a/function/python/brightics/function/classification/meta/naive_bayes_predict.json +++ b/function/python/brightics/function/classification/meta/naive_bayes_predict.json @@ -85,6 +85,31 @@ "type": "String", "placeHolder": "log_probability" }, + { + "id": "display_joint_log_likelihood", + "label": "Display Joint Log Likelihood", + "description": "", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "BooleanRadio", + "columnType": [], + "validation": [], + "defaultValue": false + }, + { + "id": "joint_log_likelihood_prefix", + "label": "Joint Log Likelihood Column Prefix", + "description": "", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "type": "String", + "placeHolder": "joint_log_likelihood" + }, { "id": "suffix", "label": "Suffix Type", @@ -814,7 +839,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.classification$naive_bayes_train", + "func": "brightics.function.classification$naive_bayes_traintrain", "name": "brightics.function.classification$naive_bayes_train", "param": { "fit_prior": true, @@ -1590,4 +1615,4 @@ "base64": "data:image/png;base64,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" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/classification/meta/naive_bayes_train.json b/function/python/brightics/function/classification/meta/naive_bayes_train.json index b998f6716..05ccd70fc 100644 --- a/function/python/brightics/function/classification/meta/naive_bayes_train.json +++ b/function/python/brightics/function/classification/meta/naive_bayes_train.json @@ -1076,7 +1076,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.classification$naive_bayes_predict", + "func": "brightics.function.classification$naive_bayes_predictedict", "name": "brightics.function.classification$naive_bayes_predict", "param": { "display_log_prob": false, @@ -1587,4 +1587,4 @@ "base64": "data:image/png;base64,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" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/classification/meta/random_forest_classification_train.json b/function/python/brightics/function/classification/meta/random_forest_classification_train.json index 944dbf740..c0611c47f 100644 --- a/function/python/brightics/function/classification/meta/random_forest_classification_train.json +++ b/function/python/brightics/function/classification/meta/random_forest_classification_train.json @@ -102,7 +102,7 @@ }, { "id": "max_depth", - "label": "Maximum Depth", + "label": "Max Depth", "description": "The maximum depth of the tree. It restricts the depth of each individual tree to prevent overfitting. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than `Minimum Number of Samples to Split`.\n", "visibleOption": [], "control": "InputBox", @@ -116,7 +116,7 @@ }, { "id": "min_samples_split", - "label": "Minimum Number of Samples to Split", + "label": "Min Sample Split", "description": "The minimum number of samples required to split an internal node. A very small number will usually mean the tree will overfit, whereas a large number will prevent the tree from learning the data.", "visibleOption": [], "control": "InputBox", @@ -130,7 +130,7 @@ }, { "id": "min_samples_leaf", - "label": "Minimum Number of Samples in a Leaf", + "label": "Min Sample Leaf", "description": "The minimum number of samples required to be at a leaf node. A split point at any depth will only be considered if it leaves at least `Minimum Number of Samples in a Leaf` training samples in each of the left and right branches. This may have the effect of smoothing the model, especially in regression. While `Minimum Number of Samples to Split` can create arbitrarily small leaves, `Minimum Number of Samples in a Leaf` guarantees that each leaf has a minimum size, avoiding low-variance, over-fit leaf nodes in regression problems.\n", "visibleOption": [], "control": "InputBox", diff --git a/function/python/brightics/function/classification/meta/svm_classification_train.json b/function/python/brightics/function/classification/meta/svm_classification_train.json index 8f0e6570d..dd6f9309c 100644 --- a/function/python/brightics/function/classification/meta/svm_classification_train.json +++ b/function/python/brightics/function/classification/meta/svm_classification_train.json @@ -33,7 +33,7 @@ "params": [ { "id": "feature_cols", - "label": "Feature Column", + "label": "Feature Columns", "description": "Feature column names. Only values in numeric type are possible.", "visibleOption": [], "control": "ColumnSelector", @@ -114,6 +114,51 @@ ], "columnType": [] }, + { + "id": "gamma", + "label": "Gamma", + "description": "Kernel coefficient for ‘rbf’, ‘poly’ and ‘sigmoid’.", + "mandatory": false, + "items": [ + { + "label": "Scale", + "value": "scale", + "default": false + }, + { + "label": "Auto", + "value": "auto", + "default": true + }, + { + "label": "Other", + "value": "other", + "default": false + } + ], + "visibleOption": [], + "control": "RadioButton", + "columnType": [], + "validation": [] + }, + { + "id": "gamma_val", + "label": "Gamma Value", + "description": "Gamma value when gamma mode is 'Other'.", + "mandatory": true, + "items": [], + "visibleOption": [ + { + "id": "gamma", + "value": "other" + } + ], + "control": "InputBox", + "columnType": [], + "validation": [], + "type": "Double", + "placeHolder": "(value > 0)" + }, { "id": "degree", "label": "Degree", diff --git a/function/python/brightics/function/classification/meta/xgb_classification_train.json b/function/python/brightics/function/classification/meta/xgb_classification_train.json index b92c513d2..90a859113 100644 --- a/function/python/brightics/function/classification/meta/xgb_classification_train.json +++ b/function/python/brightics/function/classification/meta/xgb_classification_train.json @@ -75,7 +75,7 @@ { "id": "objective", "label": "Objective for Binary Classification", - "description": "The learning task and the corresponding learning objective. For multi-class classification (the number of classes is greater than or equal to 3), the learning task uses softmax objective.", + "description": "Specify the learning task and the corresponding learning objective or a custom objective function to be used. The objective options are below:\n\tbinary:logistic - logistic regression for binary classification, output probability.\n\tbinary:hinge - hinge loss for binary classification. This makes predictions of 0 or 1, rather than producing probabilities.\n\tcount:poisson - Poisson regression for count data, output mean of poisson distribution\n\tsurvival:cox - Cox regression for right censored survival time data (negative values are considered right censored)\n\trank:pairwise - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized\n\treg:gamma - gamma regression with log-link. Output is a mean of gamma distribution. It might be useful, e.g., for modeling insurance claims severity, or for any outcome that might be gamma-distributed\n\treg:tweedie - Tweedie regression with log-link. It might be useful, e.g., for modeling total loss in insurance, or for any outcome that might be Tweedie-distributed.", "visibleOption": [], "control": "DropDownList", "validation": [], @@ -125,7 +125,7 @@ { "id": "max_depth", "label": "Max Depth", - "description": "Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Increasing this value will make the model more complex and more likely to overfit. Beware that XGBoost aggressively consumes memory when training a deep tree.", + "description": "Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Increasing this value will make the model more complex and more likely to overfit. 0 is only accepted in loss guided growing policy when tree_method is set as hist and it indicates no limit on depth. Beware that XGBoost aggressively consumes memory when training a deep tree.", "visibleOption": [], "control": "InputBox", "validation": [], @@ -271,7 +271,7 @@ ], "summary": "This function trains a XGBoost Classification model which is highly efficient, flexible and portable." }, - "md": "# XGB Classification Train\nThis function trains a XGBoost Classification model which is highly efficient, flexible and portable.\n\n## Description\nXGBoost stands for 'Extreme Gradient Boosting', where the term 'Gradient Boosting' originates from the paper Greedy Function Approximation: A Gradient Boosting Machine, by Friedman. \n\nXGBoost provides a parallel tree boosting (also known as GBDT, GBM) that solve many data science problems in a fast and accurate way. The same code runs on major distributed environment (Hadoop, SGE, MPI) and can solve problems beyond billions of examples. To sum up, XGBoost is an optimized distributed gradient boosting.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table)\nTraining data in a Table. It must contain at least one column for labels. \n\n#### OUTPUT\n1. **model**: (Model) Trained XGBoost Classification model. \n\n#### PARAMETER\n1. **Feature Columns***: Feature Column names. Only values in numeric type are possible.\n\n2. **Label Column***: The column designated for the labels of data. The column should contain categorical type values as it is for classification.\n\n3. **Objective for Binary Classification**: The learning task and the corresponding learning objective. For multi-class classification (the number of classes is greater than or equal to 3), the learning task uses softmax objective.\nequal to 3), the learning task uses softmax objective.\n - Available Options : `Logistic regression`, `Hinge loss for binary classification`,\n `Poisson regression for count data`, `Cox regression for right censored survival time`, `Pairwise ranking`, `Gamma regression with log-link`, `Tweedie regression with log-link`\n\n4. **Max Depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Increasing this value will make the model more complex and more likely to overfit. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\n5. **Learning Rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. \n\n6. **Number of Trees**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\n7. **Class Weights**: Weights associated with classes. If weights are not given, all classes are supposed to have weight one. Note that the class labels are considered in lexicographical order.\n\n8. **Importance Type**: `Importance Type` is a feature importance type property.\n - Available Options : `Gain`, `Weight`, `Cover`, `Total Gain`, `Total Cover`\n \n9. **Fraction of Samples**: The `fraction of samples` is to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `Fraction of samples` interacts with the parameter `Number of Trees`. Choosing `Fraction of samples` < 1.0 leads to a reduction of variance and an increase in bias.\n\n10. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n11. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nxgb_classification_train(table, feature_cols, label_col, max_depth=3, learning_rate=0.1, n_estimators=100, silent=True objective='binary:logistic', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, random_state=None, seed=None, missing=None, importance_type='gain', class_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True, xgb_model=None, sample_weight_eval_set=None)\n```\n\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels.\n\n#### OUTPUT\n1. **model**: (Model) Trained XGBoost classification model.\n\n#### PARAMETER\n1. **feature_cols***: Feature Column names. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **label_col***: The column designated for the labels of data. The column should contain categorical type values as it is for classification.\n\t* Type: *str*\n3. **objective**: The learning task and the corresponding learning objective. For multi-class classification (the number of classes is greater than or equal to 3), the learning task uses softmax objective.\n\t* Type: *str*\n\t* Default / Range: binary:logistic ( binary:logistic | binary:hinge | count:poisson | survival:cox | rank:pairwise | reg:gamma | reg:tweedie )\n4. **max_depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Increasing this value will make the model more complex and more likely to overfit. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\t* Type: *int*\n\t* Default / Range: 3 (1 <= value)\n5. **learning_rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. \n\t* Type: *float*\n\t* Default / Range: 0.1 (0 <= value)\n6. **n_estimators**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\t* Type: *int*\n\t* Default / Range: 100 (1 <= value)\n7. **class_weight**: Weights associated with classes. If weights are not given, all classes are supposed to have weight one. Note that the class labels are considered in lexicographical order.\n\t* Type: *int*\n\t* Default / Range: None (1 <= value)\n8. **importance_type**: The feature importance type for the `feature_importances_` property\n\t* Type: *str*\n\t* Default / Range: gain ( gain | weight | cover | total_gain | total_cover )\n9. **subsample**: The subsample to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `subsample` interacts with the parameter `n_estimators`. Choosing Subsample < 1.0 leads to a reduction of variance and an increase in bias.\n\t* Type: *float*\n\t* Default / Range: 1.0 (0 < value <= 1.0)\n10. **random_state**: The seed used by the random number generator.\n\t* Type: *int*\n11. **silent** : Whether print messages during construction.\n - Type : _bool_ \n - Default value: True\n12. **booster** : Specify which booster to use.\n - Type : _str_ \n - Default / Range : gbtree ( gbtree | gblinear | dart )\n13. **n_jobs** : Number of parallel threads used to run xgboost.\n - Type : _int_ \n - Default / Range: 1 (1 <= value)\n14. **nthread** : Number of threads to use for loading data from numpy array. If -1, uses maximum threads available on the system.\n - Type : _int_ \n - Default / Range: None (-1 <= value)\n15. **gamma** : Minimum loss reduction required to make a further partition on a leaf node of the tree.\n - Type : _float_ \n - Default / Range: 0 (0 <= value)\n16. **min_child_weight** : Minimum sum of instance weight(hessian) needed in a child.\n - Type : _int_ \n - Default / Range: 1 (0 <= value)\n17. **max_delta_step** : Maximum delta step we allow each tree’s weight estimation to be.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n18. **colsample_bytree** : `subsample` ratio of columns when constructing each tree.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n19. **colsample_bylevel** : `subsample` ratio of columns for each level.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n20. **reg_alpha** : L1 regularization term on weights.\n - Type : _float_ \n - Default value: 0\n21. **reg_lambda** : L2 regularization term on weights.\n - Type : _float_ \n - Default value: 1\n22. **scale_pos_weight** : Balancing of positive and negative weights.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n23. **base_score** : The initial prediction score of all instances, global bias.\n - Type : _float_ \n - Default / Range: 0.5 (0 <= value)\n24. **seed** : Random seed. Use the same seed in order to reproduce the same results.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n25. **missing** : Value in the data which needs to be present as a missing value.\n - Type : _float_ \n - Default / Range: None (0 <= value)\n26. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n27. **eval_set** : A list of (X, y) tuple pairs to use as validation sets, for which metrics will be computed. Validation metrics will help us track the performance of the model.\n - Type : _list_[_tuple_] \n - Default value: None\n28. **eval_metric** : If a str, should be a built-in evaluation metric to use. If a list of str, should be the list of multiple built-in evaluation metrics to use. If callable, a custom evaluation metric. The call signature is func(y_predicted, y_true) where y_true will be a DMatrix object such that you may need to call the get_label method. It must return a str, value pair where the str is a name for the evaluation and value is the value of the evaluation function. The callable custom objective is always minimized.\n - Type : _str_ or _list[_str_]\n - Default / Range: None ( logloss | error | auc | aucpr | mlogloss | merror )\n29. **early_stopping_rounds** : Activates early stopping. Cross-Validation metric (average of validation metric computed over CV folds) needs to improve at least once in every `early_stopping_rounds` round(s) to continue training. The last entry in the evaluation history will represent the best iteration. If there’s more than one metric in the eval_metric parameter given in params, the last metric will be used for early stopping.\n - Type : _int_ \n - Default / Range: None (0 <= value)\n30. **verbose** : If `verbose` and an `eval_set` is used, writes the evaluation metric measured on the validation set to stderr.\n - Type : _bool_ \n - Default value : True\n31. **xgb_model** : file name of stored XGBoost model or `booster` instance XGBoost model to be loaded before training (allows training continuation).\n - Type : _str_ \n - Default value: None\n32. **sample_weight_eval_set** : A list of the form [L\\_1, L\\_2, …, L\\_n], where each L\\_i is a list of instance weights on the i-th validation set.\n - Type : _list_[_str_] \n - Default value: None\n\n\t\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a XGB classification. The generated model is afterward applied to a test dataset to predict the class of _species_ by using XGB Classification Predict function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Feature Columns***: sepal\\_length, sepal\\_width\n2. **Label Column***: species\n3. **Objective for Binary Classification**: Logistic regression\n4. **Max Depth**: 3\n5. **Learning Rate**: 0.1\n6. **Number of Trees**: 100\n7. **Class Weights**: None\n8. **Importance Type**: Gain\n9. **Fraction of Samples**: 1.0\n10. **Seed**: 0\n11. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.classification import xgb_classification_train\ninput_table = inputs[0]\nresult = xgb_classification_train(table=input_table,\n\t\t\t\tfeature_cols=['sepal_length', 'sepal_width'],\n\t\t\t\tlabel_col='species',\n\t\t\t\tmax_depth=3,\n\t\t\t\tlearning_rate=0.1, \n\t\t\t\tn_estimators=100, \t\n\t\t\t\tsilent=True, \n\t\t\t\tobjective='binary:logistic', \n\t\t\t\tbooster='gbtree', \n\t\t\t\tn_jobs=1,\n\t\t\t\tnthread=None,\n\t\t\t\tgamma=0,\n\t\t\t\tmin_child_weight=1,\n\t\t\t\tmax_delta_step=0,\n\t\t\t\tsubsample=1,\n\t\t\t\tcolsample_bytree=1,\n\t\t\t\tcolsample_bylevel=1,\n\t\t\t\treg_alpha=0,\n\t\t\t\treg_lambda=1, \n \t\t\t\tscale_pos_weight=1, \n\t\t\t\tbase_score=0.5, \n\t\t\t\trandom_state=None, \n\t\t\t\tseed=None, \n\t\t\t\tmissing=None, \n\t\t\t\timportance_type='gain', \n\t\t\t\tclass_weight=None, \n\t\t\t\teval_set=None, \n\t\t\t\teval_metric=None, \n\t\t\t\tearly_stopping_rounds=None, \n\t\t\t\tverbose=True, \n\t\t\t\txgb_model=None, \n\t\t\t\tsample_weight_eval_set=None)\noutput = result['model']\n```\nIn this python script, sample_iris data is used to train a XGB classification. The generated model can be applied to a test dataset to predict the class of _species_ by using XGB Classification Predict function.\n", + "md": "# XGB Classification Train\nThis function trains a XGBoost Classification model which is highly efficient, flexible and portable.\n\n## Description\nXGBoost stands for 'Extreme Gradient Boosting', where the term 'Gradient Boosting' originates from the paper Greedy Function Approximation: A Gradient Boosting Machine, by Friedman. \n\nXGBoost provides a parallel tree boosting (also known as GBDT, GBM) that solve many data science problems in a fast and accurate way. The same code runs on major distributed environment (Hadoop, SGE, MPI) and can solve problems beyond billions of examples. To sum up, XGBoost is an optimized distributed gradient boosting.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table)\nTraining data in a Table. It must contain at least one column for labels. \n\n#### OUTPUT\n1. **model**: (Model) Trained XGBoost Classification model. \n\n#### PARAMETER\n1. **Feature Columns***: Feature Column names. Only values in numeric type are possible.\n\n2. **Label Column***: The column designated for the labels of data. The column should contain categorical type values as it is for classification.\n\n3. **Objective for Binary Classification**: Specify the learning task and the corresponding learning objective or a custom objective function to be used. The objective options are below:\n\tbinary:logistic - logistic regression for binary classification, output probability.\n\tbinary:hinge - hinge loss for binary classification. This makes predictions of 0 or 1, rather than producing probabilities.\n\tcount:poisson - Poisson regression for count data, output mean of poisson distribution\n\tsurvival:cox - Cox regression for right censored survival time data (negative values are considered right censored)\n\trank:pairwise - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized\n\treg:gamma - gamma regression with log-link. Output is a mean of gamma distribution. It might be useful, e.g., for modeling insurance claims severity, or for any outcome that might be gamma-distributed\n\treg:tweedie - Tweedie regression with log-link. It might be useful, e.g., for modeling total loss in insurance, or for any outcome that might be Tweedie-distributed.\n - Available Options : `Logistic regression`, `Hinge loss for binary classification`,\n `Poisson regression for count data`, `Cox regression for right censored survival time`, `Pairwise ranking`, `Gamma regression with log-link`, `Tweedie regression with log-link`\n\n4. **Max Depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Increasing this value will make the model more complex and more likely to overfit. 0 is only accepted in loss guided growing policy when tree_method is set as hist and it indicates no limit on depth. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\n5. **Learning Rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. \n\n6. **Number of Trees**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\n7. **Class Weights**: Weights associated with classes. If weights are not given, all classes are supposed to have weight one. Note that the class labels are considered in lexicographical order.\n\n8. **Importance Type**: `Importance Type` is a feature importance type property.\n - Available Options : `Gain`, `Weight`, `Cover`, `Total Gain`, `Total Cover`\n \n9. **Fraction of Samples**: The `fraction of samples` is to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `Fraction of samples` interacts with the parameter `Number of Trees`. Choosing `Fraction of samples` < 1.0 leads to a reduction of variance and an increase in bias.\n\n10. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n11. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nxgb_classification_train(table, feature_cols, label_col, max_depth=3, learning_rate=0.1, n_estimators=100, silent=True objective='binary:logistic', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, random_state=None, seed=None, missing=None, importance_type='gain', class_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True, xgb_model=None, sample_weight_eval_set=None)\n```\n\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels.\n\n#### OUTPUT\n1. **model**: (Model) Trained XGBoost classification model.\n\n#### PARAMETER\n1. **feature_cols***: Feature Column names. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **label_col***: The column designated for the labels of data. The column should contain categorical type values as it is for classification.\n\t* Type: *str*\n3. **objective**: Specify the learning task and the corresponding learning objective or a custom objective function to be used. The objective options are below:\n\tbinary:logistic - logistic regression for binary classification, output probability.\n\tbinary:hinge - hinge loss for binary classification. This makes predictions of 0 or 1, rather than producing probabilities.\n\tcount:poisson - Poisson regression for count data, output mean of poisson distribution\n\tsurvival:cox - Cox regression for right censored survival time data (negative values are considered right censored)\n\trank:pairwise - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized\n\treg:gamma - gamma regression with log-link. Output is a mean of gamma distribution. It might be useful, e.g., for modeling insurance claims severity, or for any outcome that might be gamma-distributed\n\treg:tweedie - Tweedie regression with log-link. It might be useful, e.g., for modeling total loss in insurance, or for any outcome that might be Tweedie-distributed.\n\t* Type: *str*\n\t* Default / Range: binary:logistic ( binary:logistic | binary:hinge | count:poisson | survival:cox | rank:pairwise | reg:gamma | reg:tweedie )\n4. **max_depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Increasing this value will make the model more complex and more likely to overfit. 0 is only accepted in loss guided growing policy when tree_method is set as hist and it indicates no limit on depth. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\t* Type: *int*\n\t* Default / Range: 3 (1 <= value)\n5. **learning_rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. \n\t* Type: *float*\n\t* Default / Range: 0.1 (0 <= value)\n6. **n_estimators**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\t* Type: *int*\n\t* Default / Range: 100 (1 <= value)\n7. **class_weight**: Weights associated with classes. If weights are not given, all classes are supposed to have weight one. Note that the class labels are considered in lexicographical order.\n\t* Type: *int*\n\t* Default / Range: None (1 <= value)\n8. **importance_type**: The feature importance type for the `feature_importances_` property\n\t* Type: *str*\n\t* Default / Range: gain ( gain | weight | cover | total_gain | total_cover )\n9. **subsample**: The subsample to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `subsample` interacts with the parameter `n_estimators`. Choosing Subsample < 1.0 leads to a reduction of variance and an increase in bias.\n\t* Type: *float*\n\t* Default / Range: 1.0 (0 < value <= 1.0)\n10. **random_state**: The seed used by the random number generator.\n\t* Type: *int*\n11. **silent** : Whether print messages during construction.\n - Type : _bool_ \n - Default value: True\n12. **booster** : Specify which booster to use.\n - Type : _str_ \n - Default / Range : gbtree ( gbtree | gblinear | dart )\n13. **n_jobs** : Number of parallel threads used to run xgboost.\n - Type : _int_ \n - Default / Range: 1 (1 <= value)\n14. **nthread** : Number of threads to use for loading data from numpy array. If -1, uses maximum threads available on the system.\n - Type : _int_ \n - Default / Range: None (-1 <= value)\n15. **gamma** : Minimum loss reduction required to make a further partition on a leaf node of the tree.\n - Type : _float_ \n - Default / Range: 0 (0 <= value)\n16. **min_child_weight** : Minimum sum of instance weight(hessian) needed in a child.\n - Type : _int_ \n - Default / Range: 1 (0 <= value)\n17. **max_delta_step** : Maximum delta step we allow each tree’s weight estimation to be.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n18. **colsample_bytree** : `subsample` ratio of columns when constructing each tree.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n19. **colsample_bylevel** : `subsample` ratio of columns for each level.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n20. **reg_alpha** : L1 regularization term on weights.\n - Type : _float_ \n - Default value: 0\n21. **reg_lambda** : L2 regularization term on weights.\n - Type : _float_ \n - Default value: 1\n22. **scale_pos_weight** : Balancing of positive and negative weights.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n23. **base_score** : The initial prediction score of all instances, global bias.\n - Type : _float_ \n - Default / Range: 0.5 (0 <= value)\n24. **seed** : Random seed. Use the same seed in order to reproduce the same results.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n25. **missing** : Value in the data which needs to be present as a missing value.\n - Type : _float_ \n - Default / Range: None (0 <= value)\n26. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n27. **eval_set** : A list of (X, y) tuple pairs to use as validation sets, for which metrics will be computed. Validation metrics will help us track the performance of the model.\n - Type : _list_[_tuple_] \n - Default value: None\n28. **eval_metric** : If a str, should be a built-in evaluation metric to use. If a list of str, should be the list of multiple built-in evaluation metrics to use. If callable, a custom evaluation metric. The call signature is func(y_predicted, y_true) where y_true will be a DMatrix object such that you may need to call the get_label method. It must return a str, value pair where the str is a name for the evaluation and value is the value of the evaluation function. The callable custom objective is always minimized.\n - Type : _str_ or _list[_str_]\n - Default / Range: None ( logloss | error | auc | aucpr | mlogloss | merror )\n29. **early_stopping_rounds** : Activates early stopping. Cross-Validation metric (average of validation metric computed over CV folds) needs to improve at least once in every `early_stopping_rounds` round(s) to continue training. The last entry in the evaluation history will represent the best iteration. If there’s more than one metric in the eval_metric parameter given in params, the last metric will be used for early stopping.\n - Type : _int_ \n - Default / Range: None (0 <= value)\n30. **verbose** : If `verbose` and an `eval_set` is used, writes the evaluation metric measured on the validation set to stderr.\n - Type : _bool_ \n - Default value : True\n31. **xgb_model** : file name of stored XGBoost model or `booster` instance XGBoost model to be loaded before training (allows training continuation).\n - Type : _str_ \n - Default value: None\n32. **sample_weight_eval_set** : A list of the form [L\\_1, L\\_2, …, L\\_n], where each L\\_i is a list of instance weights on the i-th validation set.\n - Type : _list_[_str_] \n - Default value: None\n\n\t\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a XGB classification. The generated model is afterward applied to a test dataset to predict the class of _species_ by using XGB Classification Predict function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Feature Columns***: sepal\\_length, sepal\\_width\n2. **Label Column***: species\n3. **Objective for Binary Classification**: Logistic regression\n4. **Max Depth**: 3\n5. **Learning Rate**: 0.1\n6. **Number of Trees**: 100\n7. **Class Weights**: None\n8. **Importance Type**: Gain\n9. **Fraction of Samples**: 1.0\n10. **Seed**: 0\n11. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.classification import xgb_classification_train\ninput_table = inputs[0]\nresult = xgb_classification_train(table=input_table,\n\t\t\t\tfeature_cols=['sepal_length', 'sepal_width'],\n\t\t\t\tlabel_col='species',\n\t\t\t\tmax_depth=3,\n\t\t\t\tlearning_rate=0.1, \n\t\t\t\tn_estimators=100, \t\n\t\t\t\tsilent=True, \n\t\t\t\tobjective='binary:logistic', \n\t\t\t\tbooster='gbtree', \n\t\t\t\tn_jobs=1,\n\t\t\t\tnthread=None,\n\t\t\t\tgamma=0,\n\t\t\t\tmin_child_weight=1,\n\t\t\t\tmax_delta_step=0,\n\t\t\t\tsubsample=1,\n\t\t\t\tcolsample_bytree=1,\n\t\t\t\tcolsample_bylevel=1,\n\t\t\t\treg_alpha=0,\n\t\t\t\treg_lambda=1, \n \t\t\t\tscale_pos_weight=1, \n\t\t\t\tbase_score=0.5, \n\t\t\t\trandom_state=None, \n\t\t\t\tseed=None, \n\t\t\t\tmissing=None, \n\t\t\t\timportance_type='gain', \n\t\t\t\tclass_weight=None, \n\t\t\t\teval_set=None, \n\t\t\t\teval_metric=None, \n\t\t\t\tearly_stopping_rounds=None, \n\t\t\t\tverbose=True, \n\t\t\t\txgb_model=None, \n\t\t\t\tsample_weight_eval_set=None)\noutput = result['model']\n```\nIn this python script, sample_iris data is used to train a XGB classification. The generated model can be applied to a test dataset to predict the class of _species_ by using XGB Classification Predict function.\n", "exampleModels": [ { "fileName": "brightics.function.classification$xgb_classification.json", diff --git a/function/python/brightics/function/classification/naive_bayes_classification.py b/function/python/brightics/function/classification/naive_bayes_classification.py index 62db5d783..12fabc494 100644 --- a/function/python/brightics/function/classification/naive_bayes_classification.py +++ b/function/python/brightics/function/classification/naive_bayes_classification.py @@ -140,7 +140,9 @@ def naive_bayes_predict(table, model, **params): return _naive_bayes_predict(table, model, **params) -def _naive_bayes_predict(table, model, suffix, display_log_prob=False, prediction_col='prediction', prob_prefix='probability', log_prob_prefix='log_probability'): +def _naive_bayes_predict(table, model, suffix, display_log_prob=False, prediction_col='prediction', + prob_prefix='probability', log_prob_prefix='log_probability', + display_joint_log_likelihood=False, joint_log_likelihood_prefix='joint_log_likelihood'): if 'features' in model: feature_cols = model['features'] else: @@ -169,7 +171,8 @@ def _naive_bayes_predict(table, model, suffix, display_log_prob=False, predictio else: suffixes = [0, 1] - prob = nb_model.predict_proba(features) + prob = nb_model.predict_proba(features) + likelihood = nb_model._joint_log_likelihood(features) prob_cols = ['{prefix}_{suffix}'.format(prefix=prob_prefix, suffix=suffix) for suffix in suffixes] prob_df = pd.DataFrame(data=prob, columns=prob_cols) @@ -184,5 +187,10 @@ def _naive_bayes_predict(table, model, suffix, display_log_prob=False, predictio else: result = pd.concat([result, prob_df], axis=1) + if display_joint_log_likelihood: + likelihood_cols = ['{prefix}_{suffix}'.format(prefix=joint_log_likelihood_prefix, suffix=suffix) for suffix in suffixes] + likelihood_df = pd.DataFrame(likelihood, columns=likelihood_cols) + result = pd.concat([result, likelihood_df], axis=1) + return {'out_table' : result} diff --git a/function/python/brightics/function/classification/svm_classification.py b/function/python/brightics/function/classification/svm_classification.py index 22d9b6201..fc8f88817 100644 --- a/function/python/brightics/function/classification/svm_classification.py +++ b/function/python/brightics/function/classification/svm_classification.py @@ -26,11 +26,21 @@ over_to, less_than_or_equal_to, raise_runtime_error, greater_than_or_equal_to_or_equal_to import sklearn.utils as sklearn_utils from brightics.common.classify_input_type import check_col_type +from brightics.common.exception import BrighticsFunctionException as BFE def svm_classification_train(table, group_by=None, **params): - check_required_parameters(_svm_classification_train, params, ['table']) + check_required_parameters(_svm_classification_train, params, ['table','gamma_val']) params = get_default_from_parameters_if_required(params, _svm_classification_train) + + if params['gamma'] == 'other': + if 'gamma_val' not in params: + raise BFE.from_errors([{'0100': 'Gamma value is mandatory when gamma is other'}]) + if params['gamma_val'] <= 0: + raise BFE.from_errors([{'0100': 'Gamma value must be greater than 0'}]) + else: + params['gamma_val'] = None + param_validation_check = [over_to(params, 0.0, 1.0, 'c'), greater_than_or_equal_to(params, 0, 'degree'), greater_than(params, 0.0, 'tol'), @@ -44,7 +54,7 @@ def svm_classification_train(table, group_by=None, **params): return _svm_classification_train(table, **params) -def _svm_classification_train(table, feature_cols, label_col, c=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, +def _svm_classification_train(table, feature_cols, label_col, gamma_val, c=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=True, tol=1e-3, max_iter=-1, random_state=None, class_weight=None): _table = table.copy() @@ -61,7 +71,11 @@ def _svm_classification_train(table, feature_cols, label_col, c=1.0, kernel='rbf else: class_weight = {class_labels[i] : class_weight[i] for i in range(len(class_labels))} - _svc = svm.SVC(C=c, kernel=kernel, degree=degree, gamma=gamma, coef0=coef0, shrinking=shrinking, + if gamma == 'other': + _gamma = gamma_val + else: + _gamma = gamma + _svc = svm.SVC(C=c, kernel=kernel, degree=degree, gamma=_gamma, coef0=coef0, shrinking=shrinking, probability=probability, tol=tol, max_iter=max_iter, random_state=random_state, class_weight=class_weight) _svc_model = _svc.fit(features, _label_col) diff --git a/function/python/brightics/function/classification/xgb_classification.py b/function/python/brightics/function/classification/xgb_classification.py index 7c9ef3155..407ddfb56 100644 --- a/function/python/brightics/function/classification/xgb_classification.py +++ b/function/python/brightics/function/classification/xgb_classification.py @@ -58,7 +58,7 @@ def _xgb_classification_train(table, feature_cols, label_col, max_depth=3, learn class_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True, xgb_model=None, sample_weight_eval_set=None): feature_names, features = check_col_type(table, feature_cols) - + if isinstance(features, list): features = np.array(features) @@ -106,10 +106,11 @@ def _xgb_classification_train(table, feature_cols, label_col, max_depth=3, learn get_param = classifier.get_params() feature_importance = classifier.feature_importances_ # plt.rcdefaults() - plot_importance(classifier) - plt.tight_layout() - fig_plot_importance = plt2MD(plt) - plt.clf() + # plot_importance(classifier) + # plt.tight_layout() + # fig_plot_importance = plt2MD(plt) + fig_plot_importance = _plot_feature_importances(feature_names, classifier) + # plt.clf() # plt.rcParams['figure.dpi'] = figure_dpi # plot_tree(classifier) # fig_plot_tree_UT = plt2MD(plt) @@ -206,3 +207,22 @@ def _xgb_classification_predict(table, model, prediction_col='prediction', proba result = pd.concat([result, prob_df], axis=1) return {'out_table': result} + + +def _plot_feature_importances(feature_names, classifier): + + feature_importance = classifier.feature_importances_ + indices = np.argsort(feature_importance) + sorted_feature_names = np.array(feature_names)[indices] + + plt.barh(range(len(indices)), feature_importance[indices], color='b', align='center') + for i, v in enumerate(feature_importance[indices]): + plt.text(v, i, " {:.2f}".format(v), color='b', va='center', fontweight='bold') + + plt.yticks(range(len(indices)), sorted_feature_names) + plt.xlabel("Feature importance") + plt.ylabel("Feature") + plt.tight_layout() + fig_feature_importances = plt2MD(plt) + plt.close() + return fig_feature_importances \ No newline at end of file diff --git a/function/python/brightics/function/clustering/__init__.py b/function/python/brightics/function/clustering/__init__.py index fc27adcbb..07b116e94 100644 --- a/function/python/brightics/function/clustering/__init__.py +++ b/function/python/brightics/function/clustering/__init__.py @@ -21,6 +21,7 @@ from .hierarchical_clustering import hierarchical_clustering from .hierarchical_clustering import hierarchical_clustering_post from .gaussian_mixture import gaussian_mixture_train +from .gaussian_mixture import gaussian_mixture_train2 from .gaussian_mixture import gaussian_mixture_predict from .mean_shift import mean_shift from .mean_shift import mean_shift_predict diff --git a/function/python/brightics/function/clustering/gaussian_mixture.py b/function/python/brightics/function/clustering/gaussian_mixture.py index c7935b459..d253434b2 100644 --- a/function/python/brightics/function/clustering/gaussian_mixture.py +++ b/function/python/brightics/function/clustering/gaussian_mixture.py @@ -118,12 +118,97 @@ def gaussian_mixture_predict(table, model, **params): return _gaussian_mixture_predict(table, model, **params) -def _gaussian_mixture_predict(table, model, display_probability, prediction_col_name='prediction'): +def _gaussian_mixture_predict(table, model, display_probability=False, prediction_col_name='prediction'): out_table = table.copy() _, inputarr = check_col_type(table, model['input_cols']) out_table[prediction_col_name] = model['gmm'].predict(inputarr) - if display_probability == True: + if display_probability is True: for i in range (0, model['number_of_components']): out_table['probability_' + str(i)] = pd.DataFrame(model['gmm'].predict_proba(table[model['input_cols']]))[i] return {'out_table':out_table} + +def gaussian_mixture_train2(table, group_by=None, **params): + check_required_parameters(_gaussian_mixture_train2, params, ['table']) + params = get_default_from_parameters_if_required(params, _gaussian_mixture_train2) + param_validation_check = [greater_than_or_equal_to(params, 1, 'number_of_components'), + greater_than(params, 0, 'tolerance'), + greater_than(params, 0, 'regularize_covariance'), + greater_than_or_equal_to(params, 1, 'max_iteration')] + validate(*param_validation_check) + if group_by is not None: + return _function_by_group(_gaussian_mixture_train2, table, group_by=group_by, **params) + else: + return _gaussian_mixture_train2(table, **params) + + +def _gaussian_mixture_train2(table, input_cols, number_of_components=1, prediction_col='prediction', covariance_type='full', tolerance=0.001, \ + regularize_covariance=1e-06, max_iteration=100, initial_params='kmeans', seed=None): + + gmm = GaussianMixture(n_components=number_of_components, covariance_type=covariance_type, tol=tolerance, \ + reg_covar=regularize_covariance, max_iter=max_iteration, init_params=initial_params, random_state=seed) + feature_names, X_train = check_col_type(table, input_cols) + gmm.fit(X_train) + gmm_prediction = gmm.predict(X_train) + + out_table = pd.DataFrame() + + comp_num_arr = [] + for i in range(0, number_of_components): + comp_num_arr.append(i) + + mean_arr = [] + for i in range(0, number_of_components): + mean_arr.append(gmm.means_[i].tolist()) + + covar_arr = [] + for i in range(0, number_of_components): + covar_arr.append(gmm.covariances_[i].tolist()) + + out_table['component_number'] = comp_num_arr + out_table['weight'] = gmm.weights_ + out_table['mean_coordinate'] = mean_arr + # temporary string type to covar_arr because it is array(array(array(double))) which is not supported so it causes problems + out_table['covariance_matrix'] = str(covar_arr) + + rb = BrtcReprBuilder() + params = { + 'Input Columns': feature_names, + 'Number of Components': number_of_components, + 'Covariance Type': covariance_type, + 'Tolerance': tolerance, + 'Regularization of Covariance': regularize_covariance, + 'Number of Iteration': max_iteration, + 'Method to Initialize': initial_params + } + + rb.addMD(strip_margin(""" + |## Gaussian Mixture Train Result + | + |### Parameters + | + | {params} + | + |### Summary + | + |{result_table} + | + """.format(params=dict2MD(params), result_table=pandasDF2MD(out_table)))) + + model = _model_dict('gaussian_mixture_train') + model['input_cols'] = input_cols + model['number_of_components'] = number_of_components + model['covariance_type'] = covariance_type + model['tolerance'] = tolerance + model['regularize_covariance'] = regularize_covariance + model['max_iteration'] = max_iteration + model['initial_params'] = initial_params + model['seed'] = seed + model['summary'] = out_table + model['gmm'] = gmm + model['_repr_brtc_'] = rb.get() + + tmp_out_table = table.copy() + tmp_out_table[prediction_col] = gmm_prediction + + return {'out_table':tmp_out_table, 'model':model} \ No newline at end of file diff --git a/function/python/brightics/function/clustering/hierarchical_clustering.py b/function/python/brightics/function/clustering/hierarchical_clustering.py index 882aa4a8f..bc2757e29 100644 --- a/function/python/brightics/function/clustering/hierarchical_clustering.py +++ b/function/python/brightics/function/clustering/hierarchical_clustering.py @@ -48,9 +48,8 @@ def hierarchical_clustering(table, group_by=None, **params): def _hierarchical_clustering(table, input_cols, input_mode='original', key_col=None, link='complete', met='euclidean', num_rows=20, figure_height=6.4, orient='right'): out_table = table.copy() feature_names, features = check_col_type(out_table, input_cols) - + len_features = len(features) if input_mode == 'original': - len_features = len(features) if key_col != None: data_names = list(out_table[key_col]) elif key_col == None: @@ -58,20 +57,15 @@ def _hierarchical_clustering(table, input_cols, input_mode='original', key_col=N out_table['name'] = data_names Z = linkage(ssd.pdist(features, metric=met), method=link, metric=met) elif input_mode == 'matrix': - len_features = len(input_cols) - if key_col != None: - data_names = [] - for column in input_cols: - data_names.append(out_table[key_col][out_table.columns.get_loc(column)]) - elif key_col == None: - data_names = [] - for column in input_cols: - data_names.append(out_table.columns[out_table.columns.get_loc(column)]) + data_names = input_cols col_index = [] + if key_col is None: + col_list = out_table.columns.tolist() + else: + col_list = out_table[key_col].tolist() for column in input_cols: - col_index.append(out_table.columns.get_loc(column)) + col_index.append(col_list.index(column)) dist_matrix = features.iloc[col_index] - Z = linkage(ssd.squareform(dist_matrix), method=link, metric=met) dist_matrix['name'] = data_names else: diff --git a/function/python/brightics/function/clustering/meta/gaussian_mixture_predict.json b/function/python/brightics/function/clustering/meta/gaussian_mixture_predict.json index fb96b128f..6051fe29f 100644 --- a/function/python/brightics/function/clustering/meta/gaussian_mixture_predict.json +++ b/function/python/brightics/function/clustering/meta/gaussian_mixture_predict.json @@ -77,42 +77,38 @@ { "type": "file", "data": { - "id": "m2yf2r32xaermewx", - "project_id": "pbdkuznb3y7rhnr9", + "id": "m4pz36vy83772shv", + "project_id": "p5dmzu78qb564crk", "label": "gaussian_mixture", "contents": { - "mid": "m2yf2r32xaermewx", + "mid": "m4pz36vy83772shv", "type": "data", "title": "gaussian_mixture", "functions": [ { "persist-mode": "auto", - "func": "brightics.function.clustering$gaussian_mixture_train06900", - "name": "brightics.function.clustering$gaussian_mixture_train", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", "param": { - "covariance_type": "full", - "initial_params": "random", - "input_cols": [ - "sepal_length", - "sepal_width" - ], - "number_of_components": 3 + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] }, "display": { - "label": "Gaussian Mixture Train", + "label": "Load", "diagram": { "position": { - "x": 770, + "x": 270, "y": 220 } }, "sheet": { - "in": { + "out": { "partial": [ { "panel": [ { - "id": "default-1583817330225", + "id": "default-1583819857307", "chartOption": { "colorSet": [ "#FD026C", @@ -301,12 +297,12 @@ "selectable": true }, "style": {}, - "group": "xd9kvyjfg24iuvfxem3hr7r5" + "group": "xp56uzsy2bsxb7wnvdpzfeqp" } ], "layout": { "type": "panel", - "id": "default-1583817330225" + "id": "default-1583819857307" } } ], @@ -316,65 +312,41 @@ "layout": {} } ] - }, - "out": { - "partial": [ - { - "panel": [], - "layout": {} - } - ], - "full": [ - { - "panel": [], - "layout": {} - } - ] } } }, "meta": { "table": { "type": "table" - }, - "model": { - "type": "model" } }, "context": "python", "version": "3.6", - "inputs": { - "table": "tjvq7msjmhx3brdg" - }, "outputs": { - "model": "tz6qz7tmz5z5cubb" + "table": "tcn7c8sauan95feh" }, - "fid": "fjmwfv7u2d9utem9" + "fid": "fk4fx2ws8rf2uygm" }, { "persist-mode": "auto", - "func": "brightics.function.io$load13889", - "name": "brightics.function.io$load", - "param": { - "partial_path": [ - "/brightics@samsung.com/upload/sample_iris.csv" - ] - }, + "func": "brightics.function.transform$split_data", + "name": "brightics.function.transform$split_data", + "param": {}, "display": { - "label": "Load", + "label": "Split Data", "diagram": { "position": { - "x": 270, + "x": 520, "y": 220 } }, "sheet": { - "out": { + "in": { "partial": [ { "panel": [ { - "id": "default-1583819857307", + "id": "default-1583819876807", "chartOption": { "colorSet": [ "#FD026C", @@ -563,12 +535,12 @@ "selectable": true }, "style": {}, - "group": "xp56uzsy2bsxb7wnvdpzfeqp" + "group": "8kdasghsptgwdun95p4ukenq" } ], "layout": { "type": "panel", - "id": "default-1583819857307" + "id": "default-1583819876807" } } ], @@ -578,41 +550,13 @@ "layout": {} } ] - } - } - }, - "meta": { - "table": { - "type": "table" - } - }, - "context": "python", - "version": "3.6", - "outputs": { - "table": "tnazfdvy9xarr58k" - }, - "fid": "fm2mfmdrujyzaref" - }, - { - "persist-mode": "auto", - "func": "brightics.function.transform$split_data", - "name": "brightics.function.transform$split_data", - "param": {}, - "display": { - "label": "Split Data", - "diagram": { - "position": { - "x": 520, - "y": 220 - } - }, - "sheet": { - "in": { + }, + "out": { "partial": [ { "panel": [ { - "id": "default-1583819876807", + "id": "default-1583819876867", "chartOption": { "colorSet": [ "#FD026C", @@ -801,12 +745,12 @@ "selectable": true }, "style": {}, - "group": "8kdasghsptgwdun95p4ukenq" + "group": "ep6979rkqp6kk5jnvw65pfsw" } ], "layout": { "type": "panel", - "id": "default-1583819876807" + "id": "default-1583819876867" } } ], @@ -816,13 +760,53 @@ "layout": {} } ] - }, - "out": { + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "train_table": { + "type": "table" + }, + "test_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tcn7c8sauan95feh" + }, + "outputs": { + "train_table": "twrc64q2c3aw86px", + "test_table": "tu6vqbprjzxfktjh" + }, + "fid": "fzrbh8avzwp9hygh" + }, + { + "persist-mode": "auto", + "func": "brightics.function.clustering$gaussian_mixture_predict65689", + "name": "brightics.function.clustering$gaussian_mixture_predict", + "param": { + "display_probability": false + }, + "display": { + "label": "Gaussian Mixture Predict", + "diagram": { + "position": { + "x": 1020, + "y": 220 + } + }, + "sheet": { + "in": { "partial": [ { "panel": [ { - "id": "default-1583819876867", + "id": "default-1583819927689", "chartOption": { "colorSet": [ "#FD026C", @@ -1011,12 +995,12 @@ "selectable": true }, "style": {}, - "group": "ep6979rkqp6kk5jnvw65pfsw" + "group": "22ze4re4xmfajxsvqfrwbnus" } ], "layout": { "type": "panel", - "id": "default-1583819876867" + "id": "default-1583819927689" } } ], @@ -1026,53 +1010,13 @@ "layout": {} } ] - } - } - }, - "meta": { - "table": { - "type": "table" - }, - "train_table": { - "type": "table" - }, - "test_table": { - "type": "table" - } - }, - "context": "python", - "version": "3.6", - "inputs": { - "table": "tnazfdvy9xarr58k" - }, - "outputs": { - "train_table": "tjvq7msjmhx3brdg", - "test_table": "t67jbpw7b7j53xpd" - }, - "fid": "fvu2z8ta8a9ds2px" - }, - { - "persist-mode": "auto", - "func": "brightics.function.clustering$gaussian_mixture_predict65689", - "name": "brightics.function.clustering$gaussian_mixture_predict", - "param": { - "display_probability": false - }, - "display": { - "label": "Gaussian Mixture Predict", - "diagram": { - "position": { - "x": 1020, - "y": 220 - } - }, - "sheet": { - "in": { + }, + "out": { "partial": [ { "panel": [ { - "id": "default-1583819927689", + "id": "default-1583819927750", "chartOption": { "colorSet": [ "#FD026C", @@ -1120,7 +1064,11 @@ "right": "8px", "top": "8px", "orientation": "horizontal", - "menu": {} + "menu": { + "zoom": { + "zoomAxis": "all" + } + } }, "chart": { "border": "1px #000000 none", @@ -1137,11 +1085,20 @@ "top": "60px", "bottom": "60px", "width": "auto", - "height": "auto" + "height": "auto", + "row": 5, + "column": 5, + "cellWidth": 50, + "cellHeight": 50, + "showImageGrid": true }, "xAxis": [ { - "selected": [], + "selected": [ + { + "name": "species" + } + ], "title": { "show": true, "text": "", @@ -1181,7 +1138,12 @@ ], "yAxis": [ { - "selected": [], + "selected": [ + { + "name": "sepal_length", + "aggregation": "sum" + } + ], "title": { "show": true, "text": "", @@ -1245,28 +1207,135 @@ "table": { "formatter": [] }, + "bubble": { + "marker": { + "symbolSize": 1, + "itemStyle": { + "normal": { + "opacity": 1 + } + } + }, + "stripLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "trendLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "sizeBy": [ + { + "selected": [] + } + ] + }, "map": { "geoData": {} - } - }, - "source": { - "dataType": "lazy", - "lazyData": [] - }, + }, + "area": { + "smooth": true, + "marker": { + "symbolSize": 1, + "itemStyle": { + "normal": { + "opacity": 1 + } + } + }, + "stripLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "trendLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "tooltip": { + "trigger": "axis" + }, + "showSymbol": { + "all": "auto" + } + }, + "pie": { + "radius": "75%", + "center": [ + "50%", + "50%" + ], + "sizeBy": [ + { + "selected": [] + } + ] + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, "guide": { "message": "Set data options using Chart Setting Button." - } + }, + "sortBy": [ + { + "selected": [] + } + ], + "imageColumn": [ + { + "selected": [] + } + ], + "labelColumn": [ + { + "selected": [] + } + ] }, "dataSource": { "selectable": true }, "style": {}, - "group": "22ze4re4xmfajxsvqfrwbnus" + "group": "dg2nwyqi2hcyquwi6nin9bfh" } ], "layout": { "type": "panel", - "id": "default-1583819927689" + "id": "default-1583819927750" } } ], @@ -1276,13 +1345,59 @@ "layout": {} } ] - }, - "out": { + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tu6vqbprjzxfktjh", + "model": "th6de2wyq7ujhxsx" + }, + "outputs": { + "out_table": "tzps8z8denr8ug6d" + }, + "fid": "f7xtm78jdqxhtrgd" + }, + { + "persist-mode": "auto", + "func": "brightics.function.clustering$gaussian_mixture_train2", + "name": "brightics.function.clustering$gaussian_mixture_train2", + "param": { + "covariance_type": "full", + "initial_params": "random", + "input_cols": [ + "sepal_length", + "sepal_width" + ], + "number_of_components": 3 + }, + "display": { + "label": "Gaussian Mixture", + "diagram": { + "position": { + "x": 770, + "y": 220 + } + }, + "sheet": { + "in": { "partial": [ { "panel": [ { - "id": "default-1583819927750", + "id": "default-1593657713685", "chartOption": { "colorSet": [ "#FD026C", @@ -1330,11 +1445,7 @@ "right": "8px", "top": "8px", "orientation": "horizontal", - "menu": { - "zoom": { - "zoomAxis": "all" - } - } + "menu": {} }, "chart": { "border": "1px #000000 none", @@ -1351,20 +1462,11 @@ "top": "60px", "bottom": "60px", "width": "auto", - "height": "auto", - "row": 5, - "column": 5, - "cellWidth": 50, - "cellHeight": 50, - "showImageGrid": true + "height": "auto" }, "xAxis": [ { - "selected": [ - { - "name": "species" - } - ], + "selected": [], "title": { "show": true, "text": "", @@ -1404,12 +1506,7 @@ ], "yAxis": [ { - "selected": [ - { - "name": "sepal_length", - "aggregation": "sum" - } - ], + "selected": [], "title": { "show": true, "text": "", @@ -1470,103 +1567,11 @@ }, "noDataMessage": "", "plotOptions": { - "bubble": { - "marker": { - "symbolSize": 1, - "itemStyle": { - "normal": { - "opacity": 1 - } - } - }, - "stripLine": { - "lineStyle": { - "normal": { - "color": "#000000", - "type": "solid", - "width": 1 - } - }, - "data": [ - {} - ] - }, - "trendLine": { - "lineStyle": { - "normal": { - "color": "#000000", - "type": "solid", - "width": 1 - } - }, - "data": [ - {} - ] - }, - "sizeBy": [ - { - "selected": [] - } - ] - }, "table": { "formatter": [] }, "map": { "geoData": {} - }, - "area": { - "smooth": true, - "marker": { - "symbolSize": 1, - "itemStyle": { - "normal": { - "opacity": 1 - } - } - }, - "stripLine": { - "lineStyle": { - "normal": { - "color": "#000000", - "type": "solid", - "width": 1 - } - }, - "data": [ - {} - ] - }, - "trendLine": { - "lineStyle": { - "normal": { - "color": "#000000", - "type": "solid", - "width": 1 - } - }, - "data": [ - {} - ] - }, - "tooltip": { - "trigger": "axis" - }, - "showSymbol": { - "all": "auto" - } - }, - "pie": { - "radius": "75%", - "center": [ - "50%", - "50%" - ], - "sizeBy": [ - { - "selected": [] - } - ] } }, "source": { @@ -1575,33 +1580,228 @@ }, "guide": { "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "i685eyhg58n4h5fdr578meun" + } + ], + "layout": { + "type": "panel", + "id": "default-1593657713685" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593657713775", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" }, - "sortBy": [ + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ { - "selected": [] + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 } ], - "imageColumn": [ + "yAxis": [ { - "selected": [] + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 } ], - "labelColumn": [ + "colorBy": [ { "selected": [] } - ] + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } }, "dataSource": { "selectable": true }, "style": {}, - "group": "dg2nwyqi2hcyquwi6nin9bfh" + "group": "cntjrabet3zxa86g5hcmtdng" } ], "layout": { "type": "panel", - "id": "default-1583819927750" + "id": "default-1593657713775" } } ], @@ -1618,45 +1818,45 @@ "table": { "type": "table" }, - "model": { - "type": "model" - }, "out_table": { "type": "table" + }, + "model": { + "type": "model" } }, "context": "python", "version": "3.6", "inputs": { - "table": "t67jbpw7b7j53xpd", - "model": "tz6qz7tmz5z5cubb" + "table": "twrc64q2c3aw86px" }, "outputs": { - "out_table": "tyygzvy2heuvcn26" + "out_table": "t5pj9pycshzv26bu", + "model": "th6de2wyq7ujhxsx" }, - "fid": "ft8kdujhx5zwf9x8" + "fid": "faqzwrj2scnmtbge" } ], "links": [ { - "kid": "kt5f72y8bc6pasjf", - "sourceFid": "fm2mfmdrujyzaref", - "targetFid": "fvu2z8ta8a9ds2px" + "kid": "kk9hehpasrtx3999", + "sourceFid": "fk4fx2ws8rf2uygm", + "targetFid": "fzrbh8avzwp9hygh" }, { - "kid": "khatkb4uvbqyyhct", - "sourceFid": "fvu2z8ta8a9ds2px", - "targetFid": "fjmwfv7u2d9utem9" + "kid": "ku284czm28g37jpn", + "sourceFid": "fzrbh8avzwp9hygh", + "targetFid": "f7xtm78jdqxhtrgd" }, { - "kid": "k3frqb9u9sdkxazp", - "sourceFid": "fjmwfv7u2d9utem9", - "targetFid": "ft8kdujhx5zwf9x8" + "kid": "kdqbkdv9w76vc4rw", + "sourceFid": "fzrbh8avzwp9hygh", + "targetFid": "faqzwrj2scnmtbge" }, { - "kid": "kxjmwypk4cnwfz9v", - "sourceFid": "fvu2z8ta8a9ds2px", - "targetFid": "ft8kdujhx5zwf9x8" + "kid": "keng54em2vkdnzqc", + "sourceFid": "faqzwrj2scnmtbge", + "targetFid": "f7xtm78jdqxhtrgd" } ], "preferences": {}, @@ -1685,10 +1885,10 @@ "description": "


", "model_image": null, "creator": "brightics@samsung.com", - "create_time": "2020-03-10T05:15:22.000Z", + "create_time": "2020-07-02T02:41:19.000Z", "updater": "brightics@samsung.com", - "update_time": "2020-03-10T06:01:15.000Z", - "event_key": "2020_060115.000", + "update_time": "2020-07-02T02:42:55.000Z", + "event_key": "2020_024255.000", "type": "data", "tag": "null", "from_version": "0.0" diff --git a/function/python/brightics/function/clustering/meta/gaussian_mixture_train.json b/function/python/brightics/function/clustering/meta/gaussian_mixture_train.json index 4da03c650..3b99c9f29 100644 --- a/function/python/brightics/function/clustering/meta/gaussian_mixture_train.json +++ b/function/python/brightics/function/clustering/meta/gaussian_mixture_train.json @@ -4,11 +4,12 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "clustering", "func": "brightics.function.clustering$gaussian_mixture_train06900", "name": "brightics.function.clustering$gaussian_mixture_train", "context": "python", - "label": "Gaussian Mixture Train", + "label": "Gaussian Mixture", "description": "A Gaussian mixture model is a probabilistic model that assumes all the data points are generated from a mixture of a finite number of Gaussian distributions with unknown parameters. One can think of mixture models as generalizing k-means clustering to incorporate information about the covariance structure of the data as well as the centers of the latent Gaussians.\n\n- Pros : It is the fastest algorithm for learning mixture models. As this algorithm maximizes only the likelihood, it will not bias the means towards zero, or bias the cluster sizes to have specific structures that might or might not apply.\n\n- Cons : When one has insufficiently many points per mixture, estimating the covariance matrices becomes difficult, and the algorithm is known to diverge and find solutions with infinite likelihood unless one regularizes the covariances artificially. This algorithm will always use all the components it has access to, needing held-out data or information theoretical criteria to decide how many components to use in the absence of external cues.\n\nReference:\n+ \n+ ", "tags": [ "gaussian_mixture_train", diff --git a/function/python/brightics/function/clustering/meta/gaussian_mixture_train2.json b/function/python/brightics/function/clustering/meta/gaussian_mixture_train2.json new file mode 100644 index 000000000..4422a4911 --- /dev/null +++ b/function/python/brightics/function/clustering/meta/gaussian_mixture_train2.json @@ -0,0 +1,2065 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "clustering", + "func": "brightics.function.clustering$gaussian_mixture_train2", + "name": "brightics.function.clustering$gaussian_mixture_train2", + "context": "python", + "label": "Gaussian Mixture", + "description": "A Gaussian mixture model is a probabilistic model that assumes all the data points are generated from a mixture of a finite number of Gaussian distributions with unknown parameters. One can think of mixture models as generalizing k-means clustering to incorporate information about the covariance structure of the data as well as the centers of the latent Gaussians.\n\n- Pros : It is the fastest algorithm for learning mixture models. As this algorithm maximizes only the likelihood, it will not bias the means towards zero, or bias the cluster sizes to have specific structures that might or might not apply.\n\n- Cons : When one has insufficiently many points per mixture, estimating the covariance matrices becomes difficult, and the algorithm is known to diverge and find solutions with infinite likelihood unless one regularizes the covariances artificially. This algorithm will always use all the components it has access to, needing held-out data or information theoretical criteria to decide how many components to use in the absence of external cues.\n\nReference:\n+ \n+ ", + "tags": [ + "gaussian_mixture_train", + "gmm" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Training data in a Table. It must contain at least one column for labels.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Data table with the prediction column." + }, + "model": { + "type": "model", + "desc": "Trained Gaussian Mixture model." + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "Input column names. Only values in numeric type are possible.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "Double[]" + ], + "multiple": true + }, + { + "id": "number_of_components", + "label": "Number of Components", + "description": "The number of mixture components.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "placeHolder": "1 (value >= 1)", + "type": "Integer", + "min": 1 + }, + { + "id": "prediction_col", + "label": "Prediction Column Name", + "description": "Column name for prediction", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "prediction" + }, + { + "id": "covariance_type", + "label": "Covariance Type", + "description": "String describing the type of covariance parameters to use. Must be one of:\n\n Full : each component has its own general covariance matrix\n Tied : all components share the same general covariance matrix\n Diagonal : each component has its own diagonal covariance matrix\n Spherical : each component has its own single variance", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Full", + "value": "full", + "default": true + }, + { + "label": "Tied", + "value": "tied", + "default": false + }, + { + "label": "Diagonal", + "value": "diag", + "default": false + }, + { + "label": "Spherical", + "value": "spherical", + "default": false + } + ], + "columnType": [] + }, + { + "id": "tolerance", + "label": "Tolerance", + "description": "The convergence threshold. EM iterations will stop when the lower bound average gain is below this threshold.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Double", + "min": 0, + "placeHolder": "0.001 (value > 0)" + }, + { + "id": "regularize_covariance", + "label": "Regularization of Covariance", + "description": "Non-negative regularization added to the diagonal of covariance. Allows to assure that the covariance matrices are all positive.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Double", + "min": 0, + "placeHolder": "0.000001 (value > 0)" + }, + { + "id": "max_iteration", + "label": "Number of Iteration", + "description": "The number of EM iterations to perform.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer", + "min": 1, + "placeHolder": "100 (value >= 1)" + }, + { + "id": "initial_params", + "label": "Method to Initialize", + "description": "The method used to initialize the weights, the means and the precisions. Must be one of:\n\nK-means : responsibilities are initialized using kmeans.\nRandom : responsibilities are initialized randomly.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "K-means", + "value": "kmeans", + "default": true + }, + { + "label": "Random", + "value": "random", + "default": false + } + ], + "columnType": [] + }, + { + "id": "seed", + "label": "Seed", + "description": "Random seed. Use the same seed in order to reproduce the same results.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer", + "multiple": true + } + ], + "summary": "This function trains an gaussian mixture clustering model.", + "tutorialLink": "https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/66_1_travel_locationdata_clustering?type=insight" + }, + "md": { + "en": "# Gaussian Mixture\nThis function trains an gaussian mixture clustering model.\n\n## Description\nA Gaussian mixture model is a probabilistic model that assumes all the data points are generated from a mixture of a finite number of Gaussian distributions with unknown parameters. One can think of mixture models as generalizing k-means clustering to incorporate information about the covariance structure of the data as well as the centers of the latent Gaussians.\n\n- Pros : It is the fastest algorithm for learning mixture models. As this algorithm maximizes only the likelihood, it will not bias the means towards zero, or bias the cluster sizes to have specific structures that might or might not apply.\n\n- Cons : When one has insufficiently many points per mixture, estimating the covariance matrices becomes difficult, and the algorithm is known to diverge and find solutions with infinite likelihood unless one regularizes the covariances artificially. This algorithm will always use all the components it has access to, needing held-out data or information theoretical criteria to decide how many components to use in the absence of external cues.\n\nReference:\n+ \n+ \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels.\n#### OUTPUT\n1. **out_table**: (Table) Data table with the prediction column.\n2. **model**: (Model) Trained Gaussian Mixture model.\n#### PARAMETER\n1. **Input Columns***: Input column names. Only values in numeric type are possible.\n\n2. **Number of Components**: The number of mixture components.\n\n3. **Prediction Column Name**: Column name for prediction\n\n4. **Covariance Type**: String describing the type of covariance parameters to use. Must be one of:\n * `Full` : each component has its own general covariance matrix\n * `Tied` : all components share the same general covariance matrix\n * `Diagonal` : each component has its own diagonal covariance matrix\n * `Spherical` : each component has its own single variance\n\n5. **Tolerance**: The convergence threshold. EM iterations will stop when the lower bound average gain is below this threshold.\n\n6. **Regularization of Covariance**: Non-negative regularization added to the diagonal of covariance. Allows to assure that the covariance matrices are all positive.\n\n7. **Number of Iteration**: The number of EM iterations to perform.\n\n8. **Method to Initialize**: The method used to initialize the weights, the means and the precisions. Must be one of:\n * `K-means` : responsibilities are initialized using kmeans.\n * `Random` : responsibilities are initialized randomly.\n\n9. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n10. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\ngaussian_mixture_train2(table, input_cols, number_of_components=1, prediction_col='prediction', covariance_type='full', tolerance=0.001, regularize_covariance=1e-06, max_iteration=100, initial_params='kmeans', seed=None, group_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels.\n#### OUTPUT\n1. **out_table**: (Table) Data table with the prediction column.\n2. **model**: (Model) Trained Gaussian Mixture model.\n#### PARAMETER\n1. **input_cols***: Input column names. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **number_of_components**: The number of mixture components.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n3. **prediction_col**: Column name for prediction\n\t* Type: *str*\n4. **covariance_type**: String describing the type of covariance parameters to use. Must be one of:\n * `full` : each component has its own general covariance matrix\n * `tied` : all components share the same general covariance matrix\n * `diagonal` : each component has its own diagonal covariance matrix\n * `spherical` : each component has its own single variance\n\t* Type: *str*\n\t* Default / Range: full ( full | tied | diag | spherical )\n5. **tolerance**: The convergence threshold. EM iterations will stop when the lower bound average gain is below this threshold.\n\t* Type: *double*\n\t* Default / Range: 0.001 (value > 0)\n6. **regularize_covariance**: Non-negative regularization added to the diagonal of covariance. Allows to assure that the covariance matrices are all positive.\n\t* Type: *double*\n\t* Default / Range: 0.000001 (value > 0)\n7. **max_iteration**: The number of EM iterations to perform.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n8. **initial_params**: The method used to initialize the weights, the means and the precisions. Must be one of:\n * `kmeans` : responsibilities are initialized using kmeans.\n * `random` : responsibilities are initialized randomly.\n\t* Type: *str*\n\t* Default / Range: kmeans ( kmeans | random )\n9. **seed**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n * Default value: None\n10. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\t* Default value: None\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a gaussian mixture. The generated model is afterward applied to a test data set to predict the cluster of data, by using Gaussian Mixture Predict function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Columns***: sepal_length, sepal_width\n2. **Number of Components**: 3\n3. **Prediction Column Name**: prediction\n4. **Covariance Type**: Full\n5. **Tolerance**: 0.001\n6. **Regularization of Covariance**: 0.000001\n7. **Number of Iteration**: 100\n8. **Method to Initialize**: Random\n9. **Seed**: None\n10. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.clustering import gaussian_mixture_train2\ninput_table = inputs[0]\nresult = gaussian_mixture_train2(table=input_table,\n\t\t\t\t\t\t\t\t input_cols=['sepal_width', 'sepal_length'],\n number_of_components=3,\n\t\t\t\t\t\t\t\t prediction_col='prediction',\n covariance_type='full',\n\t\t\t\t\t\t\t\t tolerance=0.001,\n\t\t\t\t\t\t\t\t regularize_covariance=0.000001,\n\t\t\t\t\t\t\t\t max_iteration=100,\n\t\t\t\t\t\t\t\t initial_params='kmeans',\n\t\t\t\t\t\t\t\t seed=None,\n\t\t\t\t\t\t\t\t group_by=None)\noutput_table = result['out_table']\noutput_model = result['model']\n\n```\nIn this tutorial workflow, sample_iris data is used to train a gaussian mixture. The generated model is afterward applied to a test data set to predict the cluster of data, by using Gaussian Mixture Predict function.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "gaussian_mixture.json", + "label": "gaussian_mixture", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m4pz36vy83772shv", + "project_id": "p5dmzu78qb564crk", + "label": "gaussian_mixture", + "contents": { + "mid": "m4pz36vy83772shv", + "type": "data", + "title": "gaussian_mixture", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583819857307", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "xp56uzsy2bsxb7wnvdpzfeqp" + } + ], + "layout": { + "type": "panel", + "id": "default-1583819857307" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tcn7c8sauan95feh" + }, + "fid": "fk4fx2ws8rf2uygm" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$split_data", + "name": "brightics.function.transform$split_data", + "param": {}, + "display": { + "label": "Split Data", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1583819876807", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "8kdasghsptgwdun95p4ukenq" + } + ], + "layout": { + "type": "panel", + "id": "default-1583819876807" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583819876867", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ep6979rkqp6kk5jnvw65pfsw" + } + ], + "layout": { + "type": "panel", + "id": "default-1583819876867" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "train_table": { + "type": "table" + }, + "test_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tcn7c8sauan95feh" + }, + "outputs": { + "train_table": "twrc64q2c3aw86px", + "test_table": "tu6vqbprjzxfktjh" + }, + "fid": "fzrbh8avzwp9hygh" + }, + { + "persist-mode": "auto", + "func": "brightics.function.clustering$gaussian_mixture_predict65689", + "name": "brightics.function.clustering$gaussian_mixture_predict", + "param": { + "display_probability": false + }, + "display": { + "label": "Gaussian Mixture Predict", + "diagram": { + "position": { + "x": 1020, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1583819927689", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "22ze4re4xmfajxsvqfrwbnus" + } + ], + "layout": { + "type": "panel", + "id": "default-1583819927689" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583819927750", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": { + "zoom": { + "zoomAxis": "all" + } + } + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto", + "row": 5, + "column": 5, + "cellWidth": 50, + "cellHeight": 50, + "showImageGrid": true + }, + "xAxis": [ + { + "selected": [ + { + "name": "species" + } + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [ + { + "name": "sepal_length", + "aggregation": "sum" + } + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "bubble": { + "marker": { + "symbolSize": 1, + "itemStyle": { + "normal": { + "opacity": 1 + } + } + }, + "stripLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "trendLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "sizeBy": [ + { + "selected": [] + } + ] + }, + "map": { + "geoData": {} + }, + "area": { + "smooth": true, + "marker": { + "symbolSize": 1, + "itemStyle": { + "normal": { + "opacity": 1 + } + } + }, + "stripLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "trendLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "tooltip": { + "trigger": "axis" + }, + "showSymbol": { + "all": "auto" + } + }, + "pie": { + "radius": "75%", + "center": [ + "50%", + "50%" + ], + "sizeBy": [ + { + "selected": [] + } + ] + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + }, + "sortBy": [ + { + "selected": [] + } + ], + "imageColumn": [ + { + "selected": [] + } + ], + "labelColumn": [ + { + "selected": [] + } + ] + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "dg2nwyqi2hcyquwi6nin9bfh" + } + ], + "layout": { + "type": "panel", + "id": "default-1583819927750" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tu6vqbprjzxfktjh", + "model": "th6de2wyq7ujhxsx" + }, + "outputs": { + "out_table": "tzps8z8denr8ug6d" + }, + "fid": "f7xtm78jdqxhtrgd" + }, + { + "persist-mode": "auto", + "func": "brightics.function.clustering$gaussian_mixture_train2", + "name": "brightics.function.clustering$gaussian_mixture_train2", + "param": { + "covariance_type": "full", + "initial_params": "random", + "input_cols": [ + "sepal_length", + "sepal_width" + ], + "number_of_components": 3 + }, + "display": { + "label": "Gaussian Mixture", + "diagram": { + "position": { + "x": 770, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593657713685", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "i685eyhg58n4h5fdr578meun" + } + ], + "layout": { + "type": "panel", + "id": "default-1593657713685" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593657713775", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "cntjrabet3zxa86g5hcmtdng" + } + ], + "layout": { + "type": "panel", + "id": "default-1593657713775" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "twrc64q2c3aw86px" + }, + "outputs": { + "out_table": "t5pj9pycshzv26bu", + "model": "th6de2wyq7ujhxsx" + }, + "fid": "faqzwrj2scnmtbge" + } + ], + "links": [ + { + "kid": "kk9hehpasrtx3999", + "sourceFid": "fk4fx2ws8rf2uygm", + "targetFid": "fzrbh8avzwp9hygh" + }, + { + "kid": "ku284czm28g37jpn", + "sourceFid": "fzrbh8avzwp9hygh", + "targetFid": "f7xtm78jdqxhtrgd" + }, + { + "kid": "kdqbkdv9w76vc4rw", + "sourceFid": "fzrbh8avzwp9hygh", + "targetFid": "faqzwrj2scnmtbge" + }, + { + "kid": "keng54em2vkdnzqc", + "sourceFid": "faqzwrj2scnmtbge", + "targetFid": "f7xtm78jdqxhtrgd" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-02T02:41:19.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-02T02:42:55.000Z", + "event_key": "2020_024255.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "gaussian_mixture2.png", + "label": "gaussian_mixture2.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_iris data is used to train a gaussian mixture. The generated model is afterward applied to a test data set to predict the cluster of data, by using Gaussian Mixture Predict function. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Columns***: sepal_length, sepal_width\n2. **Number of Components**: 3\n3. **Prediction Column Name**: prediction\n4. **Covariance Type**: Full\n5. **Tolerance**: 0.001\n6. **Regularization of Covariance**: 0.000001\n7. **Number of Iteration**: 100\n8. **Method to Initialize**: Random\n9. **Seed**: None\n10. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.clustering import gaussian_mixture_train2\r\ninput_table = inputs[0]\r\nresult = gaussian_mixture_train2(table=input_table,\r\n\t\t\t\t\t\t\t\t input_cols=['sepal_width', 'sepal_length'],\r\n number_of_components=3,\r\n\t\t\t\t\t\t\t\t prediction_col='prediction',\r\n covariance_type='full',\r\n\t\t\t\t\t\t\t\t tolerance=0.001,\r\n\t\t\t\t\t\t\t\t regularize_covariance=0.000001,\r\n\t\t\t\t\t\t\t\t max_iteration=100,\r\n\t\t\t\t\t\t\t\t initial_params='kmeans',\r\n\t\t\t\t\t\t\t\t seed=None,\r\n\t\t\t\t\t\t\t\t group_by=None)\r\noutput_table = result['out_table']\r\noutput_model = result['model']\r\n", + "description": "In this tutorial workflow, sample_iris data is used to train a gaussian mixture. The generated model is afterward applied to a test data set to predict the cluster of data, by using Gaussian Mixture Predict function.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/clustering/meta/kmeans_predict.json b/function/python/brightics/function/clustering/meta/kmeans_predict.json index 2a33db438..7cbb736d3 100644 --- a/function/python/brightics/function/clustering/meta/kmeans_predict.json +++ b/function/python/brightics/function/clustering/meta/kmeans_predict.json @@ -53,7 +53,7 @@ "md": "# K-Means Predict\r\nThis function predicts cluster labels from trained model.\r\n\r\n## Description\r\nKmeans algorithm is an iterative algorithm that tries to partition the dataset into Kpre-defined distinct non-overlapping subgroups (clusters) where each data point belongs to only one group. It tries to make the inter-cluster data points as similar as possible while also keeping the clusters as different (far) as possible. It assigns data points to a cluster such that the sum of the squared distance between the data points and the cluster’s centroid (arithmetic mean of all the data points that belong to that cluster) is at the minimum. The less variation we have within clusters, the more homogeneous (similar) the data points are within the same cluster.\r\n\r\nReference: \r\n+ \r\n+ \r\n+ \r\n\r\n\r\n## Properties\r\n### VA\r\n#### INPUT\r\n1. **table***: (Table) Data in a Table. It must contain columns that was used in model training.\r\n2. **model***: (Model) Trained K-Means model.\r\n#### OUTPUT\r\n1. **table**: (Table) A table that contains input `table`'s columns and prediction column as `Prediction Column Name`.\r\n#### PARAMETER\r\n1. **Prediction Column Name**: A name of prediction column.\r\n\r\n\r\n### Python\r\n#### USAGE\r\n\r\n```\r\nkmeans_predict(table, model, prediction_col='prediction')\r\n```\r\n\r\n#### INPUT\r\n1. **table***: (Table) Data in a Table. It must contain columns that was used in model training.\r\n2. **model***: (Model) Trained K-Means model.\r\n#### OUTPUT\r\n1. **table**: (Table) A table that contains input `table`'s columns and prediction column as `prediction_col`.\r\n#### PARAMETER\r\n1. **prediction_col**: A name of prediction column.\r\n\t* Type: *str*\r\n\t* Default value: 'prediction'\r\n\r\n## Example\r\n### VA\r\n**[Related Tutorial]**\r\n\r\n\r\n**[Sample Model]**\r\n\r\n\r\n\r\n\r\n\r\n
In this tutorial workflow, sample_iris data is used to train a K-Means model. The generated model is afterward applied to a test data set to predict the clustering label, by using K-Means Predict function. The parameter settings used in the function are shown below.\r\n\r\n##### ++Parameters++\r\n1. **Prediction Column Name**: prediction\r\n\r\n\r\n### Python\r\n```\r\nfrom brightics.function.clustering import kmeans_predict \r\ninput_table = inputs[1]\r\ninput_model = models[0]\r\nresult = kmeans_predict(table=input_table,\r\n model=input_model,\r\n prediction_col='prediction')\r\noutput = result['out_table']\r\n```\r\n
In this python script, a trained K-Means model is applied to a test data set to predict clustering label, by using kmeans_predict function.\r\n", "exampleModels": [ { - "fileName": "brightics.function.clustering$kmeans_train_predict.json", + "fileName": "brightics.function.clustering$kmeans_predict.json", "label": "K-Means", "contents": { "type": "files", diff --git a/function/python/brightics/function/clustering/meta/kmeans_train_predict.json b/function/python/brightics/function/clustering/meta/kmeans_train_predict.json index 7369b62d1..f0a0d111f 100644 --- a/function/python/brightics/function/clustering/meta/kmeans_train_predict.json +++ b/function/python/brightics/function/clustering/meta/kmeans_train_predict.json @@ -1424,7 +1424,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.clustering$kmeans_predict", + "func": "brightics.function.clustering$kmeans_predict54809", "name": "brightics.function.clustering$kmeans_predict", "param": {}, "display": { diff --git a/function/python/brightics/function/clustering/meta/mean_shift.json b/function/python/brightics/function/clustering/meta/mean_shift.json index 0f81d7d25..84e58aa9c 100644 --- a/function/python/brightics/function/clustering/meta/mean_shift.json +++ b/function/python/brightics/function/clustering/meta/mean_shift.json @@ -66,7 +66,7 @@ { "id": "bandwidth", "label": "Bandwidth", - "description": "Window size used in the RBF kernel. It has a physical meaning unlike 'k' of K-Means. ", + "description": "Window size used in the RBF kernel. It has a physical meaning unlike 'k' of K-Means. If None, the bandwidth is estimated using a heuristic.", "visibleOption": [], "control": "InputBox", "validation": [], @@ -134,7 +134,7 @@ ], "summary": "This function is a Mean Shift Clustering model which is a nonparametric clustering algorithm." }, - "md": "# Mean Shift\nThis function is a Mean Shift Clustering model which is a nonparametric clustering algorithm.\n\n## Description\nMean shift clustering aims to discover 'blobs' in a smooth density of samples. It is a centroid-based algorithm, which works by updating candidates for centroids to be the mean of the points within a given region. These candidates are then filtered in a post-processing stage to eliminate near-duplicates to form the final set of centroids.\n\nDeciding appropriate value of `bandwidth` is important. Inappropriate `bandwidth` can cause modes to be merged, or generate additional “shallow” modes. The best cases to use mean shift clustering are 1) when there are not too many data because it would take lots of calculating time, 2) when we cannot predict the distribution of data so that we do not know how many clusters would be created. Application domains include cluster analysis in computer vision and image processing.\n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Training data in a Table. \n#### OUTPUT\n1. **out_table**: (Table) A table that contains input `table`'s column and prediction column as `Prediction Column Name`.\n2. **model**: (Model) Trained Mean Shift Clustering model.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only values in numeric type are possible.\n\n2. **Prediction Column Name**: Column name for prediction.\n\n3. **Bandwidth**: Window size used in the RBF kernel. It has a physical meaning unlike 'k' of K-Means. \n\n4. **Bin Seeding**: If true, initial kernel locations are the location of the discretized version of points (by binding points into grid), therefore algorithm will be speeded up.\n\n\t* Default value: False \n5. **Minimum Bin Frequency**: To speed up the algorithm, accept only those bins with at least minimum bin frequency points as seed.\n\n6. **Cluster All**: If true, then all points are clustered, even those orphans that are not within any kernel. Orphans are assigned to the nearest kernel. If false, then orphans are given cluster label -1.\n\n\t* Default value: True \n7. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nmean_shift(table, input_cols, prediction_col='prediction', bandwidth=None, bin_seeding=False, min_bin_freq=1, cluster_all=True, group_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Training data in a Table.\n#### OUTPUT\n2. **model**: (Model) Trained Mean Shift Clustering model.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **prediction_col**: Column name for prediction.\n\t* Type: *str*\n\t* Default value: prediction\n3. **bandwidth**: Window size used in the RBF kernel. It has a physical meaning unlike 'k' of K-Means. \n\t* Type: *float*\n\t* Default / Range: None (value > 0)\n4. **bin_seeding**: If true, initial kernel locations are the location of the discretized version of points (by binding points into grid), therefore algorithm will be speeded up.\n\t* Type: *bool*\n\t* Default value: False \n5. **min_bin_freq**: To speed up the algorithm, accept only those bins with at least minimum bin frequency points as seed.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n6. **cluster_all**: If true, then all points are clustered, even those orphans that are not within any kernel. Orphans are assigned to the nearest kernel. If false, then orphans are given cluster label -1.\n\t* Type: *bool*\n\t* Default value: True \n7. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\t* Default value: None\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to Mean Shift Clustering. The generated model is afterward applied to a test dataset to predict the cluster by using Mean Shift Predict function. The parameter settings used in the function are shown below. \n\n++Parameters++\n1. **Input Columns***: sepal_length, sepal_width \n2. **Prediction Column Name**: prediction\n3. **Bandwidth**: 1\n4. **Bin Seeding**: False\n5. **Minimum Bin Frequency**: 1\n6. **Cluster All**: True\n7. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.clustering import mean_shift\ninput_table = inputs[0]\nresult = mean_shift(table=input_table,\n input_cols=['sepal_length', 'sepal_width'],\n prediction_col='prediction',\n bandwidth=None,\n bin_seeding=False,\n min_bin_freq=1, \n cluster_all=True,\n group_by=None)\noutput = result['model']\n```\nIn this python script, sample_iris data is used to train an Mean Shift Clustering. The generated model is afterward applied to a test dataset to predict the cluster by using Mean Shift Predict function.\n", + "md": "# Mean Shift\nThis function is a Mean Shift Clustering model which is a nonparametric clustering algorithm.\n\n## Description\nMean shift clustering aims to discover 'blobs' in a smooth density of samples. It is a centroid-based algorithm, which works by updating candidates for centroids to be the mean of the points within a given region. These candidates are then filtered in a post-processing stage to eliminate near-duplicates to form the final set of centroids.\n\nDeciding appropriate value of `bandwidth` is important. Inappropriate `bandwidth` can cause modes to be merged, or generate additional “shallow” modes. The best cases to use mean shift clustering are 1) when there are not too many data because it would take lots of calculating time, 2) when we cannot predict the distribution of data so that we do not know how many clusters would be created. Application domains include cluster analysis in computer vision and image processing.\n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Training data in a Table. \n#### OUTPUT\n1. **out_table**: (Table) A table that contains input `table`'s column and prediction column as `Prediction Column Name`.\n2. **model**: (Model) Trained Mean Shift Clustering model.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only values in numeric type are possible.\n\n2. **Prediction Column Name**: Column name for prediction.\n\n3. **Bandwidth**: Window size used in the RBF kernel. It has a physical meaning unlike 'k' of K-Means. If None, the bandwidth is estimated using a heuristic. \n\n4. **Bin Seeding**: If true, initial kernel locations are the location of the discretized version of points (by binding points into grid), therefore algorithm will be speeded up.\n\n\t* Default value: False \n5. **Minimum Bin Frequency**: To speed up the algorithm, accept only those bins with at least minimum bin frequency points as seed.\n\n6. **Cluster All**: If true, then all points are clustered, even those orphans that are not within any kernel. Orphans are assigned to the nearest kernel. If false, then orphans are given cluster label -1.\n\n\t* Default value: True \n7. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nmean_shift(table, input_cols, prediction_col='prediction', bandwidth=None, bin_seeding=False, min_bin_freq=1, cluster_all=True, group_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Training data in a Table.\n#### OUTPUT\n2. **model**: (Model) Trained Mean Shift Clustering model.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **prediction_col**: Column name for prediction.\n\t* Type: *str*\n\t* Default value: prediction\n3. **bandwidth**: Window size used in the RBF kernel. It has a physical meaning unlike 'k' of K-Means. If None, the bandwidth is estimated using a heuristic.\n\t* Type: *float*\n\t* Default / Range: None (value > 0)\n4. **bin_seeding**: If true, initial kernel locations are the location of the discretized version of points (by binding points into grid), therefore algorithm will be speeded up.\n\t* Type: *bool*\n\t* Default value: False \n5. **min_bin_freq**: To speed up the algorithm, accept only those bins with at least minimum bin frequency points as seed.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n6. **cluster_all**: If true, then all points are clustered, even those orphans that are not within any kernel. Orphans are assigned to the nearest kernel. If false, then orphans are given cluster label -1.\n\t* Type: *bool*\n\t* Default value: True \n7. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\t* Default value: None\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to Mean Shift Clustering. The generated model is afterward applied to a test dataset to predict the cluster by using Mean Shift Predict function. The parameter settings used in the function are shown below. \n\n++Parameters++\n1. **Input Columns***: sepal_length, sepal_width \n2. **Prediction Column Name**: prediction\n3. **Bandwidth**: 1\n4. **Bin Seeding**: False\n5. **Minimum Bin Frequency**: 1\n6. **Cluster All**: True\n7. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.clustering import mean_shift\ninput_table = inputs[0]\nresult = mean_shift(table=input_table,\n input_cols=['sepal_length', 'sepal_width'],\n prediction_col='prediction',\n bandwidth=None,\n bin_seeding=False,\n min_bin_freq=1, \n cluster_all=True,\n group_by=None)\noutput = result['model']\n```\nIn this python script, sample_iris data is used to train an Mean Shift Clustering. The generated model is afterward applied to a test dataset to predict the cluster by using Mean Shift Predict function.\n", "exampleModels": [ { "fileName": "brightics.function.clustering$mean_shift.json", diff --git a/function/python/brightics/function/evaluation/__init__.py b/function/python/brightics/function/evaluation/__init__.py index 5bb214337..ab44a3416 100644 --- a/function/python/brightics/function/evaluation/__init__.py +++ b/function/python/brightics/function/evaluation/__init__.py @@ -140,7 +140,7 @@ def _evaluate_classification(table, label_col, prediction_col, average="weighted all_df = pd.DataFrame(all_dict_list) all_df = all_df.transpose() all_df.columns = ['f1', 'precision', 'recall'] - all_df['label'] = set(label) + all_df['label'] = class_names all_df = all_df[['label'] + all_df.columns[:-1].tolist()] summary['metrics'] = all_df @@ -369,8 +369,10 @@ def _ndcg_k(k_value, num_users, documents, recommend_table): def evaluate_ranking_algorithm(table1, table2, user_col, item_col, evaluation_measure, rating_col=None, rating_edge=None, k_values=None): + none_str = 'None' item_encoder = preprocessing.LabelEncoder() - tmp_table_item_col = table1[item_col] + tmp_table_item_col = table1[item_col].values.tolist() + tmp_table_item_col.append(none_str) item_encoder.fit(tmp_table_item_col) if table2.columns[0] != 'user_name' and table2.columns[0] != 'user': raise_runtime_error("topN-list data schema should consist of [user_name, item_top1, rating_top1, .... item_topN, rating_topN]") @@ -395,7 +397,7 @@ def evaluate_ranking_algorithm(table1, table2, user_col, item_col, evaluation_me if table2.columns[2 * i + 1] != 'item_%d' % (i + 1) and table2.columns[2 * i + 2] != 'rating_%d' % (i + 1) and table2.columns[2 * i + 1] != 'item_top%d' % (i + 1) and table2.columns[2 * i + 2] != 'rating_top%d' % (i + 1): raise_runtime_error("topN-list data schema should consist of [user_name, item_top1, rating_top1, .... item_topN, rating_topN]") columns.append(table2.columns[2 * i + 1]) - recommend_table = table2[columns].values + recommend_table = table2[columns].replace('', none_str).fillna(none_str).values for i in range(len(recommend_table)): recommend_table[i] = item_encoder.transform(recommend_table[i]) result = [] diff --git a/function/python/brightics/function/extraction/__init__.py b/function/python/brightics/function/extraction/__init__.py index 1e2678d88..91bf46b84 100644 --- a/function/python/brightics/function/extraction/__init__.py +++ b/function/python/brightics/function/extraction/__init__.py @@ -20,7 +20,10 @@ from .scale import scale_model from .encoder import label_encoder from .encoder import label_encoder_model +from .encoder import label_encoder2 +from .encoder import label_encoder_model2 from .encoder import one_hot_encoder +from .encoder import one_hot_encoder2 from .encoder import one_hot_encoder_model from .pca import pca from .pca import pca_model @@ -41,3 +44,5 @@ from .decompose_datetime import decompose_datetime from .shift_datetime import shift_datetime from .datetime_formatter import datetime_formatter +from .variance_filter import variance_filter +from .correlation_filter import correlation_filter diff --git a/function/python/brightics/function/extraction/array_column_conversion.py b/function/python/brightics/function/extraction/array_column_conversion.py index 395b540a8..0c040c5b1 100644 --- a/function/python/brightics/function/extraction/array_column_conversion.py +++ b/function/python/brightics/function/extraction/array_column_conversion.py @@ -41,12 +41,20 @@ def _columns_to_array(table, input_cols, remain_cols=False, output_col_name='arr if remain_cols: out_table = table.copy() npa = np.array(table[input_cols]) - out_table[_output_col_name] = list(npa) + tmp_col = table[input_cols].dtypes == 'object' + if tmp_col.any(): + out_table[_output_col_name] = list(npa.astype(str)) + else: + out_table[_output_col_name] = list(npa) return {'out_table' : out_table} else: out_table = table[list(set(table.axes[1]) - set(input_cols))].copy() npa = np.array(table[input_cols]) - out_table[_output_col_name] = list(npa) + tmp_col = table[input_cols].dtypes == 'object' + if tmp_col.any(): + out_table[_output_col_name] = list(npa.astype(str)) + else: + out_table[_output_col_name] = list(npa) return {'out_table' : out_table} diff --git a/function/python/brightics/function/extraction/correlation_filter.py b/function/python/brightics/function/extraction/correlation_filter.py new file mode 100644 index 000000000..46dff2d58 --- /dev/null +++ b/function/python/brightics/function/extraction/correlation_filter.py @@ -0,0 +1,193 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.repr import BrtcReprBuilder, strip_margin, plt2MD, pandasDF2MD +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate, greater_than, greater_than_or_equal_to +from brightics.common.exception import BrighticsFunctionException as BFE + +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import pandas as pd +import numpy as np +from sklearn.preprocessing import LabelEncoder + +from scipy.sparse import issparse +from scipy.stats import spearmanr + +from sklearn.base import BaseEstimator +from sklearn.feature_selection.base import SelectorMixin +from sklearn.utils import check_array +from sklearn.utils.validation import check_is_fitted +from sklearn.utils.extmath import safe_sparse_dot +from sklearn.utils.sparsefuncs import min_max_axis, mean_variance_axis + +def correlation_filter(table, group_by=None, **params): + check_required_parameters(_correlation_filter, params, ['table']) + + if group_by is not None: + return _function_by_group(_correlation_filter, table, group_by=group_by, **params) + else: + return _correlation_filter(table, **params) + + +def _correlation_filter(table, feature_cols, correlation_threshold=0.9, method='pearson'): + X = table[feature_cols] + + keep_features = CorrelationThreshold(X, correlation_threshold, method) + + out_table = table[X.columns[keep_features]] + + return {'out_table': out_table} + +def CorrelationThreshold(X, threshold, kind): + """Learn empirical variances from X. + Parameters + ---------- + X : {array-like, sparse matrix} of shape (n_samples, n_features) + Training set to compute correlations. + y : ignored + Not used, present here for API consistency by convention. + Returns + ------- + support_mask : Boolean array for feature selection + """ + + if not (0.0 <= threshold <= 1.0): + raise BFE.from_errors([{'0100': 'Threshold value must in [0.0, 1.0]'}]) + + if kind not in ('pearson', 'spearmanr'): + raise BFE.from_errors([{'0100': "Kind must be 'pearson' or 'spearmanr"}]) + + if issparse(X) and kind != 'pearson': + raise BFE.from_errors([{'0100': "Only pearson correlation is supported with 'sparse matrices'"}]) + + X = check_array(X, accept_sparse=['csc', 'csr'], dtype=[np.float64, np.float32]) + + n_features = X.shape[1] + if threshold == 1 or (1 in X.shape): + support_mask = np.ones(n_features, dtype=np.bool) + return support_mask + + # get constant features + if issparse(X): + mins, maxes = min_max_axis(X, axis=0) + peak_to_peaks = maxes - mins + constant_mask = np.isclose(peak_to_peaks, 0.0) + + # sparse correlation + mu, sparse_var = mean_variance_axis(X, 0) + X_corr = sparse_correlation(X, mu, ~constant_mask) + else: + peak_to_peaks = np.ptp(X, axis=0) + constant_mask = np.isclose(peak_to_peaks, 0.0) + + if kind == 'pearson': + X_corr = np.corrcoef(X, rowvar=False) + else: # spearmanr + X_corr, _ = spearmanr(X) + # spearmanr returns scaler when comparing two columns + if isinstance(X_corr, float): + X_corr = np.array([[1, X_corr], [X_corr, 1]]) + + np.fabs(X_corr, out=X_corr) + + # Removes constant features from support_mask + support_mask = np.ones(n_features, dtype=np.bool) + upper_idx = np.triu_indices(n_features, 1) + + non_constant_features = n_features + for i in np.flatnonzero(constant_mask): + feat_remove_mask = np.logical_and(upper_idx[0] != i, + upper_idx[1] != i) + upper_idx = (upper_idx[0][feat_remove_mask], + upper_idx[1][feat_remove_mask]) + support_mask[i] = False + non_constant_features -= 1 + + for _ in range(non_constant_features -1): + max_idx = np.argmax(X_corr[upper_idx]) + feat1, feat2 = upper_idx[0][max_idx], upper_idx[1][max_idx] + cur_corr = X_corr[feat1, feat2] + + # max correlation is lower than threshold + if cur_corr < threshold: + break + + # Temporary remove both features to calculate the mean with other + # features. One of the featuers will be selected. + support_mask[[feat1, feat2]] = False + + # if there are no other features to compare, keep the feature with the most + # variance + if np.all(~support_mask): + if issparse(X): + # sparse precalculates variance for all features + var = sparse_var[[feat1, feat2]] + else: + var = np.var(X[:, [feat1, feat2]], axis=0) + + print(feat1, feat2) + if var[0] < var[1]: + support_mask[feat2] = True + else: + support_mask[feat1] = True + break + + # mean with other features + feat1_mean = np.mean(X_corr[feat1, support_mask]) + feat2_mean = np.mean(X_corr[feat2, support_mask]) + + # feature with lower mean is kept + if feat1_mean < feat2_mean: + support_mask[feat1] = True + feat_to_remove = feat2 + else: + support_mask[feat2] = True + feat_to_remove = feat1 + + # remove the removed feature from consideration + upper_idx_to_keep = np.logical_and(upper_idx[0] != feat_to_remove, + upper_idx[1] != feat_to_remove) + upper_idx = (upper_idx[0][upper_idx_to_keep], + upper_idx[1][upper_idx_to_keep]) + + return support_mask + +def sparse_correlation(X, mu, non_constant_mask): + """Calcuate Pearson correlation for sparse matrices + Parameters + ---------- + X : sparse matrix of shape (n_samples, n_features) + Matrix to find correlation on. + mu : ndarray of shape (n_features,) + Mean of feature columns. + non_constant_mask : ndarray of shape (n_features,) + Boolean mask for non constant features. + Returns + ------- + correlation matrix : ndarray of shape (n_features, n_features) + """ + X_diff = X - mu[None, :] + X_corr = safe_sparse_dot(X_diff.T, X_diff, dense_output=True) + stddev = np.sqrt(np.diag(X_corr)) + + X_corr[non_constant_mask, :] /= stddev[non_constant_mask][:, None] + X_corr[:, non_constant_mask] /= stddev[non_constant_mask][None, :] + return X_corr \ No newline at end of file diff --git a/function/python/brightics/function/extraction/encoder.py b/function/python/brightics/function/extraction/encoder.py index 9fccbba30..fb3205b0b 100644 --- a/function/python/brightics/function/extraction/encoder.py +++ b/function/python/brightics/function/extraction/encoder.py @@ -22,12 +22,14 @@ from brightics.function.utils import _model_dict from brightics.common.utils import check_required_parameters from brightics.common.validation import raise_runtime_error +from brightics.common.repr import BrtcReprBuilder, strip_margin, pandasDF2MD, dict2MD, plt2MD, keyValues2MD +import re def label_encoder(table, group_by=None, **params): check_required_parameters(_label_encoder, params, ['table']) if group_by is not None: - grouped_model = _function_by_group(_label_encoder, table, group_by=group_by, **params) + grouped_model = _function_by_group(_label_encoder, table, group_by=group_by, **params) return grouped_model else: return _label_encoder(table, **params) @@ -40,8 +42,20 @@ def _label_encoder(table, input_col, new_column_name='encoded_column'): out_model['label_encoder'] = le out_model['input_col'] = input_col out_model['classes'] = le.classes_ + rb = BrtcReprBuilder() + params = { + 'Input Column': input_col, + "No. distinct classes": len(le.classes_), + "New column name": new_column_name + } + rb.addMD(strip_margin(""" + | ## Label Encoder Model + | ### Parameters + | {params} + | + """.format(params=dict2MD(params)))) + out_model['_repr_brtc_'] = rb.get() out_table[new_column_name] = le.transform(table[input_col]) - return {'out_table' : out_table, 'model' : out_model} @@ -56,10 +70,70 @@ def label_encoder_model(table, model, **params): def _label_encoder_model(table, model, new_column_name='encoded_column'): out_table = table.copy() out_table[new_column_name] = model['label_encoder'].transform(out_table[model['input_col']]) - return {'out_table' : out_table} +def label_encoder2(table, group_by=None, **params): + check_required_parameters(_label_encoder2, params, ['table']) + if group_by is not None: + grouped_model = _function_by_group( + _label_encoder2, table, group_by=group_by, **params) + return grouped_model + else: + return _label_encoder2(table, **params) + + +def _label_encoder2(table, input_cols, suffix='_index'): + out_table = table.copy() + out_model_list = [None] * len(input_cols) + new_col_list = [] + number_distinct_classes = [] + for ind, col in enumerate(input_cols): + le = LabelEncoder().fit(table[col]) + out_model_list[ind] = le + new_col_name = col + suffix + new_col_list.append(new_col_name) + number_distinct_classes.append(len(le.classes_)) + out_table[new_col_name] = le.transform(table[col]) + out_model = _model_dict('label_encoders') + out_model['label_encoders'] = out_model_list + out_model['input_cols'] = input_cols + rb = BrtcReprBuilder() + params = { + "Input columns": input_cols, + "Suffix": suffix + } + summary_table = pd.DataFrame() + summary_table['Input columns'] = input_cols + summary_table['No. distinct classes'] = number_distinct_classes + summary_table['New column names'] = new_col_list + rb.addMD(strip_margin(""" + | ## Label Encoder Model + | ### Parameters + | {params} + | ### Summary + | {summary_table} + """.format(params=dict2MD(params), summary_table=pandasDF2MD(summary_table)))) + out_model['_repr_brtc_'] = rb.get() + return {'out_table': out_table, 'model': out_model} + + +def label_encoder_model2(table, model, **params): + check_required_parameters(_label_encoder_model2, params, ['table', 'model']) + if '_grouped_data' in model: + return _function_by_group(_label_encoder_model2, table, model, **params) + else: + return _label_encoder_model2(table, model, **params) + + +def _label_encoder_model2(table, model, suffix='_index'): + out_table = table.copy() + for ind, col in enumerate(model['input_cols']): + new_col_name = col + suffix + out_table[new_col_name] = model['label_encoders'][ind].transform(out_table[col]) + return {'out_table': out_table} + + def one_hot_encoder(table, group_by=None, **params): check_required_parameters(_one_hot_encoder, params, ['table']) if group_by is not None: @@ -133,6 +207,103 @@ def _one_hot_encoder(table, input_cols, prefix='list', prefix_list=None, suffix= return {'out_table' : out_table, 'model' : out_model} +def one_hot_encoder2(table, group_by=None, **params): + check_required_parameters(_one_hot_encoder2, params, ['table']) + if group_by is not None: + grouped_model = _function_by_group(_one_hot_encoder2, table, group_by=group_by, **params) + return grouped_model + else: + return _one_hot_encoder2(table, **params) + + +def _one_hot_encoder2(table, input_cols, prefix='list', prefix_list=None, suffix='index', n_values='auto', categorical_features='all', sparse=True, handle_unknown='error', drop_last=False): + out_table = table.copy() + sparse = False + enc_list = [] + le_list = [] + if drop_last: + new_col_names_list_with_true_drop_last = [] + new_col_names_list = [] + prefix_list_index = 0 + if prefix == 'list': + len_prefix_list = 0 if prefix_list is None else len(prefix_list) + if len(input_cols) != len_prefix_list: + # TODO: make the error message code + raise_runtime_error('The number of Input Columns and the number of Prefixes should be equal.') + number_distinct_classes = [] + for col_name in input_cols: + enc = OneHotEncoder(n_values=n_values, categorical_features=categorical_features, sparse=sparse, handle_unknown=handle_unknown) + le = LabelEncoder() + distinct_classes = np.unique(out_table[col_name].values) + number_distinct_classes.append(len(distinct_classes)) + new_col_names = [] + if suffix == 'index': + if prefix == 'list': + for i in range(0, len(distinct_classes)): + new_col_names.append(prefix_list[prefix_list_index] + '_' + str(i)) + else: + for i in range(0, len(distinct_classes)): + new_col_names.append(col_name + '_' + str(i)) + else: + pattern = re.compile("\W") + for i in distinct_classes: + i = re.sub(pattern, "_", str(i)) + if prefix == 'list': + new_col_names.append(prefix_list[prefix_list_index] + '_' + i) + else: + new_col_names.append(col_name + '_' + i) + + transformed_table = pd.DataFrame(enc.fit_transform(le.fit_transform(out_table[col_name]).reshape(-1, 1)), columns=new_col_names) + new_col_names_list.append(new_col_names) + if drop_last: + new_col_names = new_col_names[:-1] + new_col_names_list_with_true_drop_last.append(new_col_names) + for new_col_name in new_col_names: + out_table[new_col_name] = transformed_table[new_col_name] + + enc_list.append(enc) + le_list.append(le) + prefix_list_index = prefix_list_index + 1 + rb = BrtcReprBuilder() + params = { + 'Input Columns': input_cols, + "Prefix Type": prefix, + "Suffix Type": suffix, + "Drop Last": drop_last, + "Number of values per feature": n_values, + "Categorical features": categorical_features, + "Error handling": handle_unknown + } + summary_table = pd.DataFrame() + summary_table['Input Columns'] = input_cols + summary_table['No. distinct classes'] = number_distinct_classes + if drop_last: + summary_table['New encoded columns'] = new_col_names_list_with_true_drop_last + else: + summary_table['New encoded columns'] = new_col_names_list + rb.addMD(strip_margin(""" + | ## One Hot Encoder Model + | ### Parameters + | {params} + | + | ### Summary + | {summary_table} + """.format(params=dict2MD(params), summary_table=pandasDF2MD(summary_table)))) + out_model = _model_dict('one_hot_encoder') + out_model['one_hot_encoder_list'] = enc_list + out_model['label_encoder_list'] = le_list + out_model['input_cols'] = input_cols + out_model['prefix'] = prefix + out_model['prefix_list'] = prefix_list + out_model['suffix'] = suffix + out_model['drop_last'] = drop_last + out_model['_repr_brtc_'] = rb.get() + if drop_last: + out_model['new_col_names_list_with_true_drop_last'] = new_col_names_list_with_true_drop_last + out_model['new_col_names_list'] = new_col_names_list + return {'out_table' : out_table, 'model' : out_model} + + def one_hot_encoder_model(table, model, **params): check_required_parameters(_one_hot_encoder_model, params, ['table', 'model']) if '_grouped_data' in model: @@ -152,5 +323,4 @@ def _one_hot_encoder_model(table, model): else: for new_col_name in model['new_col_names_list'][i]: out_table[new_col_name] = transformed_table[new_col_name] - return {'out_table' : out_table} diff --git a/function/python/brightics/function/extraction/lda.py b/function/python/brightics/function/extraction/lda.py index c8e56f80d..9dc0dcb59 100644 --- a/function/python/brightics/function/extraction/lda.py +++ b/function/python/brightics/function/extraction/lda.py @@ -25,7 +25,7 @@ from brightics.common.validation import validate, greater_than_or_equal_to, less_than_or_equal_to from brightics.common.utils import get_default_from_parameters_if_required from brightics.common.exception import BrighticsFunctionException - +from sklearn.utils.multiclass import unique_labels def lda(table, group_by=None, **params): check_required_parameters(_lda, params, ['table']) @@ -71,10 +71,11 @@ def _lda(table, feature_cols, label_col, new_column_name='projected_', solver='s tol=1.0e-4): num_feature_cols = len(feature_cols) - if n_components is not None and n_components >= num_feature_cols - 1: - n_components = num_feature_cols - 2 - if n_components is None or n_components < 1: - n_components = 1 + num_classes = unique_labels(table[label_col]) + tmp_components = min(len(num_classes) - 1, num_feature_cols) + + if n_components is None or n_components > tmp_components: + n_components = tmp_components #validate(greater_than_or_equal_to(n_components, 1, 'n_components')) @@ -121,7 +122,11 @@ def _lda(table, feature_cols, label_col, new_column_name='projected_', solver='s res_xbar = lda_model.xbar_ if hasattr(lda_model, 'xbar_') else None res_classes = lda_model.classes_ if hasattr(lda_model, 'classes_') else None res_get_param = lda_model.get_params() - + res_get_param['covariance'] = res_covariance + res_get_param['means'] = res_mean + res_get_param['coef'] = res_coef + res_get_param['xbar'] = res_xbar + # visualization plt.figure() fig_scree = _screeplot(res_explained_variance_ratio, n_components) diff --git a/function/python/brightics/function/extraction/meta/array_to_columns.json b/function/python/brightics/function/extraction/meta/array_to_columns.json index cf273abf8..bd15d94a2 100644 --- a/function/python/brightics/function/extraction/meta/array_to_columns.json +++ b/function/python/brightics/function/extraction/meta/array_to_columns.json @@ -9,7 +9,7 @@ "name": "brightics.function.extraction$array_to_columns", "context": "python", "label": "Array To Columns", - "description": "Expands columns of Numeric Array to DoubleType columns.", + "description": "Expands columns of array type to columns.", "tags": [ "array", "columns" @@ -24,7 +24,7 @@ "meta": { "table": { "type": "table", - "desc": "Input table should contains at least one column of numeric array. ", + "desc": "Input table should contains at least one column of array type. ", "optional": false }, "out_table": { @@ -36,7 +36,7 @@ { "id": "input_cols", "label": "Input Columns", - "description": "The name of the input columns. The columns should be should be numeric array type. ", + "description": "The name of the input columns. The columns should be should be array type.", "visibleOption": [], "control": "ColumnSelector", "validation": [], @@ -46,7 +46,8 @@ "Integer[]", "Long[]", "Float[]", - "Double[]" + "Double[]", + "String[]" ], "multiple": true, "rowCount": 5 @@ -65,9 +66,9 @@ "defaultValue": false } ], - "summary": "Expands columns of Numeric Array to DoubleType columns." + "summary": "Expands columns of array type to columns." }, - "md": "# Array To Columns\nExpands columns of Numeric Array to DoubleType columns.\n\n## Description\nExpands columns of Numeric Array to DoubleType columns.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table should contains at least one column of numeric array. \n#### OUTPUT\n1. **out_table**: (Table) Result table contains one or more new columns decomposing a single array type column of the input table. \n#### PARAMETER\n1. **Input Columns***: The name of the input columns. The columns should be should be numeric array type. \n\n2. **Remain Columns**: Keep all input columns in output table\n\n\t* Default value: false \n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nThis model is a simple example for Array To Columns function. The function decomposes the array in the input column to multiple columns\n\n++Parameters++\n1. **Input Columns***: \n2. **Remain Columns**: false\n\n\n", + "md": "# Array To Columns\nExpands columns of array type to columns.\n\n## Description\nExpands columns of array type to columns.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table should contains at least one column of array type. \n#### OUTPUT\n1. **out_table**: (Table) Result table contains one or more new columns decomposing a single array type column of the input table. \n#### PARAMETER\n1. **Input Columns***: The name of the input columns. The columns should be should be array type. \n\n2. **Remain Columns**: Keep all input columns in output table\n\n\t* Default value: false \n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nThis model is a simple example for Array To Columns function. The function decomposes the array in the input column to multiple columns\n\n++Parameters++\n1. **Input Columns***: \n2. **Remain Columns**: false\n\n\n", "exampleModels": [ { "fileName": "array_to_column.json", diff --git a/function/python/brightics/function/extraction/meta/columns_to_array.json b/function/python/brightics/function/extraction/meta/columns_to_array.json index 328703f90..b243c0070 100644 --- a/function/python/brightics/function/extraction/meta/columns_to_array.json +++ b/function/python/brightics/function/extraction/meta/columns_to_array.json @@ -9,7 +9,7 @@ "name": "brightics.function.extraction$columns_to_array", "context": "python", "label": "Columns To Array", - "description": "Create a new ArrayType[DoubleType] column by zipping DoubleType columns.", + "description": "Create a new array type column by zipping columns.", "tags": [ "array", "columns" @@ -46,7 +46,8 @@ "Integer", "Long", "Float", - "Double" + "Double", + "String" ], "multiple": true, "rowCount": 5 @@ -78,9 +79,9 @@ "type": "String" } ], - "summary": "Create a new ArrayType[DoubleType] column by zipping DoubleType columns." + "summary": "Create a new array type column by zipping columns." }, - "md": "# Columns To Array\nCreate a new ArrayType[DoubleType] column by zipping DoubleType columns.\n\n## Description\nCreate a new ArrayType[DoubleType] column by zipping DoubleType columns.\n\n\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table.\n#### OUTPUT\n1. **out_table**: (Table) Output table with the zipping result.\n#### PARAMETER\n1. **Input Columns***: The name of the input columns.\n\n2. **Remain Columns**: Whether or not to preserve input columns in the output table.\n\n\t* Default value: false \n3. **Output Column Name**: Name of the output column.\n\n\n### Python\n#### USAGE\n\n```\nfrom brightics.function.extraction import columns_to_array\nres = columns_to_array(table, input_cols, remain_cols=False, output_col_name='array')\nres['out_table']\n```\n\n#### INPUT\n1. **table***: (Table) Input table.\n#### OUTPUT\n1. **out_table**: (Table) Output table with the zipping result.\n#### PARAMETER\n1. **input_cols***: The name of the input columns.\n\t* Type: *list[str]*\n2. **remain_cols**: Whether or not to preserve input columns in the output table.\n\t* Type: *\n\t* Default value: false \n3. **output_col_name**: Name of the output column.\n\t* Type: *\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n
In this tutorial workflow, four DoubleType columns 'sepal_length','sepal_width', 'petal_length', 'petal_width' in sample_iris are collected and zipped into a single Array[DoubleType] column.\n\n++Parameters++\n1. **Input Columns***: \n2. **Remain Columns**: false\n3. **Output Column Name**: \n\n\n### Python\n\n```\nfrom brightics.function.extraction import columns_to_array\nres = columns_to_array(table=inputs[0],\n input_cols=['sepal_length','sepal_width', 'petal_length', 'petal_width'],\n remain_cols=False, output_col_name='output_col')\ntable = res['out_table']\n```\n\n
In this python script, four DoubleType columns 'sepal_length','sepal_width', 'petal_length', 'petal_width' in sample_iris are collected and zipped into a single Array[DoubleType] column.", + "md": "# Columns To Array\nCreate a new array type column by zipping columns.\n\n## Description\nCreate a new array type column by zipping columns.\n\n\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table.\n#### OUTPUT\n1. **out_table**: (Table) Output table with the zipping result.\n#### PARAMETER\n1. **Input Columns***: The name of the input columns.\n\n2. **Remain Columns**: Whether or not to preserve input columns in the output table.\n\n\t* Default value: false \n3. **Output Column Name**: Name of the output column.\n\n\n### Python\n#### USAGE\n\n```\nfrom brightics.function.extraction import columns_to_array\nres = columns_to_array(table, input_cols, remain_cols=False, output_col_name='array')\nres['out_table']\n```\n\n#### INPUT\n1. **table***: (Table) Input table.\n#### OUTPUT\n1. **out_table**: (Table) Output table with the zipping result.\n#### PARAMETER\n1. **input_cols***: The name of the input columns.\n\t* Type: *list[str]*\n2. **remain_cols**: Whether or not to preserve input columns in the output table.\n\t* Type: *\n\t* Default value: false \n3. **output_col_name**: Name of the output column.\n\t* Type: *\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n
In this tutorial workflow, four DoubleType columns 'sepal_length','sepal_width', 'petal_length', 'petal_width' in sample_iris are collected and zipped into a single Array[DoubleType] column.\n\n++Parameters++\n1. **Input Columns***: \n2. **Remain Columns**: false\n3. **Output Column Name**: \n\n\n### Python\n\n```\nfrom brightics.function.extraction import columns_to_array\nres = columns_to_array(table=inputs[0],\n input_cols=['sepal_length','sepal_width', 'petal_length', 'petal_width'],\n remain_cols=False, output_col_name='output_col')\ntable = res['out_table']\n```\n\n
In this python script, four DoubleType columns 'sepal_length','sepal_width', 'petal_length', 'petal_width' in sample_iris are collected and zipped into a single Array[DoubleType] column.", "exampleModels": [ { "fileName": "Columns_to_array.json", diff --git a/function/python/brightics/function/extraction/meta/correlation_filter.json b/function/python/brightics/function/extraction/meta/correlation_filter.json new file mode 100644 index 000000000..2eb50c97e --- /dev/null +++ b/function/python/brightics/function/extraction/meta/correlation_filter.json @@ -0,0 +1,903 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "extraction", + "func": "brightics.function.extraction$correlation_filter99873", + "name": "brightics.function.extraction$correlation_filter", + "context": "python", + "label": "Correlation Filter", + "description": " This unsupervised feature selection algorithm considers feature pairs with a correlation higher than the `threshold` and removes the feature that has the highest mean correlation with the other features. The process terminates if there is no correlation higher than the `threshold`.", + "tags": [ + "correlation", + "extraction" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Input data.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Output Table." + } + }, + "params": [ + { + "id": "feature_cols", + "label": "Feature Columns", + "description": "Columns to be selected as features.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "Integer", + "Long", + "Float", + "Double" + ], + "multiple": true, + "rowCount": 5 + }, + { + "id": "correlation_threshold", + "label": "Correlation Threshold", + "description": "A correlation threshold value for removing features. ", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "max": 1, + "placeHolder": "0.9 (0.0 <= value <= 1.0)" + }, + { + "id": "method", + "label": "Method", + "description": "Method to evaluate statistical correlation.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "pearson", + "value": "pearson", + "default": true + }, + { + "label": "spearman", + "value": "spearmanr", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [] + }, + { + "id": "group_by", + "label": "Group By", + "description": "Groupby column.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + } + ] + }, + "md": { + "en": "# Correlation Filter\n\n\n## Description\n This unsupervised feature selection algorithm considers feature pairs with a correlation higher than the `threshold` and removes the feature that has the highest mean correlation with the other features. The process terminates if there is no correlation higher than the `threshold`.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input data.\n#### OUTPUT\n1. **out_table**: (Table) Output Table.\n#### PARAMETER\n1. **Feature Columns***: Columns to be selected as features.\n\n2. **Correlation Threshold**: A correlation threshold value for removing features. \n\n3. **Method**: Method to evaluate statistical correlation.\n\n4. **Group By**: Groupby column.\n\n\n### Python\n#### USAGE\n\n```\ncorrelation_filter(table = inputs[0], feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'], \n correlation_threshold = 0.9, method = 'pearson', group_by = None)\n```\n\n#### INPUT\n1. **table***: (Table) Input data.\n#### OUTPUT\n1. **out_table**: (Table) Output Table.\n#### PARAMETER\n1. **feature_cols***: Columns to be selected as features.\n\t* Type: *list[str]*\n2. **correlation_threshold**: A correlation threshold value for removing features. \n\t* Type: *double*\n\t* Default / Range: 0.9 (0.0 <= value <= 1.0)\n3. **method**: Method to evaluate statistical correlation.\n\t* Type: *str*\n\t* Default / Range: pearson ( pearson | spearmanr )\n4. **group_by**: Groupby column.\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their correlations.\n\n++Parameters++\n1. **Feature Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n2. **Correlation Threshold**: 0.9\n3. **Method**: pearson\n4. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.extraction import correlation_filter\nres = correlation_filter(table = inputs[0], feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])\noutput = res['out_table']\n```\nIn this script, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their correlations.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "corr_filter.json", + "label": "corr_filter", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mksmknt9yztdbb89", + "project_id": "p5dmzu78qb564crk", + "label": "corr_filter", + "contents": { + "mid": "mksmknt9yztdbb89", + "type": "data", + "title": "corr_filter", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593504655159", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "gs8bc6mkmmipp6w8c2nqda3u" + } + ], + "layout": { + "type": "panel", + "id": "default-1593504655159" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tfxxqh3bvpj9hzfw" + }, + "fid": "fvpnac5zr6hyqv74" + }, + { + "persist-mode": "auto", + "func": "brightics.function.extraction$correlation_filter99873", + "name": "brightics.function.extraction$correlation_filter", + "param": { + "method": "pearson", + "feature_cols": [ + "sepal_length", + "sepal_width", + "petal_length", + "petal_width" + ] + }, + "display": { + "label": "Correlation Filter", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593504668335", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "689bt9fq4tc2n88qvhb5f3kg" + } + ], + "layout": { + "type": "panel", + "id": "default-1593504668335" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593504668422", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "g2k5m3bdd3hbi3kdraqnnwq5" + } + ], + "layout": { + "type": "panel", + "id": "default-1593504668422" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tfxxqh3bvpj9hzfw" + }, + "outputs": { + "out_table": "tgeuhxr4mjxqvfxp" + }, + "fid": "fxtx758x84ax7bey" + } + ], + "links": [ + { + "kid": "kj9rhk9wc4jwybn7", + "sourceFid": "fvpnac5zr6hyqv74", + "targetFid": "fxtx758x84ax7bey" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T08:10:45.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T08:14:15.000Z", + "event_key": "2020_081415.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "corr_filter.JPG", + "label": "corr_filter.JPG", + "base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/4RECRXhpZgAATU0AKgAAAAgABAE7AAIAAAAdAAAISodpAAQAAAABAAAIaJydAAEAAAAaAAAQ4OocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOygleyYge2biC/rtoTshJ3tlIzrnqvtj7xMYWIAAAAFkAMAAgAAABQAABC2kAQAAgAAABQAABDKkpEAAgAAAAM1NgAAkpIAAgAAAAM1NgAA6hwABwAACAwAAAiqAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAyMDowNjozMCAxNzoxNDo1NwAyMDIwOjA2OjMwIDE3OjE0OjU3AAAAFcgBxsjWLwCEvR3BDNWrt/zTTABhAGIAAAD/4QsvaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIvPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj48eG1wOkNyZWF0ZURhdGU+MjAyMC0wNi0zMFQxNzoxNDo1Ny41NTU8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj48ZGM6Y3JlYXRvcj48cmRmOlNlcSB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6bGk+7KCV7JiB7ZuIL+u2hOyEne2UjOueq+2PvExhYjwvcmRmOmxpPjwvcmRmOlNlcT4NCgkJCTwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwRGBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQqHBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/wAARCAHGBX8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3eiiitSQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACipYLd5zxwvdjV+O1ii6Lk+pqW7BYzVjdvuox+gp32eX/nm35VrUUuYdjJ+zy/882/Kj7PL/wA82/KtaijmCxk/Z5f+ebflR9nl/wCebflWtRRzBYyfs8v/ADzb8qPs8v8Azzb8q1qKOYLGT9nl/wCebflR9nl/55t+Va1FHMFjJ+zy/wDPNvyo+zy/882/KtaijmCxk/Z5f+ebflR9nl/55t+Va1FHMFjJ+zy/882/Kj7PL/zzb8q1qKOYLGT9nl/55t+VH2eX/nm35VrUUcwWMn7PL/zzb8qPs8v/ADzb8q1qKOYLGT9nl/55t+VH2eX/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RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/2Q==", + "description": "In this tutorial workflow, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their correlations.", + "parameter": "1. **Feature Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n2. **Correlation Threshold**: 0.9\n3. **Method**: pearson\n4. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.extraction import correlation_filter\r\nres = correlation_filter(table = inputs[0], feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])\r\noutput = res['out_table']", + "description": "In this script, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their correlations.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/extraction/meta/ewma.json b/function/python/brightics/function/extraction/meta/ewma.json index ad8d66488..d5809dafc 100644 --- a/function/python/brightics/function/extraction/meta/ewma.json +++ b/function/python/brightics/function/extraction/meta/ewma.json @@ -83,11 +83,7 @@ "default": false } ], - "columnType": [], - "type": "Double", - "min": 0, - "max": 1, - "placeHolder": "0.5 (0.0<=value<=1.0)" + "columnType": [] }, { "id": "custom_ratio", diff --git a/function/python/brightics/function/extraction/meta/label_encoder.json b/function/python/brightics/function/extraction/meta/label_encoder.json index 0cfd712c3..92b22496a 100644 --- a/function/python/brightics/function/extraction/meta/label_encoder.json +++ b/function/python/brightics/function/extraction/meta/label_encoder.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "extraction", "func": "brightics.function.extraction$label_encoder", "name": "brightics.function.extraction$label_encoder", diff --git a/function/python/brightics/function/extraction/meta/label_encoder2.json b/function/python/brightics/function/extraction/meta/label_encoder2.json new file mode 100644 index 000000000..e2258849d --- /dev/null +++ b/function/python/brightics/function/extraction/meta/label_encoder2.json @@ -0,0 +1,883 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "extraction", + "func": "brightics.function.extraction$label_encoder2", + "name": "brightics.function.extraction$label_encoder2", + "context": "python", + "label": "Label Encoder", + "description": "Encode categorical data into integer labels with values between 0 and n_classes-1.\n\nReference\n- ", + "tags": [ + "indexer", + "encoder", + "preprocessing", + "add columns", + "add", + "column" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "model": "" + }, + "meta": { + "out_table": { + "type": "table", + "desc": "Encoded data." + }, + "model": { + "type": "model", + "desc": "Encoded data with configurations which can be used in 'Label Encoder Model' function." + }, + "table": { + "type": "table", + "desc": "Input data.", + "optional": false + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "Column to be encoded with integer labels.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Float", + "Double", + "Long", + "String" + ], + "multiple": true + }, + { + "id": "suffix", + "label": "Suffix", + "description": "Suffix for new column names. Default = _index", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "_index" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Group by column.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + } + ], + "summary": "Encode categorical data into integer labels." + }, + "md": { + "en": "# Label Encoder\nEncode categorical data into integer labels.\n\n## Description\nEncode categorical data into integer labels with values between 0 and n_classes-1.\n\nReference\n- \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input data.\n#### OUTPUT\n1. **out_table**: (Table) Encoded data.\n2. **model**: (Model) Encoded data with configurations which can be used in 'Label Encoder Model' function.\n#### PARAMETER\n1. **Input Columns***: Column to be encoded with integer labels.\n\n2. **Suffix**: Suffix for new column names. Default = _index\n\n3. **Group By**: Group by column.\n\n\n### Python\n#### USAGE\n\n```\nlabel_encoder2(table = , input_cols = , suffix = , group_by = )\n```\n\n#### INPUT\n1. **table***: (Table) Input data.\n#### OUTPUT\n1. **out_table**: (Table) Encoded data.\n2. **model**: (Model) Encoded data with configurations which can be used in 'Label Encoder Model' function.\n#### PARAMETER\n1. **input_cols***: Column to be encoded with integer labels.\n\t* Type: *list[str]*\n2. **suffix**: Suffix for new column names. Default = _index\n\t* Type: *str*\n3. **group_by**: Group by column.\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is loaded and the column named 'species' are encoded into integer values.\n\n++Parameters++\n1. **Input Columns***: species\n2. **Suffix**: _index\n3. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.extraction import label_encoder2\nres = label_encoder2(table=inputs[0], input_cols=['species'], suffix='_index')\ntable=res['out_table']\nmodel=res['model']\n```\nIn this tutorial workflow, sample_iris data is loaded and the column named 'species' are encoded into integer values.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "label_encoder (1).json", + "label": "label_encoder", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mtyw2vzgytw85upw", + "project_id": "p5dmzu78qb564crk", + "label": "label_encoder", + "contents": { + "mid": "mtyw2vzgytw85upw", + "type": "data", + "title": "label_encoder", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": {}, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585564313821", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ft8dbtc9g4heh3uuaqdi4muf" + } + ], + "layout": { + "type": "panel", + "id": "default-1585564313821" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tr3gez75nzuqn4he" + }, + "fid": "f67wkspdvhawf5ry" + }, + { + "persist-mode": "auto", + "func": "brightics.function.extraction$label_encoder2", + "name": "brightics.function.extraction$label_encoder2", + "param": { + "input_cols": [ + "species" + ] + }, + "display": { + "label": "Label Encoder", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593658604430", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "fpjwkkfz2bu4pbnyy6d9zmjs" + } + ], + "layout": { + "type": "panel", + "id": "default-1593658604430" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593658604514", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "7i7stmw89h9r4qmfqxczrvng" + } + ], + "layout": { + "type": "panel", + "id": "default-1593658604514" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "out_table": { + "type": "table", + "desc": "Encoded data." + }, + "model": { + "type": "model", + "desc": "Encoded data with configurations which can be used in 'Label Encoder Model' function." + }, + "table": { + "type": "table", + "desc": "Input data.", + "optional": false + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tr3gez75nzuqn4he" + }, + "outputs": { + "out_table": "t2dwhbtq5h64ga35", + "model": "t8r88a9jdfztgfd8" + }, + "fid": "ffep6yksssfhtsym" + } + ], + "links": [ + { + "kid": "kqmsh67sn3s6ftyd", + "sourceFid": "f67wkspdvhawf5ry", + "targetFid": "ffep6yksssfhtsym" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-02T02:56:33.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-02T03:00:40.000Z", + "event_key": "2020_030040.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "label_encoder.png", + "label": "label_encoder.png", + "base64": "data:image/png;base64,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AAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAUSXgJAAAAABRJeAkAAAAAFEl4CQAAAAAU6FL6/wFtu736P9fDawAAAABJRU5ErkJggg==", + "description": "In this tutorial workflow, sample_iris data is loaded and the column named 'species' are encoded into integer values.", + "parameter": "1. **Input Columns***: species\n2. **Suffix**: _index\n3. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.extraction import label_encoder2\r\nres = label_encoder2(table=inputs[0], input_cols=['species'], suffix='_index')\r\ntable=res['out_table']\r\nmodel=res['model']", + "description": "In this tutorial workflow, sample_iris data is loaded and the column named 'species' are encoded into integer values.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/extraction/meta/label_encoder_model.json b/function/python/brightics/function/extraction/meta/label_encoder_model.json index 3dcd9dfb1..2a52b7e90 100644 --- a/function/python/brightics/function/extraction/meta/label_encoder_model.json +++ b/function/python/brightics/function/extraction/meta/label_encoder_model.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "extraction", "func": "brightics.function.extraction$label_encoder_model", "name": "brightics.function.extraction$label_encoder_model", diff --git a/function/python/brightics/function/extraction/meta/label_encoder_model2.json b/function/python/brightics/function/extraction/meta/label_encoder_model2.json new file mode 100644 index 000000000..69f3911df --- /dev/null +++ b/function/python/brightics/function/extraction/meta/label_encoder_model2.json @@ -0,0 +1,1792 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "extraction", + "func": "brightics.function.extraction$label_encoder_model2", + "name": "brightics.function.extraction$label_encoder_model2", + "context": "python", + "label": "Label Encoder Model", + "description": "This function transforms the features using the result of Label Encoder.", + "tags": [ + "model", + "label", + "preprocessing" + ], + "version": "3.6", + "inputs": { + "table": "", + "model": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Input Data with label column.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Output table." + }, + "model": { + "type": "model", + "desc": "Label encoder Model from Label encoder function.", + "optional": false + } + }, + "params": [ + { + "id": "suffix", + "label": "Suffix", + "description": "Suffix for new column names. Default = _index", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "placeHolder": "_index", + "type": "String" + } + ], + "summary": "Result of the function 'Label Encoder'." + }, + "md": { + "en": "# Label Encoder Model\nResult of the function 'Label Encoder'.\n\n## Description\nThis function transforms the features using the result of Label Encoder.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input Data with label column.\n2. **model***: (Model) Label encoder Model from Label encoder function.\n#### OUTPUT\n1. **out_table**: (Table) Output table.\n#### PARAMETER\n1. **Suffix**: Suffix for new column names. Default = _index\n\n\n### Python\n#### USAGE\n\n```\nlabel_encoder_model2(table = inputs[0], model = models[0], suffix = '_index')\n```\n\n#### INPUT\n1. **table***: (Table) Input Data with label column.\n2. **model***: (Model) Label encoder Model from Label encoder function.\n#### OUTPUT\n1. **out_table**: (Table) Output table.\n#### PARAMETER\n1. **suffix**: Suffix for new column names. Default = _index\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data loaded and split into train data set and test data set. Then the 'species' column in the train data set is labeled with integer values. The trained result is finally applied to the test dataset to give integer label values corresponds to 'species' values.\n\n++Parameters++\n1. **Suffix**: _index\n\n\n### Python\n\n```\nfrom brightics.function.extraction.encoder import label_encoder_model2 as lemodel\ninput_table = inputs[2]\ninput_model = models[0]\nres = lemodel(table = input_table, model = input_model)\noutput = res['out_table']\n```\nIn this script, the result of the Label encoder function(models[0]) is applied to the input dataset(inputs[2]) to encode labels with integral values.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "lb_encoder_model.json", + "label": "label_encoder_model", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mmj37f2vex9qqjtw", + "project_id": "p5dmzu78qb564crk", + "label": "label_encoder_model", + "contents": { + "mid": "mmj37f2vex9qqjtw", + "type": "data", + "title": "label_encoder_model", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 320 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593567285532", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "66ugntke74ntgnbpqp5825ru" + } + ], + "layout": { + "type": "panel", + "id": "default-1593567285532" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "txkev9xkms5vqtqg" + }, + "fid": "f93cme6cj2ru6mrq" + }, + { + "persist-mode": "auto", + "func": "brightics.function.extraction$label_encoder2", + "name": "brightics.function.extraction$label_encoder2", + "param": { + "input_cols": [ + "species" + ] + }, + "display": { + "label": "Label Encoder", + "diagram": { + "position": { + "x": 770, + "y": 320 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593567310113", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "pwtvnya8k6t3de3dzjnmpztb" + } + ], + "layout": { + "type": "panel", + "id": "default-1593567310113" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593567310202", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "nd8hskwfagtfqsfsu4ftzdtc" + } + ], + "layout": { + "type": "panel", + "id": "default-1593567310202" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "out_table": { + "type": "table", + "desc": "Encoded data." + }, + "model": { + "type": "model", + "desc": "Encoded data with configurations which can be used in 'Label Encoder Model' function." + }, + "table": { + "type": "table", + "desc": "Input data.", + "optional": false + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "twhx58xt542f39hu" + }, + "outputs": { + "out_table": "t7q8738hs9t8j55z", + "model": "tdkzmncs76nzkrge" + }, + "fid": "fdya3mzcndz7cwgg" + }, + { + "persist-mode": "auto", + "func": "brightics.function.extraction$label_encoder_model2", + "name": "brightics.function.extraction$label_encoder_model2", + "param": {}, + "display": { + "label": "Label Encoder Model", + "diagram": { + "position": { + "x": 1020, + "y": 320 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593567456372", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "56j5ai8mjq6sstv384kiyxw2" + } + ], + "layout": { + "type": "panel", + "id": "default-1593567456372" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593567456455", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "4nvmiqjnk4bqfik9zcghrps2" + } + ], + "layout": { + "type": "panel", + "id": "default-1593567456455" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tgyjbxr9dsasmymu", + "model": "tdkzmncs76nzkrge" + }, + "outputs": { + "out_table": "t6945c7yab82dupw" + }, + "fid": "fcqez6nj2n8bdvs9" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$split_data", + "name": "brightics.function.transform$split_data", + "param": { + "train_ratio": "" + }, + "display": { + "label": "Split Data", + "diagram": { + "position": { + "x": 520, + "y": 320 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593567511504", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "jn72ymj7xehabina5bubzkpk" + } + ], + "layout": { + "type": "panel", + "id": "default-1593567511504" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593567511591", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "8qtcx9h5hdifx4mdexya2vac" + } + ], + "layout": { + "type": "panel", + "id": "default-1593567511591" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a table. ", + "optional": false + }, + "train_table": { + "type": "table", + "desc": "Training dataset in a table. " + }, + "test_table": { + "type": "table", + "desc": "Test dataset in a table. " + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "txkev9xkms5vqtqg" + }, + "outputs": { + "train_table": "twhx58xt542f39hu", + "test_table": "tgyjbxr9dsasmymu" + }, + "fid": "fjatub6e5tpbkvc6" + } + ], + "links": [ + { + "kid": "k7a98gdz9pqs58s4", + "sourceFid": "fdya3mzcndz7cwgg", + "targetFid": "fcqez6nj2n8bdvs9" + }, + { + "kid": "kj4qk3wkpvqm672s", + "sourceFid": "f93cme6cj2ru6mrq", + "targetFid": "fjatub6e5tpbkvc6" + }, + { + "kid": "kt778jjrbkn9gvu8", + "sourceFid": "fjatub6e5tpbkvc6", + "targetFid": "fdya3mzcndz7cwgg" + }, + { + "kid": "kk34zrrpfq8t2b64", + "sourceFid": "fjatub6e5tpbkvc6", + "targetFid": "fcqez6nj2n8bdvs9" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-01T01:34:34.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-01T01:39:14.000Z", + "event_key": "2020_013914.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "lb_encode.JPG", + "label": "lb_encode.JPG", + "base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/4RECRXhpZgAATU0AKgAAAAgABAE7AAIAAAAdAAAISodpAAQAAAABAAAIaJydAAEAAAAaAAAQ4OocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOygleyYge2biC/rtoTshJ3tlIzrnqvtj7xMYWIAAAAFkAMAAgAAABQAABC2kAQAAgAAABQAABDKkpEAAgAAAAM1NQAAkpIAAgAAAAM1NQAA6hwABwAACAwAAAiqAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAyMDowNzowMSAxMDozOTozOQAyMDIwOjA3OjAxIDEwOjM5OjM5AAAAFcgBxsjWLwCEvR3BDNWrt/zTTABhAGIAAAD/4QsvaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIvPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj48eG1wOkNyZWF0ZURhdGU+MjAyMC0wNy0wMVQxMDozOTozOS41NTM8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj48ZGM6Y3JlYXRvcj48cmRmOlNlcSB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6bGk+7KCV7JiB7ZuIL+u2hOyEne2UjOueq+2PvExhYjwvcmRmOmxpPjwvcmRmOlNlcT4NCgkJCTwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwRGBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQqHBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/wAARCAG4BpYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3eiiitSQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKciNIwVBkmgBtSJbyyfdQ49TxV6C0SLlvmb19KsVHMOxniwk7so/Gl/s+T++tX6KV2Fih/Z8n99aP7Pk/vrV+ii7CxQ/s+T++tH9nyf31q/RRdhYof2fJ/fWj+z5P761foouwsUP7Pk/vrR/Z8n99av0UXYWKH9nyf31o/s+T++tX6KLsLFD+z5P760f2fJ/fWr9FF2Fih/Z8n99aP7Pk/vrV+ii7CxQ/s+T++tH9nyf31q/RRdhYof2fJ/fWj+z5P761foouwsUP7Pk/vrR/Z8n99av0UXYWKH9nyf31o/s+T++tX6KLsLFD+z5P760f2fJ/fWr9FF2Fih/Z8n99aT+z5P7y1oUUXYWMxrOZewb6GoSCpwwIPoa2aZJEkq4cZ9/SnzBYyKKmuLZoDnqp6GoaoQUUUUwCiiigAooooAKKKKACiiigAooooAKKfFE0z7UH1PpWjDbJCOm5vU0m7AUUtZn6Jgep4qQafJ3Za0KKnmY7FD+z5P760f2fJ/fWr9FK7CxQ/s+T++tH9nyf31q/RRdhYof2fJ/fWj+z5P761foouwsUP7Pk/vrR/Z8n99av0UXYWKH9nyf31o/s+T++tX6KLsLFD+z5P760f2fJ/fWr9FF2Fih/Z8n99aP7Pk/vr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igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9k=", + "description": "In this tutorial workflow, sample_iris data loaded and split into train data set and test data set. Then the 'species' column in the train data set is labeled with integer values. The trained result is finally applied to the test dataset to give integer label values corresponds to 'species' values.", + "parameter": "1. **Suffix**: _index", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.extraction.encoder import label_encoder_model2 as lemodel\r\ninput_table = inputs[2]\r\ninput_model = models[0]\r\nres = lemodel(table = input_table, model = input_model)\r\noutput = res['out_table']", + "description": "In this script, the result of the Label encoder function(models[0]) is applied to the input dataset(inputs[2]) to encode labels with integral values.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/extraction/meta/lda.json b/function/python/brightics/function/extraction/meta/lda.json index ee2ecc7e3..6e284cb91 100644 --- a/function/python/brightics/function/extraction/meta/lda.json +++ b/function/python/brightics/function/extraction/meta/lda.json @@ -226,7 +226,7 @@ { "id": "group_by", "label": "Group By", - "description": "", + "description": "Columns to group by.", "visibleOption": [], "control": "ColumnSelector", "validation": [], @@ -238,7 +238,7 @@ ], "summary": "Linear Discriminant Analysis for finding a linear combination of features that separates two or more classes. " }, - "md": "# LDA\nLinear Discriminant Analysis for finding a linear combination of features that separates two or more classes. \n\n## Description\nLinear Discriminant Analysis (LDA), Normal Discriminant Analysis (NDA), or Discriminant Function Analysis is generalization of Fisher's linear discriminant, a method used in statistics and machine learning to find a linear combination of features that characterizes or separates two or more classes of objects or events. The resulting combination may be used as a linear classifier, or for dimensionality reduction before classification.\n\nReference:\n+ \n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table to be analyzed. \n#### OUTPUT\n1. **out_table**: (Table) \n2. **model**: (Model) \n#### PARAMETER\n1. **Feature Columns***: Feature columns.\n\n2. **Label Column***: Label column\n\n3. **Solver**: Solver to use\n\n4. **Store Covariance**: Option for storing covariance. \n\n5. **Tolerance**: Threshold of the convergence during the learning \n\n6. **Number of components**: Number of components (< n_classes - 1) for dimensionality reduction\n\n7. **Shrinkage**: Shrinkage works only with eigen solver.\n\n8. **Shrinkage value**: Value for float Shrinkage\n\n9. **New Column Name**: Name of new column(s)\n\n10. **Group By**: \n\n\n### Python\n#### USAGE\n\n```\nfrom brightics.function.extraction import lda\nres = lda(table = , feature_cols = , label_col = , solver = , store_covariance = , tol = , n_components = , shrinkage = , shrinkage_value = , new_column_name = , group_by = )\nres['out_table'], res['model']\n```\n\n#### INPUT\n1. **table***: (Table) Input table to be analyzed. \n#### OUTPUT\n1. **out_table**: (Table) \n2. **model**: (Model) \n#### PARAMETER\n1. **feature_cols***: Feature columns.\n\t* Type: *list[str]*\n2. **label_col***: Label column\n\t* Type: *str*\n3. **solver**: Solver to use\n\t* Type: *str*\n\t* Default / Range: svd ( svd | eigen )\n4. **store_covariance**: Option for storing covariance. \n\t* Type: *str*\n\t* Default / Range: ( TrueFalse | False )\n5. **tol**: Threshold of the convergence during the learning \n\t* Type: *double*\n\t* Default / Range: 0.0001 (value >= 0)\n6. **n_components**: Number of components (< n_classes - 1) for dimensionality reduction\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n7. **shrinkage**: Shrinkage works only with eigen solver.\n\t* Type: *str*\n\t* Default / Range: None ( None | auto | float )\n8. **shrinkage_value**: Value for float Shrinkage\n\t* Type: *double*\n\t* Default / Range: (1 >= value >= 0)\n9. **new_column_name**: Name of new column(s)\n\t* Type: *str*\n10. **group_by**: \n\t* Type: *list[str]*\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n
This model is a simple example of LDA function. The model trained from the LDA is used for LDA Model function for the prediction of the class of the new data. \n\n++Parameters++\n1. **Feature Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n2. **Label Column***: species\n\n\n### Python\n\n```\nfrom brightics.function.extraction import lda\nres = lda(table = inputs[0] , feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n\t\t , label_col = 'species' )\nout_table = res['out_table']\nout_model = res['model']\n```\n\nThis script yields the same result of the VA sample model, if the LDA function is altered by Python Script function with the script. \n\n\n\n", + "md": "# LDA\nLinear Discriminant Analysis for finding a linear combination of features that separates two or more classes. \n\n## Description\nLinear Discriminant Analysis (LDA), Normal Discriminant Analysis (NDA), or Discriminant Function Analysis is generalization of Fisher's linear discriminant, a method used in statistics and machine learning to find a linear combination of features that characterizes or separates two or more classes of objects or events. The resulting combination may be used as a linear classifier, or for dimensionality reduction before classification.\n\nReference:\n+ \n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table to be analyzed. \n#### OUTPUT\n1. **out_table**: (Table) \n2. **model**: (Model) \n#### PARAMETER\n1. **Feature Columns***: Feature columns.\n\n2. **Label Column***: Label column\n\n3. **Solver**: Solver to use\n\n4. **Store Covariance**: Option for storing covariance. \n\n5. **Tolerance**: Threshold of the convergence during the learning \n\n6. **Number of components**: Number of components (< n_classes - 1) for dimensionality reduction\n\n7. **Shrinkage**: Shrinkage works only with eigen solver.\n\n8. **Shrinkage value**: Value for float Shrinkage\n\n9. **New Column Name**: Name of new column(s)\n\n10. **Group By**: Columns to group by. \n\n\n### Python\n#### USAGE\n\n```\nfrom brightics.function.extraction import lda\nres = lda(table = , feature_cols = , label_col = , solver = , store_covariance = , tol = , n_components = , shrinkage = , shrinkage_value = , new_column_name = , group_by = )\nres['out_table'], res['model']\n```\n\n#### INPUT\n1. **table***: (Table) Input table to be analyzed. \n#### OUTPUT\n1. **out_table**: (Table) \n2. **model**: (Model) \n#### PARAMETER\n1. **feature_cols***: Feature columns.\n\t* Type: *list[str]*\n2. **label_col***: Label column\n\t* Type: *str*\n3. **solver**: Solver to use\n\t* Type: *str*\n\t* Default / Range: svd ( svd | eigen )\n4. **store_covariance**: Option for storing covariance. \n\t* Type: *str*\n\t* Default / Range: ( TrueFalse | False )\n5. **tol**: Threshold of the convergence during the learning \n\t* Type: *double*\n\t* Default / Range: 0.0001 (value >= 0)\n6. **n_components**: Number of components (< n_classes - 1) for dimensionality reduction\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n7. **shrinkage**: Shrinkage works only with eigen solver.\n\t* Type: *str*\n\t* Default / Range: None ( None | auto | float )\n8. **shrinkage_value**: Value for float Shrinkage\n\t* Type: *double*\n\t* Default / Range: (1 >= value >= 0)\n9. **new_column_name**: Name of new column(s)\n\t* Type: *str*\n10. **group_by**: Columns to group by. \n\t* Type: *list[str]*\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n
This model is a simple example of LDA function. The model trained from the LDA is used for LDA Model function for the prediction of the class of the new data. \n\n++Parameters++\n1. **Feature Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n2. **Label Column***: species\n\n\n### Python\n\n```\nfrom brightics.function.extraction import lda\nres = lda(table = inputs[0] , feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n\t\t , label_col = 'species' )\nout_table = res['out_table']\nout_model = res['model']\n```\n\nThis script yields the same result of the VA sample model, if the LDA function is altered by Python Script function with the script. \n\n\n\n", "exampleModels": [ { "fileName": "lda.json", diff --git a/function/python/brightics/function/extraction/meta/one_hot_encoder.json b/function/python/brightics/function/extraction/meta/one_hot_encoder.json index 4915f016d..cd2c4f3fa 100644 --- a/function/python/brightics/function/extraction/meta/one_hot_encoder.json +++ b/function/python/brightics/function/extraction/meta/one_hot_encoder.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "extraction", "func": "brightics.function.extraction$one_hot_encodercoder", "name": "brightics.function.extraction$one_hot_encoder", diff --git a/function/python/brightics/function/extraction/meta/one_hot_encoder2.json b/function/python/brightics/function/extraction/meta/one_hot_encoder2.json new file mode 100644 index 000000000..b201d5f47 --- /dev/null +++ b/function/python/brightics/function/extraction/meta/one_hot_encoder2.json @@ -0,0 +1,916 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "extraction", + "func": "brightics.function.extraction$one_hot_encoder2", + "name": "brightics.function.extraction$one_hot_encoder2", + "context": "python", + "label": "One Hot Encoder", + "description": "In machine learning, one-hot is a group of bits among which the legal combinations of values are only those with a single high (1) bit and all the others low (0). A similar implementation in which all bits are '1' except one '0' is sometimes called one-cold. In statistics, dummy variables represent a similar technique for representing categorical data.", + "tags": [ + "one", + "hot", + "encoder", + "preprocessing", + "add columns", + "add", + "column" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data table with at least one categorical column.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Data table with one-hot encoded columns appended." + }, + "model": { + "type": "model", + "desc": "Result one hot encoder model. This model is used as an input of One Hot Encoder Model function." + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "Columns to select as an input. Available are Integer, Long, Float, Double, and String type columns.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "String" + ], + "type": "String", + "multiple": true + }, + { + "id": "prefix", + "label": "Prefix Type", + "description": "Prefix type for newly added columns.\n - Available Options: `Use existing column name(s)`, `Enter new column name(s)`", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Use existing column name(s)", + "value": "col_name", + "default": true + }, + { + "label": "Enter new column name(s)", + "value": "list", + "default": false + } + ], + "columnType": [] + }, + { + "id": "prefix_list", + "label": "Prefix(es)", + "description": "List of prefix name(s). The length of this list should be equal to the length of input columns.", + "visibleOption": [ + { + "id": "prefix", + "value": "list" + } + ], + "control": "ArrayInput", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String" + }, + { + "id": "suffix", + "label": "Suffix Type", + "description": "Suffix type for newly added columns. Available are index, which yields integer indices starting with 0, and label, which yields label suffix same as the category values.\n - Available Options: `Index`, `Label`", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Index", + "value": "index", + "default": true + }, + { + "label": "Label", + "value": "label", + "default": false + } + ], + "columnType": [] + }, + { + "id": "drop_last", + "label": "Drop Last", + "description": "Whether to drop the last column.\n - Available Option: `True`, `False`", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": false + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + } + ], + "summary": "This function encodes categorical integer features using a one-hot, also known as one-of-K, scheme." + }, + "md": "# One Hot Encoder\nThis function encodes categorical integer features using a one-hot, also known as one-of-K, scheme.\n\n## Description\nIn machine learning, one-hot is a group of bits among which the legal combinations of values are only those with a single high (1) bit and all the others low (0). A similar implementation in which all bits are '1' except one '0' is sometimes called one-cold. In statistics, dummy variables represent a similar technique for representing categorical data.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data table with at least one categorical column.\n#### OUTPUT\n1. **out_table**: (Table) Data table with one-hot encoded columns appended.\n2. **model**: (Model) Result one hot encoder model. This model is used as an input of One Hot Encoder Model function.\n#### PARAMETER\n1. **Input Columns***: Columns to select as an input. Available are Integer, Long, Float, Double, and String type columns.\n\n2. **Prefix Type**: Prefix type for newly added columns.\n - Available Options: `Use existing column name(s)`, `Enter new column name(s)`\n\n3. **Prefix(es)**: List of prefix name(s). The length of this list should be equal to the length of input columns. This option is available when Prefix Type is set to `Enter new column name(s)`.\n\n4. **Suffix Type**: Suffix type for newly added columns. Available are index, which yields integer indices starting with 0, and label, which yields label suffix same as the category values.\n - Available Options: `Index`, `Label`\n\n5. **Drop Last**: Whether to drop the last column.\n - Available Option: `True`, `False`\n\n\t* Default value: false \n6. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\none_hot_encoder2(table, input_cols, prefix='col_name', prefix_list=None, suffix='index', n_values='auto', categorical_features='all', handle_unknown='error', drop_last=False, group_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data table with at least one categorical column.\n#### OUTPUT\n1. **out_table**: (Table) Data table with one-hot encoded columns appended.\n2. **model**: (Model) Result one hot encoder model. This model is used as an input of One Hot Encoder Model function.\n#### PARAMETER\n1. **input_cols***: Columns to select as an input. Available are Integer, Long, Float, Double, and String type columns.\n\t* Type: *list[str]*\n2. **prefix**: Prefix type for newly added columns.\n\t* Type: *str*\n\t* Default / Range: col_name ( col_name | list )\n3. **prefix_list**: List of prefix name(s). The length of this list should be equal to the length of input columns.\n\t* Type: *list[str]*\n4. **suffix**: Suffix type for newly added columns. Available are index, which yields integer indices starting with 0, and label, which yields label suffix same as the category values.\n\t* Type: *str*\n\t* Default / Range: index ( index | label )\n5. **n_values**: Number of values per feature.\n\t* Type: *int, list[int]*\n\t* Default / Range: auto (1 <= value)\n6. **catorical_features**: Specify what features are treated as categorical.\n\t* Type: *list[int], list[bool]*\n\t* Default / Range: all\n7. **handle_unknown**: Whether to raise an error or ignore if an unknown categorical feature is present during transform.\n\t* Type: *str*\n\t* Default / Range: error ( error | ignoew )\n8. **drop_last**: Whether to drop the last column.\n\t* Type: *bool*\n\t* Default value: false \n9. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to apply one hot eoncoder. The data table with one-hot encoded vectors appended as columns is returned as the output table. The generated model is afterward applied to another data set via One Hot Encoder Model function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Columns***: species\n2. **Prefix Type**: Use existing column name(s)\n3. **Prefix(es)**: None\n4. **Suffix Type**: Index\n5. **Drop Last**: False\n6. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.extraction import one_hot_encoder2\nres = one_hot_encoder2(table=inputs[0],\n input_cols=['species'],\n prefix='col_name',\n prefix_list=None,\n suffix='index',\n n_values='auto',\n categorical_features='all',\n handle_unknown='error',\n drop_last=False,\n group_by=None)\ndf, model = res['out_table'], res['model']\n```\nIn this python script, sample_iris data is used to apply one hot encoder. The data table with one-hot encoded vectors appended as columns is returned as the output table. The generated model is afterward applied to another data set via One Hot Encoder Model function. The parameter settings used in the function are shown below.\n", + "exampleModels": [ + { + "fileName": "One Hot Encoder.json", + "label": "One Hot Encoder", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m5wyhy2jmp7te5nx", + "project_id": "pdffxq5prp7xkph3", + "label": "One Hot Encoder", + "contents": { + "mid": "m5wyhy2jmp7te5nx", + "type": "data", + "title": "One Hot Encoder", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585546405897", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "tw3mc4r9jc7ycnndeqkpad3w" + } + ], + "layout": { + "type": "panel", + "id": "default-1585546405897" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "t557w7fnnsa2xqm5" + }, + "fid": "f2bnxureubt9qr5p" + }, + { + "persist-mode": "auto", + "func": "brightics.function.extraction$one_hot_encoder2", + "name": "brightics.function.extraction$one_hot_encoder2", + "param": { + "prefix": "col_name", + "suffix": "index", + "drop_last": false, + "input_cols": [ + "species" + ] + }, + "display": { + "label": "One Hot Encoder", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1585546441377", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "j2bc8bxjcw5id96qwgkcdki7" + } + ], + "layout": { + "type": "panel", + "id": "default-1585546441377" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585546441709", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t557w7fnnsa2xqm5" + }, + "outputs": { + "out_table": "tdbfpybha56nqk3x", + "model": "taxdx444pmmqqha5" + }, + "fid": "fd3vmubdesnhcptb" + } + ], + "links": [ + { + "kid": "ky632fv3tzygt26b", + "sourceFid": "f2bnxureubt9qr5p", + "targetFid": "fd3vmubdesnhcptb" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-03-30T05:32:27.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-03-30T05:34:12.000Z", + "event_key": "2020_053412.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "one hot encoder.png", + "label": "one hot encoder.png", + "base64": "data:image/png;base64,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" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/extraction/meta/one_hot_encoder_model.json b/function/python/brightics/function/extraction/meta/one_hot_encoder_model.json index aec38291e..33b0641be 100644 --- a/function/python/brightics/function/extraction/meta/one_hot_encoder_model.json +++ b/function/python/brightics/function/extraction/meta/one_hot_encoder_model.json @@ -302,8 +302,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.extraction$one_hot_encodercoder", - "name": "brightics.function.extraction$one_hot_encoder", + "func": "brightics.function.extraction$one_hot_encoder2", + "name": "brightics.function.extraction$one_hot_encoder2", "param": { "prefix": "col_name", "suffix": "index", diff --git a/function/python/brightics/function/extraction/meta/pca.json b/function/python/brightics/function/extraction/meta/pca.json index 6b278d6b0..ec0313a75 100644 --- a/function/python/brightics/function/extraction/meta/pca.json +++ b/function/python/brightics/function/extraction/meta/pca.json @@ -174,7 +174,7 @@ { "id": "group_by", "label": "Group By", - "description": "", + "description": "Columns to group by.", "visibleOption": [], "control": "ColumnSelector", "validation": [], @@ -186,7 +186,7 @@ ], "summary": "Principal component analysis." }, - "md": "# PCA\nPrincipal component analysis.\n\n## Description\nPrincipal component analysis. Linear dimensionality reduction using Singular Value Decomposition of the high dimensional data to project it to a lower dimensional space.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table that contains at least one numeric column for PCA\n#### OUTPUT\n1. **out_table**: (Table) Result table with PCA result columns added.\n2. **model**: (Model) PCA model trained from input table and its summary. \n#### PARAMETER\n1. **Input Columns***: A set of numeric columns for PCA\n\n2. **Number of Components**: Number of components or dimensions for the PCA result. It should be less than or equal to the number of input columns since PCA project the original data to lower dimension. \n\n3. **SVD Solver**: Singular Value Decomposition method to apply. \n\n4. **Tolerance**: Tolerance for singular values computed by 'SVD Solver' == 'ARPACK'.\n\n5. **Number of Iterations**: Number of iterations for the power method computed by 'SVD Solver' == 'Randomized'.\n\n6. **Seed**: The seed used by the random number generator.\n\n7. **New Column Name**: The prefix for the name of new column(s). \n\n8. **Group By**: \n\n\n\n### Python\n#### USAGE\n\n```\nfrom brightics.function.extraction import pca\nres = pca(table = , input_cols = , n_components = , svd_solver = , tol = , iterated_power = , seed = , new_column_name = , group_by = )\nres['out_table'], res['model']\n```\n\n#### INPUT\n1. **table***: (Table) Input table that contains at least one numeric column for PCA\n#### OUTPUT\n1. **out_table**: (Table) \n2. **model**: (Model) The result table with PCA result columns added.\n#### PARAMETER\n1. **input_cols***: A set of numeric columns for PCA\n\t* Type: *list[str]*\n2. **n_components**: Number of components or dimensions for the PCA result. It should be less than or equal to the number of input columns since PCA project the original data to lower dimension. \n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n3. **svd_solver**: Singular Value Decomposition method to apply. \n\t* Type: *str*\n\t* Default / Range: auto ( auto | full | arpack | randomized )\n4. **tol**: Tolerance for singular values computed by 'SVD Solver' == 'ARPACK'.\n\t* Type: *double*\n\t* Default / Range: 0.0 (value >= 0)\n5. **iterated_power**: Number of iterations for the power method computed by 'SVD Solver' == 'Randomized'.\n\t* Type: *int*\n\t* Default / Range: 'auto' (value >= 0)\n6. **seed**: The seed used by the random number generator.\n\t* Type: *int*\n\n7. **new_column_name**: The prefix for the name of new column(s). \n\t* Type: *str*\n8. **group_by**: \n\t* Type: *list[str]*\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nThis example shows a simple application of PCA function. \n\n++Parameters++\n1. **Input Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'] \n2. **Number of Components**: 3\n3. **SVD Solver**: auto\n\n### Python\n\n```\nfrom brightics.function.extraction import pca\nres = pca(table = inputs[0] ,input_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'] \n ,n_components = 3 ,svd_solver = 'auto')\nout_table = res['out_table']\nout_model = res['model']\n```\nThis script yields the same result of the VA sample model, if the PCA function is altered by Python Script function with the script. \n\n", + "md": "# PCA\nPrincipal component analysis.\n\n## Description\nPrincipal component analysis. Linear dimensionality reduction using Singular Value Decomposition of the high dimensional data to project it to a lower dimensional space.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input table that contains at least one numeric column for PCA\n#### OUTPUT\n1. **out_table**: (Table) Result table with PCA result columns added.\n2. **model**: (Model) PCA model trained from input table and its summary. \n#### PARAMETER\n1. **Input Columns***: A set of numeric columns for PCA\n\n2. **Number of Components**: Number of components or dimensions for the PCA result. It should be less than or equal to the number of input columns since PCA project the original data to lower dimension. \n\n3. **SVD Solver**: Singular Value Decomposition method to apply. \n\n4. **Tolerance**: Tolerance for singular values computed by 'SVD Solver' == 'ARPACK'.\n\n5. **Number of Iterations**: Number of iterations for the power method computed by 'SVD Solver' == 'Randomized'.\n\n6. **Seed**: The seed used by the random number generator.\n\n7. **New Column Name**: The prefix for the name of new column(s). \n\n8. **Group By**: Columns to group by.\n\n\n\n### Python\n#### USAGE\n\n```\nfrom brightics.function.extraction import pca\nres = pca(table = , input_cols = , n_components = , svd_solver = , tol = , iterated_power = , seed = , new_column_name = , group_by = )\nres['out_table'], res['model']\n```\n\n#### INPUT\n1. **table***: (Table) Input table that contains at least one numeric column for PCA\n#### OUTPUT\n1. **out_table**: (Table) \n2. **model**: (Model) The result table with PCA result columns added.\n#### PARAMETER\n1. **input_cols***: A set of numeric columns for PCA\n\t* Type: *list[str]*\n2. **n_components**: Number of components or dimensions for the PCA result. It should be less than or equal to the number of input columns since PCA project the original data to lower dimension. \n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n3. **svd_solver**: Singular Value Decomposition method to apply. \n\t* Type: *str*\n\t* Default / Range: auto ( auto | full | arpack | randomized )\n4. **tol**: Tolerance for singular values computed by 'SVD Solver' == 'ARPACK'.\n\t* Type: *double*\n\t* Default / Range: 0.0 (value >= 0)\n5. **iterated_power**: Number of iterations for the power method computed by 'SVD Solver' == 'Randomized'.\n\t* Type: *int*\n\t* Default / Range: 'auto' (value >= 0)\n6. **seed**: The seed used by the random number generator.\n\t* Type: *int*\n\n7. **new_column_name**: The prefix for the name of new column(s). \n\t* Type: *str*\n8. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nThis example shows a simple application of PCA function. \n\n++Parameters++\n1. **Input Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'] \n2. **Number of Components**: 3\n3. **SVD Solver**: auto\n\n### Python\n\n```\nfrom brightics.function.extraction import pca\nres = pca(table = inputs[0] ,input_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'] \n ,n_components = 3 ,svd_solver = 'auto')\nout_table = res['out_table']\nout_model = res['model']\n```\nThis script yields the same result of the VA sample model, if the PCA function is altered by Python Script function with the script. \n\n", "exampleModels": [ { "fileName": "pca.json", diff --git a/function/python/brightics/function/extraction/meta/polynomial_expansion.json b/function/python/brightics/function/extraction/meta/polynomial_expansion.json index 59f52fff7..f7e8e19f4 100644 --- a/function/python/brightics/function/extraction/meta/polynomial_expansion.json +++ b/function/python/brightics/function/extraction/meta/polynomial_expansion.json @@ -51,25 +51,6 @@ ], "multiple": true, "rowCount": 5 - }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "The name of the columns to be kept in output table.", - "visibleOption": [], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "columnType": [ - "Integer", - "Long", - "Float", - "Double", - "String" - ], - "multiple": true, - "rowCount": 5 } ], "summary": "This function performs polynomial expansion of degree 2 in a polynomial space. For instance, if one wants to expand two values x and y with degree 2, then (x, y, x * x, x * y, y * y) will be returned. The number of variables may be larger than 2.", diff --git a/function/python/brightics/function/extraction/meta/scale.json b/function/python/brightics/function/extraction/meta/scale.json index 9e9cb4b69..086660df5 100644 --- a/function/python/brightics/function/extraction/meta/scale.json +++ b/function/python/brightics/function/extraction/meta/scale.json @@ -103,7 +103,7 @@ "items": [], "columnType": [], "type": "String", - "placeHolder": "_min_max" + "placeHolder": "Enter suffix for the new column" }, { "id": "group_by", diff --git a/function/python/brightics/function/extraction/meta/string_split.json b/function/python/brightics/function/extraction/meta/string_split.json index dc30ed234..307ff05e8 100644 --- a/function/python/brightics/function/extraction/meta/string_split.json +++ b/function/python/brightics/function/extraction/meta/string_split.json @@ -44,25 +44,6 @@ ], "multiple": false }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "The name of the columns to be kept in output table.", - "visibleOption": [], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "columnType": [ - "Integer", - "Long", - "Float", - "Double", - "String" - ], - "multiple": true, - "rowCount": 5 - }, { "id": "delimiter", "label": "Delimiter", diff --git a/function/python/brightics/function/extraction/meta/variance_filter.json b/function/python/brightics/function/extraction/meta/variance_filter.json new file mode 100644 index 000000000..3cbef3bb6 --- /dev/null +++ b/function/python/brightics/function/extraction/meta/variance_filter.json @@ -0,0 +1,863 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "extraction", + "func": "brightics.function.extraction$variance_filter57430", + "name": "brightics.function.extraction$variance_filter", + "context": "python", + "label": "Variance Filter", + "description": "Feature selector that removes all features having variance lower than threshold.", + "tags": [ + "variance", + "extraction" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Input data.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Output table." + } + }, + "params": [ + { + "id": "feature_cols", + "label": "Feature Columns", + "description": " Columns to select as features", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "Integer", + "Long", + "Float", + "Double" + ], + "type": "Integer", + "multiple": true, + "rowCount": 5 + }, + { + "id": "threshold", + "label": "Variance Threshold", + "description": "Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all samples.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "max": 1, + "placeHolder": "0.0 (0.0 <= value <= 1.0)" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "multiple": true + } + ] + }, + "md": { + "en": "# Variance Filter\n\n\n## Description\nFeature selector that removes all features having variance lower than threshold.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input data.\n#### OUTPUT\n1. **out_table**: (Table) Output table.\n#### PARAMETER\n1. **Feature Columns***: Columns to select as features\n\n2. **Variance Threshold**: Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all samples.\n\n3. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nvariance_filter(table = inputs[0], feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'], \n threshold = 0.0, group_by = None)\n```\n\n#### INPUT\n1. **table***: (Table) Input data.\n#### OUTPUT\n1. **out_table**: (Table) Output table.\n#### PARAMETER\n1. **feature_cols***: Columns to select as features\n\t* Type: *list[str]*\n2. **threshold**: Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all samples.\n\t* Type: *double*\n\t* Default / Range: 0.0 (0.0 <= value <= 1.0)\n3. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their variance values.\n\n\n++Parameters++\n1. **Feature Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n2. **Variance Threshold**: 0.5\n3. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.extraction import variance_filter\nres = variance_filter(table = inputs[0] ,feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'], threshold = 0.5, group_by = None)\noutput = res['out_table']\n```\nIn this script, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their variance values.\n\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "var_filter.json", + "label": "variance_filter", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mgqh2q4mkjbnt8fm", + "project_id": "p5dmzu78qb564crk", + "label": "variance_filter", + "contents": { + "mid": "mgqh2q4mkjbnt8fm", + "type": "data", + "title": "variance_filter", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 520, + "y": 320 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593566035116", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "7etr5ftrsp5udcphc3ir56ch" + } + ], + "layout": { + "type": "panel", + "id": "default-1593566035116" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "th3ytqmsd4m4mza9" + }, + "fid": "fgtks79d9jqx565s" + }, + { + "persist-mode": "auto", + "func": "brightics.function.extraction$variance_filter57430", + "name": "brightics.function.extraction$variance_filter", + "param": { + "feature_cols": [ + "sepal_length", + "sepal_width", + "petal_length", + "petal_width" + ], + "threshold": 0.5 + }, + "display": { + "label": "Variance Filter", + "diagram": { + "position": { + "x": 770, + "y": 320 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593566053366", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "284h3n5fptchsvs8t5bt48c7" + } + ], + "layout": { + "type": "panel", + "id": "default-1593566053366" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593566053454", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "th3ytqmsd4m4mza9" + }, + "outputs": { + "out_table": "t7wz4c58mpbhjq5k" + }, + "fid": "fje3pmqc6gj4nada" + } + ], + "links": [ + { + "kid": "kegsnkajtvbhccqr", + "sourceFid": "fgtks79d9jqx565s", + "targetFid": "fje3pmqc6gj4nada" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-01T01:13:45.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-01T01:14:20.000Z", + "event_key": "2020_011420.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "var_filter.JPG", + "label": "var_filter.JPG", + "base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/4RECRXhpZgAATU0AKgAAAAgABAE7AAIAAAAdAAAISodpAAQAAAABAAAIaJydAAEAAAAaAAAQ4OocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOygleyYge2biC/rtoTshJ3tlIzrnqvtj7xMYWIAAAAFkAMAAgAAABQAABC2kAQAAgAAABQAABDKkpEAAgAAAAMwMQAAkpIAAgAAAAMwMQAA6hwABwAACAwAAAiqAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAyMDowNzowMSAxMDoxNTowMQAyMDIwOjA3OjAxIDEwOjE1OjAxAAAAFcgBxsjWLwCEvR3BDNWrt/zTTABhAGIAAAD/4QsvaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIvPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj48eG1wOkNyZWF0ZURhdGU+MjAyMC0wNy0wMVQxMDoxNTowMS4wMDk8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj48ZGM6Y3JlYXRvcj48cmRmOlNlcSB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6bGk+7KCV7JiB7ZuIL+u2hOyEne2UjOueq+2PvExhYjwvcmRmOmxpPjwvcmRmOlNlcT4NCgkJCTwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94OnhtcG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwRGBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQqHBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/wAARCAG7BKsDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3eiiitSQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKACTgDJqVbWZukZ/HikBFRU/wBim/uj86PsU390fnRdAQUVP9im/uj86PsU390fnRdAQUVP9im/uj86PsU390fnRdAQUVP9im/uj86PsU390fnRdAQUVP8AYpv7o/Oj7FN/dH50XQEFFT/Ypv7o/Oj7FN/dH50XQEFFT/Ypv7o/Oj7FN/dH50XQEFFT/Ypv7o/Oj7FN/dH50XQEFFT/AGKb+6Pzo+xTf3R+dF0BBRU/2Kb+6Pzo+xTf3R+dF0BBRU/2Kb+6Pzo+xTf3R+dF0BBRU/2Kb+6Pzo+xTf3R+dF0BBRU/wBim/uj86PsU390fnRdAQUVP9im/uj86Q2ky/wZ+hzRdAQ0UpBU4YEH0NJTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiilALHCgk+goASiphaTN/Bj6nFL9im/uj86V0BBRU/wBim/uj86PsU390fnRdAQUVP9im/uj86PsU390fnRdAQUVP9im/uj86PsU390fnRdAQUVP9im/uj86PsU390fnRdAQUVP8AYpv7o/Oj7FN/dH50XQEFFT/Ypv7o/Oj7FN/dH50XQEFFT/Ypv7o/Oj7FN/dH50XQEFFT/Ypv7o/Oj7FN/dH50XQEFFT/AGKb+6Pzo+xTf3R+dF0BBRU/2Kb+6Pzo+xTf3R+dF0BBRU/2Kb+6Pzo+xTf3R+dF0BBRU/2Kb+6Pzo+xTf3R+dF0BBRU/wBim/uj86PsU390fnRdAQUVK1rMvWM/hzURBBwRg0AFFFFMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKsW9o03zN8qfzpLWDzpMt9xevvWn06VLY0MjiSIYRQPen0UVAwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAGuiyLh1BHvVG4sygLRcr3HcVoUU07AYtFWry32N5iD5T1Hoaq1e5IUUUUwCiiigAooooAKKKKACiiigAooq1Z2+9vMcfKOg9TSALezLgNLwvYdzV5EWNcIoA9qdRUN3KCiiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFMkiSUYdQfen0UAZtxaND8y/Mn8qr1tdetZl1B5MmV+43T2q0xEFFFFUIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoop8Q3TIPVhSA07ePyoVXvjJ+tSUUVmUFFFFAGD4h8W2/hy4hiuNO1G7Mylg1nAJAuDjByRzWP/AMLQsf8AoA6//wCAa/8Axddq7rGu52CqO5OBWF4o1m903RTd6IttdTROGlid+THzu24PXp+tbQ5XZcv4mM+ZXfN+Bj/8LQsf+gDr/wD4Br/8XW34a8VWfimG5eyt7q3NtII5EukCsDjPQE1N4d8RWPibS0vdPkz2kjJ+aNu4NYHgT/kO+Lf+wq/9aqUY8svds0TGUuaOt0ztKKK5+3166m8fXehtHCLaG0WdXCneWJXgnOMc+lYJXOg6Cioby8t9PtJLq9mSCCMZeRzgCs7R/FWia/M8Wk36TyxjcyFWRseoDAZH0os3sGxr0Vgnxx4cXVP7POqR/afM8vGxtu70342/rU+reKtF0O6jt9Uv44JpRlU2sxx6nAOB7nHeizFdGvRXPeDvEM/iOyvp7hYAILx4IzADhkABB5Jyea6Ghqw9wooopAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA10EkZU9CKyGBViD1BwaZ4m8SJ4ftYysYmuJifLQnAAHUn86wtG8dNqGoR2mrW0KLMwRJIsjaT0zkn86n2kYuzOWeJpQqezk9TfoouGitp2jeVAR/eYDiovtMH/PeP8A77FbHQS0VF9pg/57x/8AfYo+0wf894/++xQBLRUX2mD/AJ7x/wDfYo+0wf8A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Tb0ajpdteKu3z4lcr/dJHIphctUUUUDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAp6rY/2npk1n5nleaAN+3OMEHp+FRXunTy3yXthcpbXCxmJjJF5iuhOem4cg9Dn1rRooAp2Ni2n2sFvDKGjjDeYXXLSMTktnOBySeh69qPsH/E5a/MmQ1uIPL2/7ROc/j0q5RQLpYx38M6b/aVnd29naQfZmZiqW6jeSODkeh5q7Np8F7GF1S3trvaxKb4AQo7cNnnHfv7VbooA51tAj0vTA1jCjywXn2sLFEFLDccrgdSEYgfhVq60aa4lums737NBfqv2hDDlum0lTkbSVwOQema2KKAKk1m8lrJaxzGCExCOMw5WSM+obP07du9VodKuvOkubu/D3Zh8mKWKAIIh1JCktkkgZzxwOK1KKAMWLTZNPvLjVrox3Fz5BTbaWpjMnQ/MNzFm4AHpVzRrJ7DSIYJiDNy8pHTexLN+pNXqKAsFFFFAwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKp6hY/bxbDzPL8i4Sf7ud209P/AK9XKKAMq80i4ku7iaxvRai7jCTgw7yccBlORtbBxzkdOKvW9ubVI4YSotoogiJtO4Y4+9npjtj8anooEUYtMRby/mmKzR3uwNEyZAAXbg+uarw+HbC11pdQtLa2gKQmNUjt1XDE/eyO+OPxrWooAyNS0m91FrUteW+yH5nhktWaOV+zEeYOB2BJ9fSnzabeTPbXP2yFL633ASLbny2RuqlN+ewOd3UVqUUXAwptLfT7e0uUL3U9tcmedgvzSbwVchR6BsgDsuOakudCkme6iivBFZXrh7iHyssTwGCvngMAM5B74xWzRRcBiLIJH3Mhj42KFIK8c5OefyFUYtMmt7e9W2vDFLcztOsgjB8snHGD1HHt17da0aKAMNdOm0tb+/QRz3tygRUtbcxKzZOCRk5OW5YnpWlptmNO0u2s1bd5ESoW/vEDk1aooAKKKKBhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/2Q==", + "description": "In this tutorial workflow, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their variance values.\n", + "parameter": "1. **Feature Columns***: ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n2. **Variance Threshold**: 0.5\n3. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.extraction import variance_filter\r\nres = variance_filter(table = inputs[0] ,feature_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'], threshold = 0.5, group_by = None)\r\noutput = res['out_table']", + "description": "In this script, sample_iris data is used as input of the Correlation Filter function. The output of this function is a table that contains the features filtered considering their variance values.\n", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/extraction/moving_average.py b/function/python/brightics/function/extraction/moving_average.py index d462c9002..ca3c87e01 100644 --- a/function/python/brightics/function/extraction/moving_average.py +++ b/function/python/brightics/function/extraction/moving_average.py @@ -37,7 +37,7 @@ def ewma(table, group_by=None, **params): return _ewma(table, **params) -def _ewma(table, input_cols, ratio_type, custom_ratio=0.5, period_number=1): +def _ewma(table, input_cols, ratio_type='custom', custom_ratio=0.5, period_number=1): out_table = table.copy() def ewma_col(column): diff --git a/function/python/brightics/function/extraction/pca.py b/function/python/brightics/function/extraction/pca.py index 4677f3b69..101028b41 100644 --- a/function/python/brightics/function/extraction/pca.py +++ b/function/python/brightics/function/extraction/pca.py @@ -50,7 +50,7 @@ def _pca(table, input_cols, new_column_name='projected_', n_components=None, cop if n_components is None: n_components = num_feature_cols - pca = PCA(None, copy, whiten, svd_solver, tol, iterated_power, random_state=seed) + pca = PCA(n_components, copy, whiten, svd_solver, tol, iterated_power, random_state=seed) pca_model = pca.fit(table[input_cols]) column_names = [] diff --git a/function/python/brightics/function/extraction/polynomial_expansion.py b/function/python/brightics/function/extraction/polynomial_expansion.py index 62340ba82..04fdcd61d 100644 --- a/function/python/brightics/function/extraction/polynomial_expansion.py +++ b/function/python/brightics/function/extraction/polynomial_expansion.py @@ -26,12 +26,14 @@ def polynomial_expansion(table, **params): return _polynomial_expansion(table, **params) def _polynomial_expansion(table, input_cols, hold_cols=False): - out_table = pd.DataFrame() - out_table[input_cols] = table[input_cols] if hold_cols: + out_table = pd.DataFrame() + out_table[input_cols] = table[input_cols] hold_cols = list(set(hold_cols) - set(input_cols)) out_table[hold_cols] = table[hold_cols] + else: + out_table = table.copy() for i in range(len(input_cols)): for j in range(i, len(input_cols)): out_table[input_cols[i] + '_' + input_cols[j]] = np.array(table[input_cols[i]]) * np.array(table[input_cols[j]]) - return {'out_table' : out_table} + return {'out_table' : out_table} \ No newline at end of file diff --git a/function/python/brightics/function/extraction/scale.py b/function/python/brightics/function/extraction/scale.py index e3811f60f..dd52fdca4 100644 --- a/function/python/brightics/function/extraction/scale.py +++ b/function/python/brightics/function/extraction/scale.py @@ -19,6 +19,7 @@ from brightics.common.groupby import _function_by_group from brightics.function.utils import _model_dict from brightics.common.utils import check_required_parameters +from brightics.common.repr import BrtcReprBuilder, strip_margin, pandasDF2MD, dict2MD, plt2MD, keyValues2MD def scale(table, group_by=None, **params): @@ -61,7 +62,25 @@ def _scale(table, input_cols, scaler, suffix=None): out_model['used_scaler'] = scaler out_model['scaler'] = scale out_model['suffix'] = suffix - + rb = BrtcReprBuilder() + params = { + "Input columns": input_cols, + "Normalization method": scaler, + "Suffix": suffix + } + summary_table = pd.DataFrame() + summary_table['Input columns'] = input_cols + summary_table['Normalization method'] = [scaler] * len(input_cols) + summary_table['New column names'] = scaled_cols + rb.addMD(strip_margin(""" + | ## Label Encoder Model + | ### Parameters + | {params} + | + | ### Summary table + | {summary_table} + """.format(params=dict2MD(params), summary_table=pandasDF2MD(summary_table)))) + out_model['_repr_brtc_'] = rb.get() return {'out_table' : out_table, 'model' : out_model} @@ -73,7 +92,10 @@ def scale_model(table, model, **params): return _scale_model(table, model, **params) -def _scale_model(table, model): +def _scale_model(table, model): + if (table.shape[0]==0): + out_table = pd.DataFrame(columns=table.columns) + return {'out_table' : out_table} scaled_cols = [] for col in model['input_cols']: scaled_cols.append(col + model['suffix']) @@ -81,5 +103,4 @@ def _scale_model(table, model): out_table = table.copy() scaled_table = model['scaler'].transform(out_table[model['input_cols']]) out_table[scaled_cols] = pd.DataFrame(data=scaled_table) - return {'out_table' : out_table} diff --git a/function/python/brightics/function/extraction/string_split.py b/function/python/brightics/function/extraction/string_split.py index e81cb9992..81feb2528 100644 --- a/function/python/brightics/function/extraction/string_split.py +++ b/function/python/brightics/function/extraction/string_split.py @@ -30,7 +30,7 @@ def string_split(table, **params): def _string_split(table, input_col, hold_cols=None, delimiter=',', output_col_name='split', output_col_cnt=3, output_col_type='double', start_pos=0, end_pos=0): - out_table = pd.DataFrame() + out_table = table.copy() output_arr = [x[start_pos:-end_pos].split(delimiter, output_col_cnt) \ if not pd.isnull(x) \ @@ -84,4 +84,4 @@ def _string_split(table, input_col, hold_cols=None, delimiter=',', output_col_na for hold_col in hold_cols: out_table[hold_col] = table[hold_col] - return {'out_table' : out_table} + return {'out_table' : out_table} \ No newline at end of file diff --git a/function/python/brightics/function/extraction/variance_filter.py b/function/python/brightics/function/extraction/variance_filter.py new file mode 100644 index 000000000..6a901eb91 --- /dev/null +++ b/function/python/brightics/function/extraction/variance_filter.py @@ -0,0 +1,47 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.repr import BrtcReprBuilder, strip_margin, plt2MD, pandasDF2MD +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate, greater_than, greater_than_or_equal_to + +import matplotlib.pyplot as plt +import seaborn as sns +from scipy import stats +import pandas as pd +import numpy as np +from sklearn.feature_selection import VarianceThreshold + +def variance_filter(table, group_by=None, **params): + check_required_parameters(_variance_filter, params, ['table']) + + if group_by is not None: + return _function_by_group(_variance_filter, table, group_by=group_by, **params) + else: + return _variance_filter(table, **params) + + +def _variance_filter(table, feature_cols, threshold=0.0): + data = table[feature_cols] + selector = VarianceThreshold(threshold=threshold) + selector.fit(data) + remain_label_index = selector.get_support() + output = selector.transform(data) + out_table = pd.DataFrame(output, columns=pd.Series(feature_cols)[remain_label_index]) + + return {'out_table': out_table} \ No newline at end of file diff --git a/function/python/brightics/function/io/__init__.py b/function/python/brightics/function/io/__init__.py index d4a868e05..7ac1b98d3 100644 --- a/function/python/brightics/function/io/__init__.py +++ b/function/python/brightics/function/io/__init__.py @@ -38,5 +38,3 @@ from .create_table import create_table from .create_table import set_data - -#from .image import image_load diff --git a/function/python/brightics/function/io/image.py b/function/python/brightics/function/io/image.py deleted file mode 100644 index 9ab8d0791..000000000 --- a/function/python/brightics/function/io/image.py +++ /dev/null @@ -1,106 +0,0 @@ -import uuid - -import matplotlib.pyplot as plt -from typing import List, Any, Union - -import glob -import pandas as pd -import random -import os -import pyarrow as pa -import pyarrow.parquet as pq -import pathlib -import numpy as np -import time -import cv2 - -from brightics.common.data.utils import get_unique_column_name -from brightics.common.datatypes.image import Image -from brightics.common.validation import raise_runtime_error - - -# -# labelling -# dir : (label)/files.... -# none : no label -# file_prefix : (label)_files... -# -def image_load(path, labeling='dir', image_col='image', n_sample=None, size_limit=640, auto_resize_limit=False): - def _is_big_image(img, limit): - return max(img.height, img.width) > limit - - if labeling == 'dir': - images_file_list = glob.glob('''{}/*/*'''.format(path)) - if n_sample is not None: - images_file_list = random.sample(images_file_list, n_sample) - npy_images = [(cv2.imread(x), x) for x in images_file_list] - label = [os.path.split(os.path.dirname(os.path.abspath(x[1])))[1] for x in npy_images if x[0] is not None] - else: - images_file_list = glob.glob('''{}/*'''.format(path)) - if n_sample is not None: - images_file_list = random.sample(images_file_list, n_sample) - npy_images = [(cv2.imread(x), x) for x in images_file_list] - label = None - - loaded_images = [Image(x[0], origin=x[1]) for x in npy_images if x[0] is not None] - - # check the size of loaded images - if any([x for x in loaded_images if _is_big_image(x, size_limit)]): - if auto_resize_limit: - encoded_images = [x.resize_limit(size_limit).tobytes() for x in loaded_images] - else: - raise_runtime_error('Cannot load images with size over {}px.'.format(size_limit)) - else: - encoded_images = [x.tobytes() for x in loaded_images] - - label_col = '{}_label'.format(image_col) - out_df = pd.DataFrame({image_col: encoded_images}) - if label is not None: - out_df[label_col] = label - - return {'out_table': out_df} - - -def image_unload(table, input_col, path, type='png', label_col=None, labelling='dir'): - if not _is_image_col(table, input_col): - raise_runtime_error('{} is not an image type column.'.format(input_col)) - - pathlib.Path(path).mkdir(parents=True, exist_ok=True) - - if label_col is None: - for i, x in enumerate(table[input_col]): - img_npy = Image.from_bytes(x).data - # if type == 'png': - out_file_name = '{}/{}.{}'.format(path, i, type) - print(out_file_name) - cv2.imwrite(out_file_name, img_npy) - - -def save_to_npy(table, input_col, label_col, data_output_path, label_output_path, flatten=True): - _check_image_col(table, input_col) - - data_npy = np.array( - [Image.from_bytes(x).data.flatten() if flatten else Image.from_bytes(x).data for x in table[input_col]]) - label_npy = np.array(table[label_col]) - np.save(file=data_output_path, arr=data_npy) - np.save(file=label_output_path, arr=label_npy) - - -def _is_image_col(table, input_col, n_sample=3): - if table[input_col].dtype != object: - return False - - _n_table = len(table) - if _n_table == 0: - # ignore validation - return True - - _n_sample = min(n_sample, _n_table) - sampled_data = table[input_col].sample(_n_sample) - - return all([Image.is_image(x) for x in sampled_data]) - - -def _check_image_col(table, input_col): - if not _is_image_col(table, input_col): - raise_runtime_error("input column {} is not an image column.".format(input_col)) diff --git a/function/python/brightics/function/io/load.py b/function/python/brightics/function/io/load.py index 966c56bd5..74e61de73 100644 --- a/function/python/brightics/function/io/load.py +++ b/function/python/brightics/function/io/load.py @@ -22,9 +22,10 @@ import brightics.common.data.table_data_reader as table_reader import brightics.common.data.utils as util -import brightics.common.json as data_json +import brightics.common.datajson as data_json from brightics.common.datasource import DbEngine from brightics.common.validation import raise_runtime_error +from brightics.common.exception import BrighticsFunctionException as BFE def read_csv(path, engine='python', delimiter=',', na_filter=False, strip_col=False, quoting=3, encoding='utf-8'): @@ -34,7 +35,26 @@ def read_csv(path, engine='python', delimiter=',', na_filter=False, strip_col=Fa quoting = 3 dir_data = os.getcwd() + '/data' path = os.path.join(dir_data, path) - return {'table': table_reader.read_csv(path, engine, delimiter, na_filter, strip_col, quoting, encoding)} + res = pd.DataFrame() + if os.path.isfile(path): + res = table_reader.read_csv(path, engine, delimiter, na_filter, strip_col, quoting, encoding) + elif os.path.isdir(path): + for f in os.listdir(path): + if f.endswith('.csv'): + f_path = os.path.join(path, f) + try: + tmp = table_reader.read_csv(f_path, engine, delimiter, na_filter, strip_col, quoting, encoding) + except: + raise BFE.from_errors([{'0100': 'Can not read ' + f_path + '.'}]) + if res.shape != (0, 0) and not res.columns.equals(tmp.columns): + raise BFE.from_errors([{'0100': 'Files under ' + path + ' do not have same schema.'}]) + res = pd.concat([res, tmp]) + else: + raise BFE.from_errors([{'0100': 'Path ' + path + ' is incorrect.'}]) + for i, col in enumerate(res.columns): + res = res.rename(columns={'Unnamed: {i}'.format(i=i): 'Unnamed_{i}'.format(i=i)}) + + return {'table': res} def load_model(path): @@ -85,7 +105,7 @@ def load(partial_path=['/brightics@samsung.com/upload/sample_iris.csv']): if partial_path.endswith("/"): partial_path = partial_path[:-1] - + return {'table': table_reader.read_parquet(util.make_data_path_from_key(partial_path))} diff --git a/function/python/brightics/function/io/meta/image_load.json b/function/python/brightics/function/io/meta/image_load.json deleted file mode 100644 index cae5ad72c..000000000 --- a/function/python/brightics/function/io/meta/image_load.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "script": { - "type": "", - "content": "" - }, - "specJson": { - "category": "io", - "func": "brightics.function.io$image_load", - "name": "brightics.function.io$image_load", - "context": "python", - "label": "Image Load", - "description": "Load image files.", - "tags": [], - "version": "3.6", - "outputs": { - "out_table": "" - }, - "meta": { - "out_table": { - "type": "table" - } - }, - "params": [ - { - "id": "path", - "label": "Input Path", - "description": "Directory where the image files exists.", - "mandatory": true, - "items": [], - "visibleOption": [], - "control": "InputBox", - "columnType": [], - "validation": [], - "type": "String" - }, - { - "id": "labeling", - "label": "Labeling", - "description": "Method to add label to image values.", - "mandatory": false, - "items": [ - { - "label": "Directory", - "value": "dir", - "description": "Assume the image files are saved as (Input Path)/(Label)/(Image Files).", - "default": true - }, - { - "label": "None", - "value": "none", - "description": "Assume the image files are saved as (Input Path)/(Image Files). Label values are not added.", - "default": false - } - ], - "visibleOption": [], - "control": "RadioButton", - "columnType": [], - "validation": [] - }, - { - "id": "image_col", - "label": "Image Column Name", - "description": "Column name for image values.", - "mandatory": false, - "items": [], - "visibleOption": [], - "control": "InputBox", - "columnType": [], - "validation": [], - "placeHolder": "image", - "type": "String" - } - ] - }, - "md": "" -} \ No newline at end of file diff --git a/function/python/brightics/function/io/meta/image_unload.json.notreleased b/function/python/brightics/function/io/meta/image_unload.json.notreleased deleted file mode 100644 index b7c69c8ee..000000000 --- a/function/python/brightics/function/io/meta/image_unload.json.notreleased +++ /dev/null @@ -1,53 +0,0 @@ -{ - "script": { - "type": "", - "content": "" - }, - "specJson": { - "category": "io", - "func": "brightics.function.io$image_unload", - "name": "brightics.function.io$image_unload", - "context": "python", - "label": "Image Unload", - "description": "Unload image files.", - "tags": [], - "version": "3.6", - "inputs": { - "table": "" - }, - "meta": { - "table": { - "type": "table" - } - }, - "params": [ - { - "id": "input_col", - "label": "Input Column", - "description": "", - "mandatory": true, - "items": [], - "visibleOption": [], - "control": "ColumnSelector", - "columnType": [ - "Image" - ], - "validation": [], - "multiple": false - }, - { - "id": "path", - "label": "Output Path", - "description": "", - "mandatory": true, - "items": [], - "visibleOption": [], - "control": "InputBox", - "columnType": [], - "validation": [], - "type": "String" - } - ] - }, - "md": "" -} \ No newline at end of file diff --git a/function/python/brightics/function/io/read_excel.py b/function/python/brightics/function/io/read_excel.py index 998d2f328..03cccec57 100644 --- a/function/python/brightics/function/io/read_excel.py +++ b/function/python/brightics/function/io/read_excel.py @@ -1,9 +1,12 @@ """ Copyright 2019 Samsung SDS + Licensed 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 + http://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. @@ -16,4 +19,4 @@ def read_excel(path, sheet_index=0): table = pd.read_excel(path, sheet_name=sheet_index) - return {"table": table} \ No newline at end of file + return {"table": table} diff --git a/function/python/brightics/function/io/unload.py b/function/python/brightics/function/io/unload.py index 663bc0092..bd8ee4a62 100644 --- a/function/python/brightics/function/io/unload.py +++ b/function/python/brightics/function/io/unload.py @@ -24,25 +24,38 @@ import boto3 from brightics.function.utils import _model_dict_scala, _model_dict -import brightics.common.json as data_json +import brightics.common.datajson as data_json from brightics.common.datasource import DbEngine from brightics.common.validation import raise_runtime_error from brightics.brightics_data_api import _write_dataframe import brightics.common.data.utils as data_utils from brightics.common.utils import check_required_parameters import brightics.common.data.table_data_reader as table_reader -import brightics.common.data.utils as util +from brightics.brightics_java_gateway import brtc_java_gateway as gateway + + +def could_delete_path(path): + path = path if path[-1] == '/' else path + '/' + if gateway.data_root in path and gateway.data_root != path: + return True + return False def unload(table, partial_path, mode="overwrite"): - path = data_utils.make_data_path_from_key(partial_path[0]) + path = partial_path[0] if isinstance(partial_path, list) else partial_path + if path[0].startswith('.'): + raise_runtime_error('Cannot use a string to start with ".(dot)".') + if '..' in path: + raise_runtime_error('Cannot use a string "..(double dot)".') + path = path if path[0].startswith('/') else '/' + path + path = data_utils.make_data_path_from_key(path) + if not could_delete_path(path): + raise_runtime_error('Please check a path String and a type of path. Cannot use a root of directory for the path.') if os.path.isdir(path): shutil.rmtree(path) if mode=="append": try: - old_frame = table_reader.read_parquet( - util.make_data_path_from_key(partial_path[0]) - ) + old_frame = table_reader.read_parquet(path) new_frame = pd.concat([old_frame, table], axis=0, ignore_index=True) _write_dataframe(new_frame, path) except: @@ -202,9 +215,9 @@ def write_to_db(table, **params): return _write_to_db(table, **params) -def _write_to_db(table, tableName, datasource, ifExists='fail'): +def _write_to_db(table, tableName, datasource, schema=None, ifExists='fail'): if not isinstance(table, pd.DataFrame): raise_runtime_error('table is not pandas.DataFrame') with DbEngine(**datasource) as engine: - table.to_sql(tableName, engine, if_exists=ifExists, index=False) + table.to_sql(tableName, engine, schema=schema, if_exists=ifExists, index=False) diff --git a/function/python/brightics/function/manipulation/__init__.py b/function/python/brightics/function/manipulation/__init__.py index 48585a885..4377529d5 100644 --- a/function/python/brightics/function/manipulation/__init__.py +++ b/function/python/brightics/function/manipulation/__init__.py @@ -24,7 +24,7 @@ from brightics.common.utils import check_required_parameters from brightics.common.utils import get_default_from_parameters_if_required from brightics.common.validation import validate, greater_than_or_equal_to, raise_error, require_param -# from .timeseries_distance import timeseries_distance +from .timeseries_distance import timeseries_distance diff --git a/function/python/brightics/function/manipulation/meta/timeseries_distance.json b/function/python/brightics/function/manipulation/meta/timeseries_distance.json new file mode 100644 index 000000000..8318af184 --- /dev/null +++ b/function/python/brightics/function/manipulation/meta/timeseries_distance.json @@ -0,0 +1,937 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "manipulation", + "func": "brightics.function.manipulation$timeseries_distance", + "name": "brightics.function.manipulation$timeseries_distance", + "context": "python", + "label": "Time Series Distance", + "description": "This function calculates distance between 2 arrays A and B according to the selected distance type. \n\nReferences:\nhttps://en.wikipedia.org/wiki/Distance", + "tags": [ + "datetime", + "time series", + "distance", + "time series distance" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a table.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Output table with distance column added" + } + }, + "params": [ + { + "id": "input_col_1", + "label": "Input Timeseries 1", + "description": "Column name of the first Timeseries Array (Double) or String type. 'Sax' must be chosen for 'Distance Type' to use String type column.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer[]", + "Long[]", + "Float[]", + "Double[]", + "String", + "Integer", + "Long", + "Double" + ], + "multiple": false + }, + { + "id": "input_col_2", + "label": "Input Timeseries 2", + "description": "Column name of the second Timeseries Array (Double) or String type. 'Sax' must be chosen for 'Distance Type' to use String type column.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer[]", + "Long[]", + "Float[]", + "Double[]", + "String", + "Integer", + "Long", + "Double" + ], + "multiple": false + }, + { + "id": "distance_type", + "label": "Distance type", + "description": "Distance method between 2 double arrays. It must be one of 'Sax', 'Dtw', 'Euclidean', 'Correlation', 'L1Distance', 'EuclideanWithInterpolation', 'L1DistanceWithInterpolation'.", + "visibleOption": [], + "control": "DropDownList", + "validation": [], + "mandatory": true, + "placeHolder": "Please Choose: ", + "items": [ + { + "label": "Sax", + "value": "Sax", + "default": true + }, + { + "label": "Dtw", + "value": "Dtw", + "default": false + }, + { + "label": "Euclidean", + "value": "Euclidean", + "default": false + }, + { + "label": "Correlation", + "value": "Correlation", + "default": false + }, + { + "label": "L1Distance", + "value": "L1Distance", + "default": false + }, + { + "label": "EuclideanWithInterpolation", + "value": "EuclideanWithInterpolation", + "default": false + }, + { + "label": "L1DistanceWithInterpolation", + "value": "L1DistanceWithInterpolation", + "default": false + } + ], + "columnType": [] + }, + { + "id": "alphabet", + "label": "Alphabet", + "description": "Alphabet size for 'Sax' strings. If distance type is 'Sax', you must fix one of 'Alphabet Column' or 'Alphabet'. It is 'Sax' related option. (between 2 and 26)", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [ + "Integer" + ], + "type": "Integer", + "placeHolder": "26", + "defaultValue": 26 + } + ], + "summary": "This function calculates distance between 2 arrays.", + "tutorialLink": "https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/13_preprocessing_timeSeriesDistance?type=insight" + }, + "md": { + "en": "# Time Series Distance\nThis function calculates distance between 2 arrays.\n\n## Description\nThis function calculates distance between 2 arrays A and B according to the selected distance type. \n\n+ References:\nhttps://en.wikipedia.org/wiki/Distance\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **out_table**: (Table) Output table with distance column added\n#### PARAMETER\n1. **Input Timeseries 1***: Column name of the first Timeseries Array (Double) or String type. 'Sax' must be chosen for 'Distance Type' to use String type column.\n\n2. **Input Timeseries 2***: Column name of the second Timeseries Array (Double) or String type. 'Sax' must be chosen for 'Distance Type' to use String type column.\n\n3. **Distance type***: Distance method between 2 double arrays. It must be one of 'Sax', 'Dtw', 'Euclidean', 'Correlation', 'L1Distance', 'EuclideanWithInterpolation', 'L1DistanceWithInterpolation'.\n\n4. **Alphabet**: Alphabet size for 'Sax' strings. If distance type is 'Sax', you must fix one of 'Alphabet Column' or 'Alphabet'. It is 'Sax' related option. (between 2 and 26)\n\n\t* Default value: 26 \n\n### Python\n#### USAGE\n\n```\ntimeseries_distance(table, input_col_1, input_col_2, distance_type = \"Sax\", alphabet = 26)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **out_table**: (Table) Output table with distance column added\n#### PARAMETER\n1. **input_col_1***: Column name of the first Timeseries Array (Double) or String type. 'Sax' must be chosen for 'Distance Type' to use String type column.\n\t* Type: *str*\n2. **input_col_2***: Column name of the second Timeseries Array (Double) or String type. 'Sax' must be chosen for 'Distance Type' to use String type column.\n\t* Type: *str*\n3. **distance_type***: Distance method between 2 double arrays. It must be one of 'Sax', 'Dtw', 'Euclidean', 'Correlation', 'L1Distance', 'EuclideanWithInterpolation', 'L1DistanceWithInterpolation'.\n\t* Type: *str*\n\t* Default / Range: Sax ( Sax | Dtw | Euclidean | Correlation | L1Distance | EuclideanWithInterpolation | L1DistanceWithInterpolation )\n4. **alphabet**: Alphabet size for 'Sax' strings. If distance type is 'Sax', you must fix one of 'Alphabet Column' or 'Alphabet'. It is 'Sax' related option. (between 2 and 26)\n\t* Type: *int*\n\n\t* Default value: 26 \n\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_TimeSeriesDistance1 data is used to measure timeseries distance. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Timeseries 1***: \"sax1\"\n2. **Input Timeseries 2***: \"sax2\"\n3. **Distance type***: \"Sax\"\n4. **Alphabet**: 26\n\n\n\n### Python\n\n```\nfrom brightics.function.manipulation import timeseries_distance\nres = timeseries_distance(table = inputs[0], input_col_1 = \"sax1\", input_col_2 = \"sax2\", distance_type = \"Sax\", alphabet = 26)\noutput = res['out_table']\n```\nIn this python script, sample_TimeSeriesDistance1 data is used to measure timeseries distance for \"sax1\" and \"sax2\".\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "timeseries_distance_j.json", + "label": "timeseries_distance", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mc9pqwqq38ayb8kd", + "project_id": "p5dmzu78qb564crk", + "label": "timeseries_distance", + "contents": { + "mid": "mc9pqwqq38ayb8kd", + "type": "data", + "title": "timeseries_distance", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_TimeSeriesDistance1.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593510547183", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "m5pcyehhwew327e9yn9hihka" + } + ], + "layout": { + "type": "panel", + "id": "default-1593510547183" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "ttksmftx8n2br5xf" + }, + "fid": "f5ygkvjqzkd3qm5u" + }, + { + "persist-mode": "auto", + "func": "brightics.function.manipulation$timeseries_distance", + "name": "brightics.function.manipulation$timeseries_distance", + "param": { + "alphabet": 26, + "input_col_1": "sax1", + "input_col_2": "sax2", + "distance_type": "Sax" + }, + "display": { + "label": "Time Series Distance", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593510596829", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "q6kkk47hp7nkgbgze89s6yb9" + } + ], + "layout": { + "type": "panel", + "id": "default-1593510596829" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593510596554", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "q7x63mm5w47bq5hehsk2pcpa" + } + ], + "layout": { + "type": "panel", + "id": "default-1593510596554" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "out_table": "tnz7k5geps6nr5p4" + }, + "fid": "fumvwu8akccn88ff", + "inputs": { + "table": "ttksmftx8n2br5xf" + } + } + ], + "links": [ + { + "kid": "kmyruyecf52bkffg", + "sourceFid": "f5ygkvjqzkd3qm5u", + "targetFid": "fumvwu8akccn88ff" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T09:49:02.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T09:51:36.000Z", + "event_key": "2020_095136.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "timeseries_distance_j.png", + "label": "timeseries_distance_j.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_TimeSeriesDistance1 data is used to measure timeseries distance. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Timeseries 1***: \"sax1\"\n2. **Input Timeseries 2***: \"sax2\"\n3. **Distance type***: \"Sax\"\n4. **Alphabet**: 26\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.manipulation import timeseries_distance\r\nres = timeseries_distance(table = inputs[0], input_col_1 = \"sax1\", input_col_2 = \"sax2\", distance_type = \"Sax\", alphabet = 26)\r\noutput = res['out_table']", + "context": "python", + "description": "In this python script, sample_TimeSeriesDistance1 data is used to measure timeseries distance for \"sax1\" and \"sax2\"." + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/manipulation/outlier_detection.py b/function/python/brightics/function/manipulation/outlier_detection.py index 4b387623d..8f334ed9d 100644 --- a/function/python/brightics/function/manipulation/outlier_detection.py +++ b/function/python/brightics/function/manipulation/outlier_detection.py @@ -81,7 +81,6 @@ def _outlier_detection_tukey_carling(table, input_cols, outlier_method='tukey', 'Input Columns': input_cols, 'Outlier Method': outlier_method, 'Multiplier': multiplier, - 'Number of Outliers in a Row': number_of_removal, 'Result Type': result_type, 'New Column Prefix': new_column_prefix } diff --git a/function/python/brightics/function/manipulation/timeseries_distance.py b/function/python/brightics/function/manipulation/timeseries_distance.py new file mode 100644 index 000000000..a13cf5326 --- /dev/null +++ b/function/python/brightics/function/manipulation/timeseries_distance.py @@ -0,0 +1,152 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +import ast +import pandas as pd +import numpy as np +import scipy +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.utils import check_required_parameters +from brightics.common.exception import BrighticsFunctionException as BFE +from dtaidistance import dtw + + +def timeseries_distance(table, **params): + params = get_default_from_parameters_if_required(params, _timeseries_distance) + check_required_parameters(_timeseries_distance, params, ['table']) + return _timeseries_distance(table, **params) + + +def _timeseries_distance(table, input_col_1, input_col_2, distance_type, alphabet=26, hold_cols=[]): + temp_table = table.copy() + if len(hold_cols) > 0: + out_table = temp_table[hold_cols] + else: + out_table = table.copy() + if table[input_col_1].dtype != table[input_col_2].dtype: + raise BFE.from_errors([{'0100': 'Data types of two input timeseries must be the same.'}]) + if distance_type == 'Sax': + if alphabet < 3 or alphabet > 26: + raise BFE.from_errors( + [{'0100': 'Alphabet must be between 3 and 26 if distance_type is Sax.'}]) + if not isinstance(table[input_col_1].loc[0], str): + raise BFE.from_errors( + [{'0100': 'Data types of input timeseries must be String if distance_type is Sax.'}]) + sax_obj = SAX(alphabetSize=alphabet) + else: + sax_obj = None + if isinstance(table[input_col_1].loc[0], str): + raise BFE.from_errors( + [{'0100': 'Data types of input timeseries must be Array (Double) if distance_type is NOT Sax.'}]) + func = lambda x: ast.literal_eval(x) + try: + temp_table[input_col_1] = temp_table[input_col_1].apply(func) + temp_table[input_col_2] = temp_table[input_col_2].apply(func) + except: + pass + arr_1 = temp_table[input_col_1].values + arr_2 = temp_table[input_col_2].values + distance_list = compute_distance(arr_1, arr_2, distance_type, sax_obj) + out_table['distance'] = distance_list + return {'out_table':out_table} + + +def compute_distance(arr_1, arr_2, distance_type, sax_obj): + if distance_type == 'Sax': + distance_func = sax_obj.compare_strings + elif distance_type == 'Dtw': + distance_func = _dtw + elif distance_type == 'Euclidean' or distance_type == 'EuclideanWithInterpolation': + distance_func = _euclidean + elif distance_type == 'Correlation': + distance_func = _corr + elif distance_type == 'L1Distance' or distance_type == 'L1DistanceWithInterpolation': + distance_func = _l1 + distance_list = [] + for ind in range(len(arr_1)): + temp_1 = np.array(arr_1[ind]) + temp_2 = np.array(arr_2[ind]) + if 'Interpolation' in distance_type: + temp_1 = _interpolate(temp_1) + temp_2 = _interpolate(temp_2) + try: + distance_list.append(distance_func(temp_1, temp_2)) + except: + distance_list.append(np.nan) + return distance_list + + +def _dtw(in_1, in_2): + sim = dtw.distance(in_1, in_2) + return sim + + +def _euclidean(in_1, in_2): + return np.linalg.norm((in_1 - in_2), ord=2) + + +def _corr(in_1, in_2): + return np.corrcoef(in_1, in_2)[0, 1] + + +def _interpolate(arr): + return pd.Series(arr).interpolate().values + + +def _l1(in_1, in_2): + return np.linalg.norm((in_1 - in_2), ord=1) + + +class SAX(object): + + def __init__(self, alphabetSize): + self.aOffset = ord('a') + self.alphabetSize = alphabetSize + self.create_breakpoint() + self.beta = self.breakpoints[str(self.alphabetSize)] + self.build_letter_compare_dict() + + def compare_strings(self, sA, sB): + list_letters_a = [x for x in str(sA)] + list_letters_b = [x for x in str(sB)] + mindist = 0.0 + for i in range(0, len(list_letters_a)): + mindist += self.compareDict[list_letters_a[i] + list_letters_b[i]] ** 2 + mindist = np.sqrt(mindist) + return mindist + + def build_letter_compare_dict(self): + number_rep = range(0, self.alphabetSize) + letters = [chr(x + self.aOffset) for x in number_rep] + self.compareDict = {} + for i in range(0, len(letters)): + for j in range(0, len(letters)): + if np.abs(number_rep[i] - number_rep[j]) <= 1: + self.compareDict[letters[i] + letters[j]] = 0 + else: + high_num = np.max([number_rep[i], number_rep[j]]) - 1 + low_num = np.min([number_rep[i], number_rep[j]]) + self.compareDict[letters[i] + letters[j]] = self.beta[high_num] - self.beta[low_num] + + def create_breakpoint(self): + self.breakpoints = {} + for i in range(3, 27): + self.breakpoints[str(i)] = self.lookupEquiprobableRegions(i) + + def lookupEquiprobableRegions(self, word_length): + regions = np.arange(0, word_length, 1) / word_length + temp = scipy.stats.norm.ppf(regions)[1:].tolist() + return temp diff --git a/function/python/brightics/function/recommendation/association_rule.py b/function/python/brightics/function/recommendation/association_rule.py index c6dc4a07c..6b1c86ecd 100644 --- a/function/python/brightics/function/recommendation/association_rule.py +++ b/function/python/brightics/function/recommendation/association_rule.py @@ -404,7 +404,7 @@ def _association_rule(table, input_mode=None, array_input=None, mul_items=None, tmp.remove(None) transactions[i] = np.array(list(tmp)) elif input_mode == 'transaction': - transactions = [list(set(transaction)) for transaction in np.array(table[array_input])] + transactions = [list(set(transaction) - {None}) for transaction in np.array(table[array_input])] else: if items is None: raise Exception('Select Item Column') diff --git a/function/python/brightics/function/recommendation/collaborative_filtering.py b/function/python/brightics/function/recommendation/collaborative_filtering.py index e5f62f652..5cb063fe0 100644 --- a/function/python/brightics/function/recommendation/collaborative_filtering.py +++ b/function/python/brightics/function/recommendation/collaborative_filtering.py @@ -265,7 +265,8 @@ def _collaborative_filtering_train(table, user_col , item_col, rating_col, N=10, model = _model_dict('collaborative filtering') model['weighted'] = weighted model['k'] = k - model['similar_coeff'] = similar_coeff + model['method'] = method + model['centered_ratings'] = centered_ratings model['item_encoder'] = item_encoder model['user_encoder'] = user_encoder model['item_users'] = item_users @@ -319,7 +320,8 @@ def _collaborative_filtering_predict(table, model, prediction_col='prediction', user_avg = model['user_avg'] weighted = model['weighted'] k = model['k'] - similar_coeff = model['similar_coeff'] + method = model['method'] + centered_ratings = model['centered_ratings'] item_encoder = model['item_encoder'] user_encoder = model['user_encoder'] item_users = model['item_users'] @@ -327,6 +329,17 @@ def _collaborative_filtering_predict(table, model, prediction_col='prediction', user_col = model['user_col'] item_col = model['item_col'] based = model['based'] + + if method == 'cosine': + similar_coeff = cosine_similarity(centered_ratings) + elif method == 'pearson': + result = [] + for i in centered_ratings.toarray(): + result.append(i - np.average(i)) + similar_coeff = cosine_similarity(result) + elif method == 'jaccard': + similar_coeff = 1 - pairwise_distances(centered_ratings.toarray(), metric="hamming") + tmp_user = np.array(table[user_col]) tmp_item = np.array(table[item_col]) valid_indices = [i for i in range(len(tmp_user)) if tmp_user[i] in user_encoder.classes_ and tmp_item[i] in item_encoder.classes_] diff --git a/function/python/brightics/function/recommendation/meta/association_rule.json b/function/python/brightics/function/recommendation/meta/association_rule.json index 15fdc8bd5..62118e4f2 100644 --- a/function/python/brightics/function/recommendation/meta/association_rule.json +++ b/function/python/brightics/function/recommendation/meta/association_rule.json @@ -242,7 +242,7 @@ "summary": "This function is a recommender model using Association Rule.", "tutorialLink": "https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/30_Purchase_based_product_recom" }, - "md": "# Association Rule\nThis function is a recommender model using Association Rule.\n\n## Description\nAssociation rule is a rule-based method for discovering interesting relations between variables in large databases. This function computes the association rule using the FP-growth algorithm. FP stands for frequent pattern. It requires an input table of database consisting of transactions, where a transaction is a set of items. Association rule typically does not consider the order of items either within a transaction or across transactions. \n\nAn example rule for the supermarket domain could be {butter, bread}=> milk, meaning that if butter and bread are bought, then the customer is likely to buy milk. Several measures are presented including `support`, `confidence`, `lift`, and `conviction`. `Support` is an indication of how frequently the itemset appears in the dataset. `Confidence` is an indication of how often the rule has been found to be true. `Lift` is the ratio of the observed support to that ex pected if X and Y were independent. `Conviction` means the ratio of the expected frequency that X occurs without Y (that is to say, the frequency that the rule makes an incorrect prediction)\n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain at least one column for transaction data.\n#### OUTPUT\n1. **out_table**: (Table) Discovered Association Rules in a table.\n#### PARAMETER\n1. **Input Type**: Type of Input.\n - Available Options : `User - single item`, `User - multiple items`, `Array`\n\n2. **Input Column**: Column to select as input.\n\n3. **Item Columns**: For Input Type \"User - multiple items\"\n\n4. **User Column***: For Input Type \"User-single item\"\n\n5. **Item Column***: For Input Type \"User-single item\"\n\n6. **Min Support**: The minimal support level. \n\n7. **Min Confidence**: The minimal confidence. \n\n8. **Min Lift**: The minimal lift.\n\n9. **Max Lift**: The maximal lift.\n\n10. **Min Conviction**: The minimal conviction.\n\n11. **Max Conviction**: The maximal conviction.\n\n12. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nassociation_rule(table, input_mode=None, array_input=None, mul_items=None, items=None, user_name=None, min_support=0.01, min_confidence=0.8, min_lift=-math.inf, max_lift=math.inf, min_conviction=-math.inf, max_conviction=math.inf,\ngroup_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain at least one column for transaction data.\n#### OUTPUT\n1. **out_table**: (Table) Discovered Association Rules in a table.\n#### PARAMETER\n1. **input_mode**: Type of Input.\n\t* Type: *str*\n\t* Default / Range: item_user ( item_user | user_multiple | transaction )\n2. **array_input**: Column to select as input.\n\t* Type: *str*\n\t* Default value: None\n3. **mul_items**: Item columns for `input_mode=user_multiple`.\n\t* Type: *list[str]*\n\t* Default value: None\n4. **user_name***: User column for `input_mode=item_user`.\n\t* Type: *str*\n\t* Default value: None\n5. **items***: Item columns for `input_mode=item_user`.\n\t* Type: _list_[_str_] \n\t* Default value: None\n6. **min_support**: The minimal support level. \n\t* Type: *float*\n\t* Default / Range: 0.01 (0 <= value <= 1)\n7. **min_confidence**: The minimal confidence. \n\t* Type: *float*\n\t* Default / Range: 0.8 (0 <= value <= 1)\n8. **min_lift**: The minimal lift.\n\t* Type: *float*\n * Default / Range: -∞ (value <= 0)\n9. **max_lift**: The maximal lift.\n\t* Type: *float*\n * Default / Range: ∞ (0 <= value)\n10. **min_conviction**: The minimal conviction.\n\t* Type: *float*\n * Default / Range: -∞ (value <= 0)\n11. **max_conviction**: The maximal conviction.\n\t* Type: *float*\n * Default / Range: ∞ (0 <= value)\n12. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_AssociationRule data is used to conduct Association Rule function. The generated result is can be visualized by Association Rule Visualization function. The parameter settings used in the function are shown below.\n\n\n++Parameters++\n1. **Input Type**: Array\n2. **Input Column**: item_array\n3. **Min Support**: 0.01\n4. **Min Confidence**: 0.8\n5. **Min Lift**: 0\n6. **Max Lift**: 100\n7. **Min Conviction**: 0\n8. **Max Conviction**: 100\n9. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.recommendation import association_rule\nimport math\ninput_table = inputs[0]\nresult = association_rule(table=input_table,\n input_mode='transaction',\n array_input='item_array',\n mul_items=None,\n items=None,\n user_name=None,\n min_support=0.01,\n min_confidence=0.8,\n min_lift=-math.inf,\n max_lift=math.inf,\n min_conviction=-math.inf,\n max_conviction=math.inf,\n group_by=None)\noutput = result['model']\n```\nIn this python script, sample_AssociationRule data is used to conduct Association Rule function. The generated result is can be visualized by Association Rule Visualization function. \n\n", + "md": "# Association Rule\nThis function is a recommender model using Association Rule.\n\n## Description\nAssociation rule is a rule-based method for discovering interesting relations between variables in large databases. This function computes the association rule using the FP-growth algorithm. FP stands for frequent pattern. It requires an input table of database consisting of transactions, where a transaction is a set of items. Association rule typically does not consider the order of items either within a transaction or across transactions. \n\nAn example rule for the supermarket domain could be {butter, bread}=> milk, meaning that if butter and bread are bought, then the customer is likely to buy milk. Several measures are presented including `support`, `confidence`, `lift`, and `conviction`. `Support` is an indication of how frequently the itemset appears in the dataset. `Confidence` is an indication of how often the rule has been found to be true. `Lift` is the ratio of the observed support to that ex pected if X and Y were independent. `Conviction` means the ratio of the expected frequency that X occurs without Y (that is to say, the frequency that the rule makes an incorrect prediction)\n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain at least one column for transaction data.\n#### OUTPUT\n1. **out_table**: (Table) Discovered Association Rules in a table.\n#### PARAMETER\n1. **Input Type**: Type of Input.\n - Available Options : `User - single item`, `User - multiple items`, `Array`\n\n2. **Input Column**: Column to select as input.\n\n3. **Item Columns**: For Input Type \"User - multiple items\"\n\n4. **User Column***: For Input Type \"User-single item\"\n\n5. **Item Column***: For Input Type \"User-single item\"\n\n6. **Min Support**: The minimal support level. \n\n7. **Min Confidence**: The minimal confidence. \n\n8. **Min Lift**: The minimal lift.\n\n9. **Max Lift**: The maximal lift.\n\n10. **Min Conviction**: The minimal conviction.\n\n11. **Max Conviction**: The maximal conviction.\n\n12. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nassociation_rule(table, input_mode=None, array_input=None, mul_items=None, items=None, user_name=None, min_support=0.01, min_confidence=0.8, min_lift=-math.inf, max_lift=math.inf, min_conviction=-math.inf, max_conviction=math.inf,\ngroup_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain at least one column for transaction data.\n#### OUTPUT\n1. **out_table**: (Table) Discovered Association Rules in a table.\n#### PARAMETER\n1. **input_mode**: Type of Input.\n\t* Type: *str*\n\t* Default / Range: item_user ( item_user | user_multiple | transaction )\n2. **array_input**: Column to select as input.\n\t* Type: *str*\n\t* Default value: None\n3. **mul_items**: Item columns for `input_mode=user_multiple`.\n\t* Type: *list[str]*\n\t* Default value: None\n4. **user_name***: User column for `input_mode=item_user`.\n\t* Type: *str*\n\t* Default value: None\n5. **items***: Item columns for `input_mode=item_user`.\n\t* Type: _list_[_str_] \n\t* Default value: None\n6. **min_support**: The minimal support level. \n\t* Type: *float*\n\t* Default / Range: 0.01 (0 <= value <= 1)\n7. **min_confidence**: The minimal confidence. \n\t* Type: *float*\n\t* Default / Range: 0.8 (0 <= value <= 1)\n8. **min_lift**: The minimal lift.\n\t* Type: *float*\n * Default / Range: -∞ (value <= 0)\n9. **max_lift**: The maximal lift.\n\t* Type: *float*\n * Default / Range: ∞ (0 <= value)\n10. **min_conviction**: The minimal conviction.\n\t* Type: *float*\n * Default / Range: -∞ (value <= 0)\n11. **max_conviction**: The maximal conviction.\n\t* Type: *float*\n * Default / Range: ∞ (0 <= value)\n12. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_AssociationRule data is used to conduct Association Rule function. The generated result is can be visualized by Association Rule Visualization function. The parameter settings used in the function are shown below.\n\n\n++Parameters++\n1. **Input Type**: Array\n2. **Input Column**: item_array\n3. **Min Support**: 0.01\n4. **Min Confidence**: 0.8\n5. **Min Lift**: 0\n6. **Max Lift**: 100\n7. **Min Conviction**: 0\n8. **Max Conviction**: None\n9. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.recommendation import association_rule\nimport math\ninput_table = inputs[0]\nresult = association_rule(table=input_table,\n input_mode='transaction',\n array_input='item_array',\n mul_items=None,\n items=None,\n user_name=None,\n min_support=0.01,\n min_confidence=0.8,\n min_lift=-math.inf,\n max_lift=math.inf,\n min_conviction=-math.inf,\n max_conviction=math.inf,\n group_by=None)\noutput = result['model']\n```\nIn this python script, sample_AssociationRule data is used to conduct Association Rule function. The generated result is can be visualized by Association Rule Visualization function. \n\n", "exampleModels": [ { "fileName": "brightics.function.recommendation$association_rule.json", @@ -275,8 +275,7 @@ "min_lift": 0, "min_conviction": 0, "min_support": 0.01, - "max_lift": 100, - "max_conviction": 100 + "max_lift": 100 }, "display": { "label": "Association Rule", diff --git a/function/python/brightics/function/recommendation/meta/association_rule_visualization.json b/function/python/brightics/function/recommendation/meta/association_rule_visualization.json index f1326f005..8ac95fa4d 100644 --- a/function/python/brightics/function/recommendation/meta/association_rule_visualization.json +++ b/function/python/brightics/function/recommendation/meta/association_rule_visualization.json @@ -168,8 +168,7 @@ "min_lift": 0, "min_conviction": 0, "min_support": 0.01, - "max_lift": 100, - "max_conviction": 100 + "max_lift": 100 }, "display": { "label": "Association Rule", diff --git a/function/python/brightics/function/regression/__init__.py b/function/python/brightics/function/regression/__init__.py index 613e42efa..5ca6ecfbf 100644 --- a/function/python/brightics/function/regression/__init__.py +++ b/function/python/brightics/function/regression/__init__.py @@ -34,3 +34,5 @@ from .regression_predict import regression_predict from .isotonic_regression import isotonic_regression_train from .isotonic_regression import isotonic_regression_predict +from .pls_regression import pls_regression_train +from .pls_regression import pls_regression_predict \ No newline at end of file diff --git a/function/python/brightics/function/regression/ada_boost_regression.py b/function/python/brightics/function/regression/ada_boost_regression.py index 50ef6df6d..b1e3869ee 100644 --- a/function/python/brightics/function/regression/ada_boost_regression.py +++ b/function/python/brightics/function/regression/ada_boost_regression.py @@ -121,6 +121,10 @@ def ada_boost_regression_predict(table, model, **params): def _ada_boost_regression_predict(table, model, pred_col_name='prediction'): + if (table.shape[0] == 0): + new_cols = table.columns.tolist() + [pred_col_name] + out_table = pd.DataFrame(columns=new_cols) + return {'out_table': out_table} out_table = table.copy() regressor = model['regressor'] _, test_data = check_col_type(table, model['params']['feature_cols']) diff --git a/function/python/brightics/function/regression/knn_regression.py b/function/python/brightics/function/regression/knn_regression.py index 8e7eaecbe..55951e474 100644 --- a/function/python/brightics/function/regression/knn_regression.py +++ b/function/python/brightics/function/regression/knn_regression.py @@ -36,7 +36,10 @@ def knn_regression(train_table, test_table, **params): def _knn_regression(train_table, test_table, feature_cols, label_col, k=5, algorithm='auto', leaf_size=30, p=2, pred_col_name='prediction'): - + if (test_table.shape[0] == 0): + new_cols = test_table.columns.tolist() + [pred_col_name] + out_table = pd.DataFrame(columns=new_cols) + return {'out_table': out_table} _, X_train = check_col_type(train_table, feature_cols) y_train = train_table[label_col] _, X_test = check_col_type(test_table, feature_cols) diff --git a/function/python/brightics/function/regression/meta/ada_boost_regression_train.json b/function/python/brightics/function/regression/meta/ada_boost_regression_train.json index ea72e9b78..499346970 100644 --- a/function/python/brightics/function/regression/meta/ada_boost_regression_train.json +++ b/function/python/brightics/function/regression/meta/ada_boost_regression_train.json @@ -74,7 +74,7 @@ }, { "id": "max_depth", - "label": "Maximum Depth", + "label": "Max Depth", "description": "The maximum depth of the base estimator. In this Brightics Studio, the base estimator for Adaboost Regression model is Decision Tree Regression model. Note that it is one of the main parameters to tune to obtain good results by controlling the complexity of the base estimmators.", "visibleOption": [], "control": "InputBox", diff --git a/function/python/brightics/function/regression/meta/decision_tree_regression_predict.json b/function/python/brightics/function/regression/meta/decision_tree_regression_predict.json index e1dd2752b..91bb64e25 100644 --- a/function/python/brightics/function/regression/meta/decision_tree_regression_predict.json +++ b/function/python/brightics/function/regression/meta/decision_tree_regression_predict.json @@ -1566,4 +1566,4 @@ "base64": "data:image/png;base64,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" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/regression/meta/decision_tree_regression_train.json b/function/python/brightics/function/regression/meta/decision_tree_regression_train.json index 3eb311ed2..fdfe1b663 100644 --- a/function/python/brightics/function/regression/meta/decision_tree_regression_train.json +++ b/function/python/brightics/function/regression/meta/decision_tree_regression_train.json @@ -1232,7 +1232,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.regression$decision_tree_regression_predict", + "func": "brightics.function.regression$decision_tree_regression_predictedict", "name": "brightics.function.regression$decision_tree_regression_predict", "param": {}, "display": { @@ -1758,4 +1758,4 @@ "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA9IAAACsCAYAAACXU5TyAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAC9uSURBVHhe7d35jxznnd/x/FVZJ2sjCJDkFwNOYiDJBokXWG+8gJPFeiXDimJYFi1LliXZkmWJknVYoiRSvDkc3pR4ifd9iId4zAyH5HB4izJFUbcq/amup/qpp5+q7uquru6ufn+BFzj91NU9fL7z1Lfr+heXr90OAAAAAABAeyikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAIAR88OfnIuZth/dPxG3XZz9MGz78c8abVOX6m3/+OBk3HZu+lbY9pNfNNpOT9TbfvrwVNx24szNsO2BRxptx07V237+2Pm47dDxG2HbQ79ttO0/Wm+b89R03Lbn0PWw7dGnG2079tfbHn/2Qty2bc+1sO3JuY22zTvqbU//6WLctnHb1bDt2Vcabes219uef+1S3Lb6nSth25/eaLSNra+3vTJ/Jm5btmY2bHttYaNt8Xi97c0ll+O2BSsuh23617Rputo0v2nTetSm9Zo2bU9t2r5p0/tSm96nadP7V5s+j2nT51SbPrdp0+9Dbfr9mDb93tSm36Np0+9Xbfp9mzb9P6hN/y+mTf9fatP/n2nT/6va9P9s2vT/rzb1B9OmfqI29RvTpv6kNvUv06Z+pzb1Q9Om/qk29VfTpn6sNvVr06b+rjYxbWLaAKAVCmkAAEYMBQPQjLwAkAeFNAAAI4aCAWhGXgDIg0IaAAAAAIAcKKQBAAAAAMiBQhoAgBFjbsgEoIG8AJAHhTQAACOGa0GBZuQFgDz6VkjPXv8odv3WneDWR3eDj+7cC+7c/RTomPqQ+pL6lN3HfH0QvWf/H5DnKAp53r0iC4bJmRvBxKUbwdTMzWD38elg+faTwUtrDgbPLN8d/H4pkJ/6jvqQ+pL6lPqW+pj6mq8PFoVCOp39t5bxHEUZ9vG81EJ69nrdjQ8/Du7e+yz48suvAoLoZaiPqa+pz5n+5+ubKA55TpQd5Hl+5vnPnZq+fDO4MHsr2HJ4Mpjz5tbg+48sCf7lP/0Z6Bn1MfU19Tn1PfVBX9/sRrd5UTWM50TZMWzjeSmFtPl2Qd88fPXV19GviiDKDfU99cFh+7ZrWJDnxCAEed5bOiKoo4M6YvjdhxZ6Cx6g19T31AfVF3t9lHoUMZ4TgxDDMJ6XUkjrl/DNN99EvxaC6G+oL6pP+voqOkeeE4MU5Hm2Bx6Z8rZnmbl6Oyxevn3/PG9xA5RNfVF9Un3T12fz6iQvqojxnBikGOTxvGeF9JXrH4WH5TkNhBjUUN9UH1Vf9fVhtEaeE4Me5LlfnmtBz164Hp5Oy+nbGFTqm+qj6qu+PtyuUb5GmvGcGPQYxPG8J4W0OR2EIIYh1FcH9ZSRQUaeE8MU5HlSuwWDbvCkI36+4gUYNOqr6rO+vtyOUS2kGc+JYYpBGs8LL6R1Ufgnn34efVSCGI5Qnx30GxoMEvKcGMYgzxuOnWp9oybd0OnBVzd5CxZgUKnPqu/6+nQr7eRF1TCeE8MYgzKeF1pI6wPd++yL6CMSxHCF+i472a2R58QwB3neHhUi9724wVuoAINOfbfTYnqUMJ4TwxyDMJ4XVkjrEDvfaBHDHvVvuDj9Mw15TlQhyPPbwZynpr3tolNjORKNYac+nPc076y8qBrGc6IK0e/xvJBCWhd9c20FUZVQX+bGRM3Ic6JKMep5nnYtqG7WxDXRqAr15Tw3IBuVa6QZz4kqRT/H80IKad1BjSCqFOrTvr4+yshzomoxynmeVjDozse+ggQYVurTvr7uMyqFNOM5UbXo13heSCHNrfKJqoX6tK+vjzLynKhajHKe7znUfJROz+LlEVeoGvXpdp8z7cuLKmI8J6oW/RrPuyqkdU46p4YQVQ317VG/jlLIc6LKQZ7XTc7wmCtUl/q2+riv748SxnOiytGP8bzrQvqbb76J3j5BVCvUt9nBJs+Jaseo5vmTcy8kXk/N3Ay+ff88bxECDDv1bfVxu8/7uHlRNYznRJWjH+N5x4W0bjfOt1pE1aP+7ZY/B0YBeU6MQoxintvXgk5fvlmBo9FngvPR/6cdd87u88ybw4rZ4E4762l3vhyePZt+R+Xze/3LIJ36uPq6nQeuKl8jXY3x/Gjw4n2PBf/geHjj1Wh6h3FtQ/BwO+tpd74cMbtxbtPnMV58P5qJaDvKHs+7KqS/+urr6G0TRDVDfXzUdrBt5DkxCjGKeW4XDHre7ncfWugtPoZHVEhfPdNo23s7/P8tsrjtj+iz3ZsNnvVORzvUx1s9W7rqhfTwj+dRIT3vaPS6Fu8vCIvOIovb/kT02R7fEMxGLUT+KHs877iQ7vUd/3x/BPMgiKJilO/s2888n72V3PZdnndJ9DBGLc8377gW/9zrO3Ur1uw7652W5q/vez341fztwdtbT3inN/MU0jXj4b717WA8ep04ypsoTPcFB+5F7QqzHvdIc/TaRHxk2HNEur7tKOxtRQX++bONdWUX+55C2mzv6u36OqJp6Z8vecR+VI9ot7qDt50XVVPGeK6czRNf1Ioe/W14ZsXeqKVVeArpWhyepyO4C4LD0evEUd5EYXo1WPt41G6vxz3SHL0288VHhj1HpOvbjtjbigr8Fzc21pVd7HsKabO9eQvq64impX++5BH7UT2iXeZ43lEhrfPP7977LHq7vQklYye+/8jSMJkJoqhQXx/FayjLyHN7B8dlF9JXan8UH37rvegVQRQfo5rnugHTnDe3enOwKIo8hbQpopX375+/5p2nmb+QrheWnwcHVtRemwI2LCKT84dFryk87fkSBXJUbEfzJYp0p5BOFvDOe4vWn9i2Vew3Sy+kE22pny/5vhO/E7PsiFBfH8WbjpU1nitv2w1TRH9vzuLg759ZHbW2Cn8hXS8s5wZrr9VemAI2LCKT84dFryk87fkSBXJUbEfzJYp0p5BOFvDOe4vWn9i2Vew3R3ohnWhL/XzJ9534nYxYlDmed1xID+qt85XESmaCKDJ0a44van3+Lx/f8+bEMDl8/JS33VVGnts7OC5TSF/58G74bfV3fvpGmN+PLtwRLNhyPPiYI9REwTFKef78a5fCfycu3ej5I68UeQppU0TvP3M5+B9PjHnnada6kHYL1kbxXF/We1TYV0gr7AK2ab7m9+Ir6M32Whe26YW0/Z5TP587b/R6FI9K/1XNv77v9eC/P748mDu+LzUvhsXWXbu87a6yxvM8hbQpov/P8+uDszO3otZW0bqQdgvWRvFcX9Z7VNhXSGs7dgGrSMzX/F58Bb3ZXuvCNr2Qtt9z6udz541ej+pR6bLG844L6UENCmmi16HEvHbzL97cGHQbtm4J3lg8P1iyaqzljnYZeW7v4LhMIX2mNsDe96d3wp0ftX/rJ68F/+7B+cEr69O/1yWIbqPqeW6uBdWdjN3cK5oirZA+Onk1ZF7/esH28DIOHYlWEf1XtXy350/XqpB2Tt2Oo1Z4eorSmDvNHE02YYpbez7P+nyFtClkiymkMz6f+56j8H7eEaOC+tDpmaa8GAaLxpYFry98M8z1VgV1WeN5WiH9oz+sCZlYtfdM8G8feDM8Eq0iuv07ibcqpJ1Tt2O1wtNTlMbhTjNHkw1T3NrzedbnK6RNIVtMIZ3x+dz3HPF+3hGLXo7nHRXS12/pz3d/whTK127fjVqSka+Q9idksVHGNohexNSdy8FTx+YHf7t1Tkg/q02hpPTlxqDbvndvOPDKW0sXZu5ol5HnZmfGxz61e+8HM8F/nLM4/Fm5/08vbIhftx3OINPet7TJU6XcgTEc5FJyu/6tscMeIFtFbVsMgL2PUc1zUzDsPj7tzb8iKexC2uSuxmtTSJvTuVVET175MMeRaMNfSNtHad0jtg3+ZUOpRXa0jJmWmK95fb0vpDM+X+pnGB3f+eULwfcW/Cb4b+88FNLPatM0FdNuXgyDlevXxnkuWQV1WeO5XUhrDFebct8U0uZ0bhXRf/P4ivCL8nzh36e2j9K6R2wbkbE/7imK6xEtY6Yl5mteX+8L6YzPl/oZRif6MZ53VEjf+shfxJYRK3efCf7Nz94M/sP/WxAOvm5QSBNFhBJPSfg3m3+RoDaTlMN4+qe9g22k7WiXkefK1TR2Ia1QMa3QF9dju08Hjy3cEb5uL+p5WB9gzDe6voHWDaeQTkR2bjcPdp5BMi0YEEuJUc7z1e9cCf9dvv2kN/+KpLALaY3fZudar91rovMX0eIpht0CMlHAJudPFKH2clkFsr0+Z1vJojZjudrrogrp9M832tdIq2BW8ezmudpMMW1O8zZ5MQzcQtrwFdRljed2IX377qfha7Ov7l4Tnb+IVnjGXXe8TBSwyfkT47K9XGIdzjbs9TnbSo7zGcvVoqhCOv3zJfdXWm+vWtGv8byjQvqjO97zh0qLzUfOhwmrG4u5xXTRhXQ9SSLODnBimr3DHHX8sH3egpbbIAYv9C2Wm4yGpimG8WiVbwfbcHe0y8hz5Woat5DuKkxO+opYM1CZu2Im5ks7Im2KcXf+RjQX0rXwDqxmPWbAi/4uGdHfjtS/N0THQZ7fDl5ac9Cbf0VS2IW0ftYXYea1KaLzXRPtigpHJxKFZk29iIzCLkzdU6NN0esWrNHrONLmq6kX01GY+aRXhXRN+udL/n7MtkeBjj77clw0TfPYR6WHRVohbdgFdVnjuV1I62cd/DJhiuh810S74YyPkUShWYvE2JoYn52x2+ybuwWrvR+fNV8tEmOzva/fq0K6FumfL/n7MdsehejXeN5RIV3WA91VMOsUMB/zB1LfbNuneRdZSCd3hJ15lSCm85qEC6eZJI2WixIpbRvEYIbvWy1D0xS6osc3eFWBdsTLyHMVy2m++vrrmm+CA7Wd6//7583Bf310WfC/awPwuv3ngk8//zJaQ5uRGBSdItRMM/kc5Wx94EorpPUiz9+PKOxBMfzZ+fvi/E2JB8/UvzdENzHKef7LJ94L8/yZ5bvj8bRXFHYhbb+Or4meqh+JPlb7V1+Qm3mBbvmORhuapnl0Dw6TF26uDLuyxnP9Hu1C2n7tXhP9v2r/2tdME0S30e547qtru0EhnbpD2jzN921S0zdR7g5wi51tYjBjlHewpayBNytURC/ceiL46/vnxfku/+qfXw+eWLIr+PiedeSljUge/bVytCln7eK5h4V0FN5vlj3zKVK/+SY6ilHOc10L2q9CWhLXRM82rolWEU0hjSLlKaSVF26uDLt+FdIK95pocyTaXDNNEEVFu+O5r67tBqd2p+2Qpu7w1gvpeOc3XNZaD4V0JYJTPvuf5zrN89tOEW1op2fVnrPRnDkiys96MRp9KdaUsyUV0tG6vNtx3lPq3xuiqyg6zy9cvh6cnrwQHD35QbDn0OFgy65dwbrN7waLxpbGebZo5bLgvT17g7Pne/eYnXby3NxUqR+ndieuiY6ORKtdO9ZmDAeKkufU7n7ebEx/E9ZueqcpZ3UK9859+4P9R47V/racDk6dmwompi8HY+vXNM1rC0/t3tm/U7vda6JNEa39drUTRJHRr/12bjaWukPaPK1RSDs7vfa8Zkc9Xo6d3mGMUb4JkVFGnus6Sd04zDz5Yu/p+g3FFA+8uineEfL526fGoznzhylMw4K4zELaWj45PauQzvh7Q3QVZeX5xdkb4U7wqo3r47zTTu6WnTu983ernTxfPD4b/tuPm42ZItpcE61p+ltgdq7tZdvnv0baf5fuQZO8GZh/nrzSfh+1yLsd55ruYZPnZmMmL8p28NjxYMHyxWGuzq/lqr6A23v4SHB+5pp3fsm82VhUQBv9uNmYKaLNNdGapn34fPvpbkTjXxNnrB3IcMfygsLUHY76fkqXkdjnyff+D8/Luh68+OjXfntHhfSoPP4quaObnNeeljxaFHU0s5w56sRO79CFEk/fYikJRT+bZBzGo9Fi72CnFdBGGXmuyzTue2ljcOOjT+LXppj+L48uC3M5jY5WtxuJwjl+nTwi7east4jtqpBOrivxHszfCbMdp7hP/3tDdBtl5/mJM5PB5h074p3m5WtWBSfPTnrn7VSePC/78VfuNdF6TrSZri/I7Uu38okKR/umXt620WNuQDZKNxhzqWDW0WcVz6KfTRHdzxuNXbpyK9i0vXFd9sZtW4OJC5e987oG+fFXvudEm+m6m7fug9JZ+Mbd7LG48pF2MCCx/9FhJPZ52o/E/k2J0Y/99o4K6TIe7N5pdFRIu6xvW+o7sBE7SRPfAM0NHk58S2Otl7t2Vy6UjL16sHuvbdi6JRxss3asjTLy/OV1h4N//+D84Fu1nWnlrU7Zvu9P74SPxfjxc+vCtjT/+VdLorW0F4lcrokHhngQ2mDlrcnXrELaXmfzgOVuL2T9bUn+/Yn+hsTrMQNhtEzm3xuiF9HrPD93fiYY37Au3gnesa9+RKwI7eS5OfI2NXPTm19FUmw4OBmOz+410cXxFc3NR3pT72pt34376u3kuswR2Vp7GGF78oivXaQmtuEcEU/cyTvevueItHN38Hj98d26Zxvbb/FFQXMhbbZX+5zhGb/1O4Yn37d1F3H7iHQH2x9kKqIPnZ5pyosyXLpyM1i+Zjz+G3Dg6Pve+dIsGlvWsoA2yhjP9ft86I2t4Zdi7jXRxYWvaHbG6VrEXzibMTRqT+y7u/vnZnyvtdenqz1ZJ9gFZWIbzj5AYvyPt9/8PpO1RLv7JU7E81p/XOx9lS4+l1mmPt3z/qN11zkHBiL2uvsVvRzPOy6kv6y9qUGMfIU0QbQXOvNYiTiMp3O7WhXQRhl5/nFtp3rBluPBo2/vCHP3Oz99I3h6xd7wtM+1+8+FNxazd3qMb/3za8GrG45Ea+kyfIMQMZLRjzzfuHVrvCOtwto3Tyda5bm5FnTi0o3g+48s8eZZURTKafea6GK1cUS61XOWTdEbzecu11h3svCtF6BR4Zl4LFXG9hPzOYV0Ypp//d5ta1mP1ELaXi5cr/Pca/N+PO87z/YHyV/V6AtbFdDmdG5fXpRBX56Z3G/3KLSrVQFtlDGe6/f7vYcXNV0TXWz4CmmnzS4iE9PMF9RR0WsKPme5xrqThWPiKGtivyFj+4n5nELU2ffwrd+7bTd8+zD2e+jgc5l5zRcC3kI6mtc3LfP9lhRljecdF9J3731Wf6c9Cu1Ud0I3IFMyE0RRob6uPu/LhSorI8/dePit98KdbYUecaW7c2unx94RUhH905ffDa7drp8O3nX4BiFi5KKfeb7rwMF4h1p88xTNFAyTMzeCOW9uTeRY0Uxox+b4+evhEas8fOtsFhV/bsTFrzka3DhCHL5WQWiKw3jerAK8xil0zetEoVkL9xnPcUFei0ZRKxmFeTjdej/ue3Xfm0dqIW0KZc+8YWQV0jm2P0jU19Xn3Xwwyiqkz0xdDN5a+naY7+9/cNY7T5HKGM/t3/MPn17l3UfP0l4kj6TG4iLRFH+NI8ThaxV4TpGYXYDXwt03sAtHsy57uglTuJp542hVbFrvx32v7nuzw32fZjvOFwbtfK6m95RY1vf+k0fiTfS7kC5zPO+okJYb0c5ur8JOyE4QRFGhvu7LgVHQ6zx3Q6d92qFHXOnu3D94cmV4TfR/+tWS4M8bjgTXa0W0uUEZQRQR/c5z3bHXFNJj69Z45ynSawsbp7NuOTzpHUeL0m341tksWfyaU6gbxaw5CutGrbB2C+NWhbRVENthlk+cvl2LrPdQX2eysHULfl8hHa+zqELafKawzZlub6OD7Q8S9XU7D1x2XvSSroVWrusu3b7pvVCN/fZk8WuOmDYXka5awddUcLYopK2C2GaWT5y+bbX73oOvEHULfl8hHa+zjULa3l56Mdx47dK28hTSze+/Ef0upMsczzsupGev3w6++urr6C0TRDVDfVx93ZcDo4A8J0YhBiXPp2euxcX0tt27vfP0woXZW8F3H1ro3bkdHk7xa15bR3abC9SIe5S1VSHdVHinMMWp59TnxpFfvZ9k4drOEemiC+nk76aahbT6uPq6LwfKdOyDM2GOv71iSXD+0lXvPL1QjfHcKX7Na6toSy3wTMHpLptWSDcV3ikRF6bNhWO9oDTvx3dE116mu0I69X3m+Fzm/bpFt6+QziqW+1lIlz2ed1VIl/GAd4LoZ6iPD8IOdr+Q58QoxCDl+cmzU3ExrUdm+eYpwup3rsQ/T1++GTyzfLe3+BgebiFtFavegtiePyoco0IyeznJKHydee0CNVkg2+twClenWE0s16NC2vcZqlZIq4+rr9t54LLzolfe27MnzO/dBw95p/dKNcZzt5C2ilVvQWzPb44U14vs7OUUGYWjM69dvCeLSHsdyfW5BW1iuV4W0lmfK1qX+Z2Yo+71ZbPff/rvoNwoezzvuJAWnX+uW9oTRBVDfbtf10wOEvKcqHIMYp7r7r2mmD568rR3nm6514Lq7t26fMJXgAyH5kK6USA3Cj1TVIZhFZKmQAwj7a7diWIx2l4U9rTENmphT0ue9u0rqqN57fcTz9doL7qQTn6ez4M74e8tOkJdgUJafVt93O7zPmVcIz22bnWY2x9MTHun99Lwj+fNhXRc4FnFYr2Qq7fFhZ/CFIrhOlLu2p0oVqPtRexpiW0400wBWucrqqOw349deLrFcaGFtCL9c5n5w/ZO7tqtsD5X6vvqQfRjPO+6kOZoFVHVqH+rRSFNnhNVjkHN823RUas3l7wdnDo35Z2nG27BoBswDf9R6U5lHxHG8FPfzrrJmNHrQnrywmyY13p0lW96r432eJ59RJUY/ujHeN5VIW0M6qOwCKLTUJ/29fVRRp4TVYtBz/N1m98Nd7qXrl4ZTF4s9pTT51+71NQ2c/V2zx+FNbCiI6txJI7WYpipT6tvu/3dx5cXRTJnm+hmY77pZRnZ8TxxBNUqqomhj36N54UU0mXf2Zcgeh39voPvICLPiarFoOf5VK14XlYrorXjXdbdfXt9B2+gbK3u1F2mdZvqX46poPZNLwvjOVG16Nd4XkghfYVTP4kKhfqy+rSvr48y8pyoUgxLnp88OxnMX7ow3PnesmuXd55ObN5xzdt+9sL1ET7FG1Wjvqw+7evrPml5UZQV0fXRymvf9LIwnhNVin6O54UU0qJz0j9xngFLEMMW6sODeL3koCDPiSrEsOX5ofdPhjvfsvfwEe88eWVdCzpx6Ubw4KubvIUJMCzUh9WXfX08Ta+vkTZnmJyevOCdXibGc6IK0e/xvLBCWnS78XuffRF9NIIYrlDfHZRH4Awy8pwY5hjWPN914GC4Az5v0Vvhc2h98+TRqmDQ83bve3GDt0ABBp36bifPjO51Ib145fIwj8+dn/FOLxvjOTHMMQjjeaGFtOgD8Q0XMWxR/0bL36fRjDwnhjGGPc8379wZ7oQvHl8enJ/p7hTUJ+e2PiKmQoQj0xg26rOdFNHSTl504+0VS8Ic1v0PfNP7gfGcGMYYlPG88EJadIiday+IYQn11WE6zXNQkOfEMEVV8nz1OxvCHfGiTvFuRafGcs00hoX6at7Tucv0VnS/gwuX279uuwyM58QwxSCN5z0ppEUXfesOajwyhxjUUN9UHx2GGw4NKvKcGPSoWp7vjx6fM75hnXd6u/Ycan9HXjdr0p2PR/bRWBh46pvqo3luLOaTJy86MW/R/DB/Z652dsS8lxjPiUGPQRzPe1ZI2/TNwTfffBP9Ggiiv6G+qD7p66voHHlODFJUOc8XRqeHnpm66J3ejk6uBdWzeHXE79v3z/MWM0DZ1BfVJ9t9TnQrvbxG+vylq2HeLli+2Dt9kDCeE4MUgzyel1JI6/C7OW3kq6++jn4tBFFuqO+pD5r+6Our6Bx5TgxCjEKeb4muld62e7d3ejs6LRgmZ24EUzM3w+Lluw8t9BY3QK+p76kPqi+qT/r6aid6WUgfP30uzNtVG9d7pw8SxnNiEGIYxvNSCmlDF4WLDsvfvfcZp48QPQ/1MfU19TnT/3x9E8Uhz4myY9Ty/Nz0TLhDvnBsqXd6O+Y8Ne1tb9f05ZvhDZ10Ou2cN7dy2jd6Tn1MfU19Tn1PfdDXN7vRbV5k2XPwcJi3+iLMN30QMZ4TZcewjeelFtI28+2CXL91J7j10d3gozv3wm8egE6pD6kvqU/ZfczXB9F79v8BeY6ikOe345uOnTgz4Z1eJh0R1A2edHRw9/HpYPn2k8FLaw6GRwx/vxTIT31HfUh9SX1KfUt9rMijz2XbtP29MGcPHH3fO33Q2X9rGc9RlGEfz/tWSAMAgM6Y50ofOHbcO72VY6eKP5oHDLte5oVuEKic/WCid0e9AZSLQhoAgCGjo1raKd+xb793eiu9vBYUGFa9zIuFK5YGby15O5i5+qF3OoDhQyENAMCQOXbqTFhIv7v9Pe/0ViikgWa9youjJ0+H+Tq2bo13OoDhRCGNdKfGg58/Oh4cM693zAv+4b7H6l7y3S32XLDo0Wj6fc8Fi06pbXfwjFkmc1kzr1muxtrez1fYg1ttPr0vvT97vb75nOmZ27Y/KzAqSstzZx4zvVWeZ84Tsd9zzTM7nOmx6uT5qXPnwx1zXSvtm97KA49MedtRUW6e2+OnNyfsPLfmsZfz/n2w83xesMm0t5Hnx1Y8F8/jXXfLbRud53mv8mLNuxvDfN17+Ih3OlCIQsbzmjy5Zi8X0jrdNisnW43nkU0vZY3l0nmeF4lCGn6mo8edVIlhBkVfktTUlomTQst7km/TS9bAmmCS2d4x929v00uebWuel7ITKn3bkdofjmcykhqonDLz3B3gQ+3kefo8hnbAswbkhIrk+cSFy+GO+dJVY97pQCwzz+v507zDaued4eZo846uva5GXraR587fh+Z1t952wgDluTkarVy9dOWWdx6ga4WN5+3mmuaz99tFue62WXnexnjeWG+rQrpmAPKcQhoetU68opZM3h3faLrp/GnzeHawE4O1s1x9wN1tJZW2YSeb+bmWhJ7t+YvrhuSOQiNJpbEDbm8HqLpafy8zz80gbw+ymm4tn9jxNst55nEHVw308brj91ntPL84ezPcOX9r6dve6a2cm2aHfjR48jzMqfFGftjt9s8mp2rqOeeMvyb/7eUsjXy2c87+2T+em2WTed687ca6G++z2zzvRV6Yo9G7DxzyTge658lzd3rb43l7eV7Pb3u/XW3jtZyzthXOm288v7yj9reptmyygC82z4tEIY10vmQzO8NWIiSZzm4nkaQPmI3k9SRfmDRWWzx4mnlqnMRs5mw7Y/5WBTlQOSXleWOnuvbabFP/Wke9NHCG89h57uRrYj2h5N+NePoI5LmKaO2gT1++7p2ehWukR4yd52HeeXLGnj8el/VaY7HyVP8ml/P/jTBjt72Da9qs3PON5zX+9Tp/W8z7KzjPi84LczR60cplwYUO8hTIxc5zI/d43kaex38f3P12cdrsPHfy1fu3J5IopAvO8yJRSCOdLyGNlAGwQYlkDaIZ8yeOJpnBV9tOnP4RJZRnPUrEpm+0bJ5l7G3a05LfgAEjoKQ8T9JAXV8uHKRNLtYG36Y89wy8rfLdDPpVz3OdKqqd9E4ep0MhPWLsPHdyys4ZP2vHWPNa+Zqd71Hxm2M8V27619lcSJv5iszzovPCHI3u9O76QC5Fject8tzOuTprP8D+e6HX9nZzjOdu/haZ50WikEa6REI2dnw1zfctUrItOX973xhZyef8MYgTpekPgZX4KbK33cn7BCqkpDxPDHYapMPBNGX5RJ7b8zgDdNN0Zzup81Qjz3WjMe2kHz5+yjs9yz8+OOltR0Ul8jyZR8qZzDyPl00up3ncXEvkn1murfFc6/blrtH8nnuR50XmxeadO8P8XDy+PJi6dNU7D1CoQsbz1nnekJzX25ZrPG/w57gM1nhOIY10zuAX7vyab59Me2IeJUXjG6NGAqi90em96w4lk0rJG28v/garlkCJ5dzXNfFOul6nbNustyY5kDvzAlVXWp5r8DPLNeaz87yxLievrfcU56ud5/Z7Nm0jkOd69JV21HcdOOidDsTcPLfzo2WeJ3eKm3IqNc9zjOd2DkfCvwd2ntvvecDzXDmp3Jy36K3g2AdnvPMAhUvkYo2dVy3z3BqDW+a5oeXdQtZtyzmeR5q+lIuWSSzX5zwXCmkMnZ59+1RL5EZyAugn8rw1nS6qnfVN27d7pwODrop5fuj9k2FeCo+7Aqo9nlNIYwg5324VohfrBNA58ryVA8eOhzvrnTxLmmukMRgGK8+7zYuTZyeD+UsXhnm5Zdcu7zzA6KnueE4hDQDAEDpxZiLcYX9j8Xzv9CwU0kCzbvJi6uKVYNnqlWFOrt30jnceANVCIQ0AwJBaOLY03HE/dirfdZgqGAzT9qP7J+K2i7Mfhm0//lmjbepSvU03ZDJt5rm7P/lFo+30RL3tpw9PxW0nztwM2x54pNF27FS97eePnY/bDh2/EbY99NtG2/6j9bY5T03HbXsO1R8l9OjTjbYd++ttjz97IW7btuda2Pbk3Ebb5h31tqf/dDFu27itfjOoZ19ptK3bXG97/rVLcRuqT//nnVi3+d0wF5fWiunJWlHtmwdAtVBIAwAwpN7bsyfced+8Y4d3OoqjIuuLL79ChXVaSG+L8vDNJW8Hp85NeecBUD0U0gAADCnttGsHftHYMu90FIdCuvo6KaQPHH0/zEE5evK0dx4A1UQhDQDAEFuxdlW4E3/kxAfe6SgGhXT15S2kT56tf5El+48c884DoLoopAEAGGLb9+4Nd+QXjy/3TkcxKKSrL08hPT1zLS6it+1OPgMXwGigkAYAYMiZuwWv37LJOx3do5CuvnYL6bPnL8VF9Ni6Nd55AFQfhTQAAEPuyMkP4h17PRbLNw+6QyFdfe0U0rsOHIxzTXzzABgNFNIAAFTA+i2b4537iQuXvfOgc3kL6XMTE8HK8VXBH559NvjVI4+E9LPazp7rXVHer+2eOXs2WL58RbitR37965B+VtvpM2eCz7/40rtct/R5x1aOB8/84Q/hZ/31o48Gz/7xj2Fb3s/bqpDeuHVrnGO6N4FvHgCjg0IaAICKMDv5orsJ++ZBZ9otpGevXA1ee+314Lnnnw927todvr736Wch/aw2TdM8eu1bRyf6ud1XXn01mPvCC8Gevfuatqu2F158MdzulavXvOvohNZlPu/effvD1599/kXwyb1Pw+2qTe8pz+dNK6TPnZ8Jxjesi3Nr047t3vkAjBYKaQAAKkTPlDY7/Bu3beXodEHaKaQnJiaDJ558Miwes47AatruPXuDx3/723AZ3zx59Hu7KlpbbXf/gYPBk089FUxNnffOk4e2q3W1s13No/fYzud1C+kTZybDfFqwfHGYT2+vWBIcOHY8MQ+A0UUhDQBAxeh5tvOXLQx3/ucvXRis2/xusPfwkeD8zDXv/GitVSGto54q2HSKs2+6j+bVMu0eMfXp13Z1BDjvdnWqdVHbdU/bnj9/QYI9Tad/t7Nd/R9fnL0RPspq1cb18RdSsnbTO+FNxnx9A8BoopAGAKCCdCR67aZ3E8WAjG9YG+zctz8sFlRwnzo3FUxMX64VEDe960FdViGtI58vv/JKeLTXNz2LltGyWUdW0/RzuzpletfuPd7pWbSMtuub1g6dRm5/XhXNixcvSRTPvoJaR+u1bNbn1f/xorGlca7oSLSOSOt50b4+AWC0UUgDAFBhur5TdxpeuX5toqBGPlmFtI7K6lpdu0j75cMPJ+ZxmelaRsvmObJrmO0eOHgoeOw3vwnXqX8PHjqcmE+v3endbFenST8/d25TUfrSyy+HN/o6fuJEot2mZXTtsm5A5puexfd7NsWyXTzbbWY+LaP3nPV59X+s/+uxdauDPbXf0flLV705BQBCIQ0AwIiYungl2HvoSLBl585gw9YtweqNG4Lla8aDhWNLgzeXLGgqHtGQVUjrDtG6mZfbnlZMu+1aVuuw29phtqvi2NzIS//qtT1f2vSOtzu2MvXzfnD6dFhMz5v3Ruqp1Do6vHTpMu+0LLrzuLtdu1h2udN0NFzv3W6z6f/4+On2niUNABTSAAAALWQV0nrMU1rR6BbNvuJay2odbnsrZrtuofybxx8Pt/N3f/fD8N//+YMfNE3Xz51uV4Wy7/Oaz/bpZ58H23fsDH77xBPB6jVrgzsf303Mp/fQyXZ1NHrm8myiLU8hrfesx2TZbTb9H/v+7wHAh0IaAACghaxCWs8v1uOefNPEFJi+IlpUeGodvmlZzHZ1qrbuxK31619zarfZnp7l7Jve6Xb1rGbf53U/30d/uROMr1od3ujr0OEjcbuW1XOm7XnboS8M7n5yL9FmimX9a7OnGVo26/NSSAPIg0IaAACghaxCWgWeilLfNCOtiJZWBV6aVtvN2qZ0ut12C2lDp2NrGfO600Ja6/j47ieJNrdYtrnTWn1xQCENIA8KaQAAgBayCum0U50NU2CmFZqXZ69knnKcpt3t+m42pvait+t+vpu3PgyWLFkaPPW73wVHjh6L27Vsp6eUp53arX9t9jSj1XYppAHkQSENAADQQlYhvWzZcu/Nt8QtLn3FtJbVOtz2VrK2K2ZbKp7ta6T1Wj93ut0VK8a8j74y29OR363b3gtPI9+w8Z2m07H1+Cqdbm63taPbm41p2aybq1FIA8iDQhoAAKCFrEJaj3LyPQ7KVzS77e08lilN2nYNbUd8NxvrZrtnz50LH2Hl+7wnT50Kj/ouWPB2cPXa9cR00TIvvPhiR4+/0nbTHn/lY09r5/NSSAPIg0IaAACghaxCWkXay6+8Eh5pNW1pRbRhputRUFrWLUrb4duuj+9mZN1sV17985+bjg6/8uqrYbGqR2DZ7ba9+/YHr78+r6vt2p9XxXIWM58+r95f1nYppAHkQSENAADQQlYhLbr+Vnen1lFT33QfHR3VMlnXObfSr+3qyLbWkeeI9uTkVHi9tDk63gkt++RTT+Xa7rmJiba2SyENIA8KaQAAgBZaFdIyMTEZFpc66pp15FPTdFRVR4e1jG+ePPq13enpC2FR2852dfRa71HL+ObJQwW5tqvP8tnnX3jnEW1XR6J/9/vfB1NT573z2CikAeRBIQ0AANBCO4W06CivTpnWtbwqHnUUVDff0g23dJdstWma5unmiLCrX9vVduztaluf3Ps0pO2o2NX11Dqtusjt6vprnSKu7W7fsTNctx6rJfrZfF7N47tW24dCGkAeFNIAAAAttFtIi46E6tRj3SFaj5fSs4sffeyx4I/PPRe2aVrWEdxO9XO7OsI9NrYyfESVnvcs+ll3585zGnZeOm1bd/NW0ay7kYt+Vpum+ZZJQyENIA8KaQAAgBbyFNIYThTSAPKgkAYAAGiBQrr6KKQB5EEhDQAA0AKFdPVRSAPIg0IaAACgBQrp6qOQBpAHhTQAAEALFNLVRyENIA8KaQAAgBYopKuPQhpAHhTSAAAALajIQvX5/u8BwIdCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAMiBQhoAAAAAgBwopAEAAAAAyIFCGgAAAACAHCikAQAAAADIgUIaAAAAAIAcKKQBAAAAAGjb7eD/AxbBFaUo/FVvAAAAAElFTkSuQmCC" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/regression/meta/glm_train.json b/function/python/brightics/function/regression/meta/glm_train.json index f8bee3b55..726e8cdbc 100644 --- a/function/python/brightics/function/regression/meta/glm_train.json +++ b/function/python/brightics/function/regression/meta/glm_train.json @@ -98,7 +98,7 @@ "default": false }, { - "label": "Gammma", + "label": "Gamma", "value": "gamma", "default": false }, diff --git a/function/python/brightics/function/regression/meta/isotonic_regression_predict.json b/function/python/brightics/function/regression/meta/isotonic_regression_predict.json index 073e443ed..8b6885550 100644 --- a/function/python/brightics/function/regression/meta/isotonic_regression_predict.json +++ b/function/python/brightics/function/regression/meta/isotonic_regression_predict.json @@ -1563,4 +1563,4 @@ "base64": "data:image/png;base64,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" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/regression/meta/mlp_regression_predict.json b/function/python/brightics/function/regression/meta/mlp_regression_predict.json index 7ef6fd370..93f78e40d 100644 --- a/function/python/brightics/function/regression/meta/mlp_regression_predict.json +++ b/function/python/brightics/function/regression/meta/mlp_regression_predict.json @@ -53,10 +53,13 @@ ], "summary": "This function predicts data using a MLP Regression model." }, - "md": "# MLP Regression Predict\nThis function predicts data using a MLP Regression model.\n\n## Description\nMLP stands for Multi-layer Perceptron which is a neural network model with supervised learning. Given a set of features X(x1, x2, ..., xn) and a target y, it can learn a non-linear function approximator for either classification or regression. MLP consists of at least three layers of nodes: an input layer, a hidden layer and an output layer. Except for the input nodes, each node is a neuron that uses a nonlinear activation function. It is different from logistic regression, in that between the input and the output layer, there can be one or more non-linear layers, called hidden layers.\n \nThe advantages of MLP are capability to learn non-linear models and capability to learn models in real-time(online learnin) using `partial_fit`. On the other hand, the disadvantages of MLP includes 1) MLP with hidden layers have a non-convex loss function where there exists more than one local minimum. Therefore differnet random weight initializations can lead to different validation accuracy, 2) MLP requires tuning a number of hyperparameters such as the number of hidden neurons, lyers, and iterations, 3) MLP is sensitive to feature scaling. \n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain `Feature Columns` used in model training.\n2. **model***: (Model) Trained MLP Regression model. \n\n#### OUTPUT\n1. **out_table**: (Table) A table that contains input `table`'s columns and prediction column as `Prediction Column Name`.\n \n#### PARAMETER\n1. **Prediction Column Name**: (Column) A name of prediction column.\n\n\n### Python\n#### USAGE\n\n```\nmlp_regression_predict(table, model, prediction_col='prediction')\n```\n\n#### INPUT\n1. **table***: (Table)\nData in a Table. It must contain `feature_cols` used in model training.\n2. **model***: (Model) Trained MLP Regression model. \n#### OUTPUT\n1. **out_table**: (Table) A table that contains input `table`'s columns and prediction column as `prediction_col`.\n\n## PARAMETER\n1. **prediction_col**: A name of prediction column.\n\t* Type: _str_\n\t* Default value: prediction\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used to train and predict a MLP Regression. The generated model is afterward applied to a test dataset to predict the value of _petal\\_width_ by using MLP Regression Predict function. The parameter settings used in the function are shown below. \n\n++Parameters++\n1. **Prediction Column Name**: prediction\n\n\n### Python\n\n```\nfrom brightics.function.regression import mlp_regression_predict\ninput_table = inputs[1]\ninput_model = models[0]\nresult = mlp_regression_predict(table=input_table, model=input_model, prediction_col='prediction')\noutput = result['out_table']\n```\nIn this python script, trained MLP Regression model is applied to a test dataset to predict the value of _petal\\_width_ by using MLP Regression Predict function.\n", + "md": { + "en": "# MLP Regression Predict\nThis function predicts data using a MLP Regression model.\n\n## Description\nMLP stands for Multi-layer Perceptron which is a neural network model with supervised learning. Given a set of features X(x1, x2, ..., xn) and a target y, it can learn a non-linear function approximator for either classification or regression. MLP consists of at least three layers of nodes: an input layer, a hidden layer and an output layer. Except for the input nodes, each node is a neuron that uses a nonlinear activation function. It is different from logistic regression, in that between the input and the output layer, there can be one or more non-linear layers, called hidden layers.\n \nThe advantages of MLP are capability to learn non-linear models and capability to learn models in real-time(online learnin) using `partial_fit`. On the other hand, the disadvantages of MLP includes 1) MLP with hidden layers have a non-convex loss function where there exists more than one local minimum. Therefore differnet random weight initializations can lead to different validation accuracy, 2) MLP requires tuning a number of hyperparameters such as the number of hidden neurons, lyers, and iterations, 3) MLP is sensitive to feature scaling. \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) \n2. **model***: (Model) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **Prediction Column Name**: A name of prediction column.\n\n\n### Python\n#### USAGE\n\n```\nmlp_regression_predict(table = , model = , prediction_col = )\n```\n\n#### INPUT\n1. **table***: (Table) \n2. **model***: (Model) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **prediction_col**: A name of prediction column.\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n\n++Parameters++\n1. **Prediction Column Name**: \n\n\n\n### Python\n\n```\nfrom brightics.function.regression import mlp_regression_predict\nres = mlp_regression_predict(table = , model = , prediction_col = )\nres['out_table']\n```\n\n", + "kr": "" + }, "exampleModels": [ { - "fileName": "brightics.function.regression$mlp_regression.json", + "fileName": "mlp_regression.json", "label": "MLP REGESSION", "contents": { "type": "files", @@ -534,7 +537,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.regression$mlp_regression_train", + "func": "brightics.function.regression$mlp_regression_traintrain", "name": "brightics.function.regression$mlp_regression_train", "param": { "activation": "tanh", @@ -805,7 +808,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.regression$mlp_regression_predict", + "func": "brightics.function.regression$mlp_regression_predictedict", "name": "brightics.function.regression$mlp_regression_predict", "param": {}, "display": { @@ -1550,9 +1553,12 @@ ], "sampleImages": [ { - "fileName": "brightics.function.regression$mlp_regression_predict.png", - "label": "brightics.function.regression$mlp_regression_predict.png", - "base64": "data:image/png;base64,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" + "fileName": "mlp_regression.PNG", + "label": "mlp_regression.PNG", + "base64": "data:image/png;base64,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AAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIdLX4/8YxC5FyBT/5AAAAAElFTkSuQmCC", + "parameter": "1. **Prediction Column Name**: \n", + "index": 0 } - ] + ], + "scriptExamples": [] } diff --git a/function/python/brightics/function/regression/meta/mlp_regression_train.json b/function/python/brightics/function/regression/meta/mlp_regression_train.json index 11d823720..a9b0e5d1b 100644 --- a/function/python/brightics/function/regression/meta/mlp_regression_train.json +++ b/function/python/brightics/function/regression/meta/mlp_regression_train.json @@ -292,10 +292,13 @@ ], "summary": "This function trains a MLP Regression model which can learn non-linear models." }, - "md": "# MLP Regression Train\nThis function trains a MLP Regression model which can learn non-linear models.\n\n## Description\nMLP stands for Multi-layer Perceptron which is a neural network model with supervised learning. Given a set of features X(x1, x2, ..., xn) and a target y, it can learn a non-linear function approximator for either classification or regression. MLP consists of at least three layers of nodes: an input layer, a hidden layer and an output layer. Except for the input nodes, each node is a neuron that uses a nonlinear activation function. It is different from logistic regression, in that between the input and the output layer, there can be one or more non-linear layers, called hidden layers.\n \nThe advantages of MLP are capability to learn non-linear models and capability to learn models in real-time(online learning) using `partial_fit`. On the other hand, the disadvantages of MLP includes 1) MLP with hidden layers have a non-convex loss function where there exists more than one local minimum. Therefore differnet random weight initializations can lead to different validation accuracy, 2) MLP requires tuning a number of hyperparameters such as the number of hidden neurons, lyers, and iterations, 3) MLP is sensitive to feature scaling. \n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table** : (Table)\nTraining data in a Table. It must contain at least one column for labels. \n\n#### OUTPUT\n1. **model** : (Model) Trained MLP Regression model.\n\n\n#### PARAMETER\n1. **Feature Columns***: Feature Column names. Only values in numeric type are possible.\n\n2. **Label column***: The column designated for the labels of data. It should be numeric type as it is for a regression.\n\n3. **Hidden Layer Sizes**: The _i_ th element represents the number of neurons in the _i_ th hidden layer.\n\n4. **Activation Function**: Activation function for the hidden layer.\n * Available Options: `identity`, `logistic`, `tanh`, `relu`\n\n5. **Solver**: The solver for weight optimization.\n * Available Options: `lbfgs`, `sgd`, `adam`\n\n6. **Alpha**: L2 penalty (regularization term) parameter.\n\n7. **Batch Size Auto**: Batch Size Mode. When set to `True`, batch_size=min(200, n_samples).\n\t* Available Options: `True`, `False`\n\n8. **Batch Size**: Size of minibatches for stochastic optimizers. If the `solver` is `lbfgs`, the classifier will not use minibatch. \n\n9. **Learning Rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative.\n * Available Options: `constant`, `invscaling`, `adaptive`\n\n10. **Learning Rate Initial**: The initial `learning rate` used. It controls the step-size in updating the weights. Only used when `solver='sgd'` or `‘adam’`.\n\n11. **Max Iteration**: Maximum number of iterations. The `solver` iterates until convergence (determined by `Tolerance`) or this number of iterations. For stochastic solvers(‘sgd’, ‘adam’), note that this determines the number of epochs (how many times each data point will be used), not the number of gradient steps.\n\n12. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n13. **Tolerance**: Tolerance for the optimization. When the loss or score is not improving by at least tolerance for n_iter_no_change consecutive iterations, unless `learning_rate` is set to `'adaptive'`, convergence is considered to be reached and training stops.\n\n14. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nmlp_regression_train(table, feature_cols, label_col, hidden_layer_sizes=(100, ), activation='relu', solver='adam', alpha=0.0001, batch_size_auto=True, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, max_iter=200, random_state=None, tol=0.0001, group_by=None)\n```\n\n#### INPUT\n1. **table** : (Table) Training data in a Table. It must contain at least one column for labels. \n\n\n#### OUTPUT\n1. **model** : (Model) Trained MLP Regression model.\n\n#### PARAMETER\n1. **feature_cols***: Feature Column names. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **label_col***: The column designated for the labels of data. It should be numeric type as it is for a regression.\n\t* Type: *str*\n3. **hidden_layer_sizes**: The _i_ th element represents the number of neurons in the _i_ th hidden layer.\n\t* Type: *_tuple_(_int_)*\n4. **activation**: Activation function for the hidden layer.\n\t* Type: *str*\n\t* Default / Range: relu ( identity | logistic | tanhrelu | relu )\n5. **solver**: The solver for weight optimization\n\t* Type: *str*\n\t* Default / Range: adam ( lbfgs | sgdadam | adam )\n6. **alpha**: L2 penalty (regularization term) parameter\n\t* Type: *float*\n\t* Default / Range: 0.0001 (value>=0)\n7. **batch_size_auto**: Batch Size Mode. When set to `True`, batch_size=min(200, n_samples)\n\t* Type: *_bool_*\n\t* Default value: True \n8. **batch_size**: Size of minibatches for stochastic optimizers. If the `solver` is `lbfgs`, the classifier will not use minibatch. \n\t* Type: *str* or *int*\n * Default / Range: auto (value>0)\n9. **learning_rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative.\n\t* Type: *str*\n\t* Default / Range: constant ( constant | invscaling | adaptive )\n10. **learning_rate_init**: The initial `learning rate` used. It controls the step-size in updating the weights. Only used when `solver='sgd'` or `‘adam’`.\n\t* Type: *float*\n * Default / Range: 0.001 (value>=0)\n11. **max_iter**: Maximum number of iterations. The `solver` iterates until convergence (determined by `tol`) or this number of iterations. For stochastic solvers(‘sgd’, ‘adam’), note that this determines the number of epochs (how many times each data point will be used), not the number of gradient steps.\n\t* Type: *int*\n\t* Default / Range: 200 (value>=1)\n12. **random_state**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n13. **tol**: Tolerance for the optimization. When the loss or score is not improving by at least tolerance for n_iter_no_change consecutive iterations, unless `learning_rate` is set to `'adaptive'`, convergence is considered to be reached and training stops.\n\t* Type: *float*\n * Default / Range: 0.0001 (value>0)\n14. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a MLP Regression model.\nThe generated model is afterward applied to a test dataset to predict the value of _petal\\_width_ by MLP Regression Predict function. The parameter settings used in the function are shown below. \n\n++Parameters++\n1. **Feature Columns***: sepal_length, sepal_width \n2. **Label column***: petal_width\n3. **Hidden Layer Sizes**: (100, )\n4. **Activation Function**: tanh\n5. **Solver**: sgd\n6. **Alpha**: 0.0001\n7. **Batch Size Auto**: False\n8. **Batch Size**: 100\n9. **Learning Rate**: adaptive\n10. **Learning Rate Initial**: 0.002 \n11. **Max Iteration**: 200\n12. **Seed**: 0\n13. **Tolerance**: 0.0001\n14. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.regression import mlp_regression_train\ninput_table = inputs[0]\nresult = mlp_regression_train(table=input_table,\n feature_cols=['sepal_length', 'sepal_width'],\n label_col='petal_width',\n hidden_layer_sizes=(100, ),\n activation='tanh',\n solver='sgd',\n alpha=0.0001,\n batch_size_auto=False,\n batch_size=100, \n learning_rate='adaptive',\n learning_rate_init=0.002,\n max_iter=200,\n random_state=0,\n tol=0.0001, \n group_by=None)\noutput = result['model']\n```\nIn this python script, sample_iris data is used to train a MLP Regression model. The generated model is afterward applied to a test dataset to predict the value of _petal\\_width_ by using MLP Regression Predict function. ", + "md": { + "en": "# MLP Regression Train\nThis function trains a MLP Regression model which can learn non-linear models.\n\n## Description\nMLP stands for Multi-layer Perceptron which is a neural network model with supervised learning. Given a set of features X(x1, x2, ..., xn) and a target y, it can learn a non-linear function approximator for either classification or regression. MLP consists of at least three layers of nodes: an input layer, a hidden layer and an output layer. Except for the input nodes, each node is a neuron that uses a nonlinear activation function. It is different from logistic regression, in that between the input and the output layer, there can be one or more non-linear layers, called hidden layers.\n \nThe advantages of MLP are capability to learn non-linear models and capability to learn models in real-time(online learning) using `partial_fit`. On the other hand, the disadvantages of MLP includes 1) MLP with hidden layers have a non-convex loss function where there exists more than one local minimum. Therefore differnet random weight initializations can lead to different validation accuracy, 2) MLP requires tuning a number of hyperparameters such as the number of hidden neurons, lyers, and iterations, 3) MLP is sensitive to feature scaling. \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **model**: (Model) \n#### PARAMETER\n1. **Feature Columns***: Feature Column names. Only values in numeric type are possible.\n\n2. **Label column***: The column designated for the labels of data. It should be numeric type as it is for a regression.\n\n3. **Hidden Layer Sizes**: The _i_ th element represents the number of neurons in the _i_ th hidden layer.\n\n4. **Activation Function**: Activation function for the hidden layer.\n\n5. **Solver**: The solver for weight optimization\n\n6. **Alpha**: L2 penalty (regularization term) parameter\n\n7. **Batch Size Auto**: Batch Size Mode. When set to `True`, batch_size=min(200, n_samples)\n\n\t* Default value: true \n8. **Batch Size**: Size of minibatches for stochastic optimizers. If the `solver` is `lbfgs`, the classifier will not use minibatch. \n\n9. **Learning Rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative.\n\n10. **Learning Rate Initial**: The initial `learning rate` used. It controls the step-size in updating the weights. Only used when `solver='sgd'` or `‘adam’`.\n\n11. **Max Iteration**: Maximum number of iterations. The `solver` iterates until convergence (determined by `Tolerance`) or this number of iterations. For stochastic solvers(‘sgd’, ‘adam’), note that this determines the number of epochs (how many times each data point will be used), not the number of gradient steps.\n\n12. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n13. **Tolerance**: Tolerance for the optimization. When the loss or score is not improving by at least tolerance for n_iter_no_change consecutive iterations, unless `learning_rate` is set to `'adaptive'`, convergence is considered to be reached and training stops.\n\n14. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nmlp_regression_train(table = , feature_cols = , label_col = , hidden_layer_sizes = , activation = , solver = , alpha = , batch_size_auto = true, batch_size = , learning_rate = , learning_rate_init = , max_iter = , random_state = , tol = , group_by = )\n```\n\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **model**: (Model) \n#### PARAMETER\n1. **feature_cols***: Feature Column names. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **label_col***: The column designated for the labels of data. It should be numeric type as it is for a regression.\n\t* Type: *str*\n3. **hidden_layer_sizes**: The _i_ th element represents the number of neurons in the _i_ th hidden layer.\n\t* Type: *str*\n4. **activation**: Activation function for the hidden layer.\n\t* Type: *str*\n\t* Default / Range: ( identity | logistic | tanhrelu | relu )\n5. **solver**: The solver for weight optimization\n\t* Type: *str*\n\t* Default / Range: ( lbfgs | sgdadam | adam )\n6. **alpha**: L2 penalty (regularization term) parameter\n\t* Type: *double*\n\t* Default / Range: 0.0001 (value>=0)\n7. **batch_size_auto**: Batch Size Mode. When set to `True`, batch_size=min(200, n_samples)\n\t* Type: *bool*\n\t* Default value: true \n8. **batch_size**: Size of minibatches for stochastic optimizers. If the `solver` is `lbfgs`, the classifier will not use minibatch. \n\t* Type: *int*\n\n9. **learning_rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative.\n\t* Type: *str*\n\t* Default / Range: constant ( constant | invscaling | adaptive )\n10. **learning_rate_init**: The initial `learning rate` used. It controls the step-size in updating the weights. Only used when `solver='sgd'` or `‘adam’`.\n\t* Type: *double*\n\n11. **max_iter**: Maximum number of iterations. The `solver` iterates until convergence (determined by `Tolerance`) or this number of iterations. For stochastic solvers(‘sgd’, ‘adam’), note that this determines the number of epochs (how many times each data point will be used), not the number of gradient steps.\n\t* Type: *int*\n\t* Default / Range: 200 (value>=1)\n12. **random_state**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n\n13. **tol**: Tolerance for the optimization. When the loss or score is not improving by at least tolerance for n_iter_no_change consecutive iterations, unless `learning_rate` is set to `'adaptive'`, convergence is considered to be reached and training stops.\n\t* Type: *double*\n\n14. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a MLP Regression model. The generated model is afterward applied to a test dataset to predict the value of petal_width by MLP Regression Predict function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Feature Columns***: sepal_length, sepal_width\n2. **Label column***: petal_width\n3. **Hidden Layer Sizes**: (100,)\n4. **Activation Function**: tanh\n5. **Solver**: sgd\n6. **Alpha**: 0.0001\n7. **Batch Size Auto**: False\n8. **Batch Size**: adaptive\n9. **Learning Rate**: 0.002\n10. **Learning Rate Initial**: 0.002\n11. **Max Iteration**: 200\n12. **Seed**: 0\n13. **Tolerance**: 0.001\n14. **Group By**: \n\n\n\n### Python\n\n```\nfrom brightics.function.regression import mlp_regression_train\nres = mlp_regression_train(table = , feature_cols = , label_col = , hidden_layer_sizes = , activation = , solver = , alpha = , batch_size_auto = true, batch_size = , learning_rate = , learning_rate_init = , max_iter = , random_state = , tol = , group_by = )\nres['model']\n```\n\n", + "kr": "" + }, "exampleModels": [ { - "fileName": "brightics.function.regression$mlp_regression.json", + "fileName": "mlp_regression.json", "label": "MLP REGESSION", "contents": { "type": "files", @@ -773,7 +776,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.regression$mlp_regression_train", + "func": "brightics.function.regression$mlp_regression_traintrain", "name": "brightics.function.regression$mlp_regression_train", "param": { "activation": "tanh", @@ -1044,7 +1047,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.regression$mlp_regression_predict", + "func": "brightics.function.regression$mlp_regression_predictedict", "name": "brightics.function.regression$mlp_regression_predict", "param": {}, "display": { @@ -1789,9 +1792,13 @@ ], "sampleImages": [ { - "fileName": "brightics.function.regression$mlp_regression_train.png", - "label": "brightics.function.regression$mlp_regression_train.png", - "base64": "data:image/png;base64,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" + "fileName": "mlp_regression.PNG", + "label": "mlp_regression.PNG", + "base64": "data:image/png;base64,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AAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIpkwCAAAAIJsyCQAAAIBsyiQAAAAAsimTAAAAAMimTAIAAAAgmzIJAAAAgGzKJAAAAACyKZMAAAAAyKZMAgAAACCbMgkAAACAbMokAAAAALIpkwAAAADIdLX4/8YxC5FyBT/5AAAAAElFTkSuQmCC", + "parameter": "1. **Feature Columns***: sepal_length, sepal_width\n2. **Label column***: petal_width\n3. **Hidden Layer Sizes**: (100,)\n4. **Activation Function**: tanh\n5. **Solver**: sgd\n6. **Alpha**: 0.0001\n7. **Batch Size Auto**: False\n8. **Batch Size**: adaptive\n9. **Learning Rate**: 0.002\n10. **Learning Rate Initial**: 0.002\n11. **Max Iteration**: 200\n12. **Seed**: 0\n13. **Tolerance**: 0.001\n14. **Group By**: \n", + "index": 0, + "description": "In this tutorial workflow, sample_iris data is used to train a MLP Regression model. The generated model is afterward applied to a test dataset to predict the value of petal_width by MLP Regression Predict function. The parameter settings used in the function are shown below." } - ] + ], + "scriptExamples": [] } diff --git a/function/python/brightics/function/regression/meta/pls_regression_predict.json b/function/python/brightics/function/regression/meta/pls_regression_predict.json new file mode 100644 index 000000000..c6d354300 --- /dev/null +++ b/function/python/brightics/function/regression/meta/pls_regression_predict.json @@ -0,0 +1,1583 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "regression", + "func": "brightics.function.regression$pls_regression_predict", + "name": "brightics.function.regression$pls_regression_predict", + "context": "python", + "label": "PLS Regression Predict", + "description": "Predict data using a trained PLS model", + "tags": [ + "PLS", + "regression", + "PLS regression", + "PLS regression predict", + "predict" + ], + "version": "3.6", + "inputs": { + "table": "", + "model": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + }, + "out_table": { + "type": "table" + } + }, + "params": [ + { + "id": "prediction_col", + "label": "Prediction Column Name", + "description": "Column name for prediction. Postfix is added for multiple predictions", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "prediction" + } + ] + }, + "md": { + "en": "# PLS Regression Predict\n\n\n## Description\nPredict data using a trained PLS model\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) \n2. **model***: (Model) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **Prediction Column Name**: Column name for prediction. Postfix is added for multiple predictions\n\n\n### Python\n#### USAGE\n\n```\npls_regression_predict(table = , model = , prediction_col = )\n```\n\n#### INPUT\n1. **table***: (Table) \n2. **model***: (Model) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **prediction_col**: Column name for prediction. Postfix is added for multiple predictions\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used to train and predict a PLS regression. The generated model is afterward applied to a test data set to predict the value of petal_width , by using PLS Regression Predict function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Prediction Column Name**: prediction\n\n\n\n### Python\n\n```\nfrom brightics.function.regression import pls_regression_predict\ninput_table = inputs[1]\ninput_model = models[0]\nres = pls_regression_predict(table = input_table,\n\t\t\t\t\t\t\t model = input_model,\n\t\t\t\t\t\t\t prediction_col = 'prediction')\nres['out_table']\n```\nIn this python script, trained PLS Regression model is applied to a test data set to predict the value of petal_width, by using pls_regression_predict function.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "pls_regression.json", + "label": "test model", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m9g8m4js6fbgu8tn", + "project_id": "p5dmzu78qb564crk", + "label": "test model", + "contents": { + "mid": "m9g8m4js6fbgu8tn", + "type": "data", + "title": "test model", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 520 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583220219008", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "kn9z7jg4i8ymw97muc5ncvzp" + } + ], + "layout": { + "type": "panel", + "id": "default-1583220219008" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tn5ttx48u7th6jne" + }, + "fid": "fge6xfrdryhax3tn" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$split_data", + "name": "brightics.function.transform$split_data", + "param": {}, + "display": { + "label": "Split Data", + "diagram": { + "position": { + "x": 520, + "y": 520 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1583223478478", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ud5kkji96qe3up32uwyw9yj2" + } + ], + "layout": { + "type": "panel", + "id": "default-1583223478478" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583223478536", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "8xsygph4xfcdhdkd6jfm9p2b" + } + ], + "layout": { + "id": "default-1583223478536", + "type": "panel" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "train_table": { + "type": "table" + }, + "test_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tn5ttx48u7th6jne" + }, + "outputs": { + "train_table": "t7segbgw9kvgw3ju", + "test_table": "tk59895vpegzf3ws" + }, + "fid": "fjmvbhjcxz4kg7xs" + }, + { + "persist-mode": "auto", + "func": "brightics.function.regression$pls_regression_train", + "name": "brightics.function.regression$pls_regression_train", + "param": { + "feature_cols": [ + "sepal_length", + "sepal_width", + "petal_length" + ], + "label_cols": [ + "petal_width" + ] + }, + "display": { + "label": "PLS Regression Train", + "diagram": { + "position": { + "x": 770, + "y": 520 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593502738610", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "g7s6ibfpdgjq5unddnttjkak" + } + ], + "layout": { + "type": "panel", + "id": "default-1593502738610" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t7segbgw9kvgw3ju" + }, + "outputs": { + "model": "t5ch9htk8da5k5ut" + }, + "fid": "fu4edruvnh87rbyq" + }, + { + "persist-mode": "auto", + "func": "brightics.function.regression$pls_regression_predict", + "name": "brightics.function.regression$pls_regression_predict", + "param": {}, + "display": { + "label": "PLS Regression Predict", + "diagram": { + "position": { + "x": 1020, + "y": 520 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593502747420", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "n8gfj45xbyvkc2zwffb9e6u6" + } + ], + "layout": { + "type": "panel", + "id": "default-1593502747420" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593502747461", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "2ce7c2yvhsft28cz8ng5vska" + } + ], + "layout": { + "type": "panel", + "id": "default-1593502747461" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t7segbgw9kvgw3ju", + "model": "t5ch9htk8da5k5ut" + }, + "outputs": { + "out_table": "t74czsar8p486gc3" + }, + "fid": "f378ednknzhp46rb" + } + ], + "links": [ + { + "kid": "k2tmz4xsnxbhsvcr", + "sourceFid": "fge6xfrdryhax3tn", + "targetFid": "fjmvbhjcxz4kg7xs" + }, + { + "kid": "k5xttgmxbfqn7xu2", + "sourceFid": "fu4edruvnh87rbyq", + "targetFid": "f378ednknzhp46rb" + }, + { + "kid": "kfn9bvsj4r48aqnt", + "sourceFid": "fjmvbhjcxz4kg7xs", + "targetFid": "fu4edruvnh87rbyq" + }, + { + "kid": "ks74akb2gmcc77uf", + "sourceFid": "fjmvbhjcxz4kg7xs", + "targetFid": "f378ednknzhp46rb" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "This is test model", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T07:37:41.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T07:40:17.000Z", + "event_key": "2020_074017.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "pls_regression_predict.png", + "label": "pls_regression_predict.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_iris data is used to train and predict a PLS regression. The generated model is afterward applied to a test data set to predict the value of petal_width , by using PLS Regression Predict function. The parameter settings used in the function are shown below.", + "parameter": "1. **Prediction Column Name**: prediction\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.regression import pls_regression_predict\r\ninput_table = inputs[1]\r\ninput_model = models[0]\r\nres = pls_regression_predict(table = input_table,\r\n\t\t\t\t\t\t\t model = input_model,\r\n\t\t\t\t\t\t\t prediction_col = 'prediction')\r\nres['out_table']", + "description": "In this python script, trained PLS Regression model is applied to a test data set to predict the value of petal_width, by using pls_regression_predict function.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/regression/meta/pls_regression_train.json b/function/python/brightics/function/regression/meta/pls_regression_train.json new file mode 100644 index 000000000..2b75fd345 --- /dev/null +++ b/function/python/brightics/function/regression/meta/pls_regression_train.json @@ -0,0 +1,1672 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "regression", + "func": "brightics.function.regression$pls_regression_train", + "name": "brightics.function.regression$pls_regression_train", + "context": "python", + "label": "PLS Regression Train", + "description": "This function fits a PLS regression model using the given data.", + "tags": [ + "PLS", + "regression", + "PLS regression", + "PLS regression train", + "train" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "model": "" + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "params": [ + { + "id": "feature_cols", + "label": "Feature Columns", + "description": "", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "Double[]" + ], + "multiple": true, + "rowCount": 5 + }, + { + "id": "label_cols", + "label": "Label Columns", + "description": "", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "Double[]" + ], + "multiple": true + }, + { + "id": "n_components", + "label": "Number of components", + "description": "Number of components to keep", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "2 (value>=1)" + }, + { + "id": "scale", + "label": "Scale", + "description": "Whether to scale data or not", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [] + }, + { + "id": "max_iter", + "label": "Max Iteration", + "description": "Maximum number of iterations", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "500 (value>=1)" + }, + { + "id": "tol", + "label": "Tolerance", + "description": "Tolerance for the optimization", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [], + "type": "Double", + "placeHolder": "0.000001 (value>0)" + }, + { + "id": "group_by", + "label": "Group By", + "description": "", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true, + "rowCount": 5 + } + ] + }, + "md": { + "en": "# PLS Regression Train\n\n\n## Description\nThis function fits a PLS regression model using the given data.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **model**: (Model) \n#### PARAMETER\n1. **Feature Columns***: \n\n2. **Label Columns***: \n\n3. **Number of components**: Number of components to keep\n\n4. **Scale**: Whether to scale data or not\n\n5. **Max Iteration**: Maximum number of iterations\n\n6. **Tolerance**: Tolerance for the optimization\n\n7. **Group By**: \n\n\n### Python\n#### USAGE\n\n```\npls_regression_train(table = , feature_cols = , label_cols = , n_components = , scale = , max_iter = , tol = , group_by = )\n```\n\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **model**: (Model) \n#### PARAMETER\n1. **feature_cols***: \n\t* Type: *list[str]*\n2. **label_cols***: \n\t* Type: *list[str]*\n3. **n_components**: Number of components to keep\n\t* Type: *int*\n\t* Default / Range: 2 (value>=1)\n4. **scale**: Whether to scale data or not\n\t* Type: *bool*\n5. **max_iter**: Maximum number of iterations\n\t* Type: *int*\n\t* Default / Range: 500 (value>=1)\n6. **tol**: Tolerance for the optimization\n\t* Type: *double*\n\n7. **group_by**: \n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a PLS regression. The generated model is afterward applied to a test data set to predict the value of petal_width , by using PLS Regression Predict function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Feature Columns***: sepal_length, sepal_width, peta_length\n2. **Label Columns***: petal_width\n3. **Number of components**: 2\n4. **Scale**: False\n5. **Max Iteration**: 500\n6. **Tolerance**: 0.000001\n7. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.regression import pls_regression_train\nres = pls_regression_train(table = input_table,\n\t\t\t\t\t\t feature_cols = ['sepal_length', 'sepal_width'],\n\t\t\t\t\t\t label_cols = ['petal_width'],\n\t\t\t\t\t\t group_by = None)\nres['model']\n```\nIn this python script, sample_iris data is used to train a PLS regression. The generated model is afterward applied to a test data set to predict the value of petal_width , by using PLS Regression Predict function.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "pls_regression.json", + "label": "test model", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m9g8m4js6fbgu8tn", + "project_id": "p5dmzu78qb564crk", + "label": "test model", + "contents": { + "mid": "m9g8m4js6fbgu8tn", + "type": "data", + "title": "test model", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 520 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583220219008", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "kn9z7jg4i8ymw97muc5ncvzp" + } + ], + "layout": { + "type": "panel", + "id": "default-1583220219008" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tn5ttx48u7th6jne" + }, + "fid": "fge6xfrdryhax3tn" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$split_data", + "name": "brightics.function.transform$split_data", + "param": {}, + "display": { + "label": "Split Data", + "diagram": { + "position": { + "x": 520, + "y": 520 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1583223478478", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ud5kkji96qe3up32uwyw9yj2" + } + ], + "layout": { + "type": "panel", + "id": "default-1583223478478" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583223478536", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "8xsygph4xfcdhdkd6jfm9p2b" + } + ], + "layout": { + "id": "default-1583223478536", + "type": "panel" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "train_table": { + "type": "table" + }, + "test_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tn5ttx48u7th6jne" + }, + "outputs": { + "train_table": "t7segbgw9kvgw3ju", + "test_table": "tk59895vpegzf3ws" + }, + "fid": "fjmvbhjcxz4kg7xs" + }, + { + "persist-mode": "auto", + "func": "brightics.function.regression$pls_regression_train", + "name": "brightics.function.regression$pls_regression_train", + "param": { + "feature_cols": [ + "sepal_length", + "sepal_width", + "petal_length" + ], + "label_cols": [ + "petal_width" + ] + }, + "display": { + "label": "PLS Regression Train", + "diagram": { + "position": { + "x": 770, + "y": 520 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593502738610", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "g7s6ibfpdgjq5unddnttjkak" + } + ], + "layout": { + "type": "panel", + "id": "default-1593502738610" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t7segbgw9kvgw3ju" + }, + "outputs": { + "model": "t5ch9htk8da5k5ut" + }, + "fid": "fu4edruvnh87rbyq" + }, + { + "persist-mode": "auto", + "func": "brightics.function.regression$pls_regression_predict", + "name": "brightics.function.regression$pls_regression_predict", + "param": {}, + "display": { + "label": "PLS Regression Predict", + "diagram": { + "position": { + "x": 1020, + "y": 520 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593502747420", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "n8gfj45xbyvkc2zwffb9e6u6" + } + ], + "layout": { + "type": "panel", + "id": "default-1593502747420" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593502747461", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "2ce7c2yvhsft28cz8ng5vska" + } + ], + "layout": { + "type": "panel", + "id": "default-1593502747461" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t7segbgw9kvgw3ju", + "model": "t5ch9htk8da5k5ut" + }, + "outputs": { + "out_table": "t74czsar8p486gc3" + }, + "fid": "f378ednknzhp46rb" + } + ], + "links": [ + { + "kid": "k2tmz4xsnxbhsvcr", + "sourceFid": "fge6xfrdryhax3tn", + "targetFid": "fjmvbhjcxz4kg7xs" + }, + { + "kid": "k5xttgmxbfqn7xu2", + "sourceFid": "fu4edruvnh87rbyq", + "targetFid": "f378ednknzhp46rb" + }, + { + "kid": "kfn9bvsj4r48aqnt", + "sourceFid": "fjmvbhjcxz4kg7xs", + "targetFid": "fu4edruvnh87rbyq" + }, + { + "kid": "ks74akb2gmcc77uf", + "sourceFid": "fjmvbhjcxz4kg7xs", + "targetFid": "f378ednknzhp46rb" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "This is test model", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T07:37:41.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T07:40:17.000Z", + "event_key": "2020_074017.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "pls_regression_train.png", + "label": "pls_regression_train.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_iris data is used to train a PLS regression. The generated model is afterward applied to a test data set to predict the value of petal_width , by using PLS Regression Predict function. The parameter settings used in the function are shown below.", + "parameter": "1. **Feature Columns***: sepal_length, sepal_width, peta_length\n2. **Label Columns***: petal_width\n3. **Number of components**: 2\n4. **Scale**: False\n5. **Max Iteration**: 500\n6. **Tolerance**: 0.000001\n7. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.regression import pls_regression_train\r\nres = pls_regression_train(table = input_table,\r\n\t\t\t\t\t\t feature_cols = ['sepal_length', 'sepal_width'],\r\n\t\t\t\t\t\t label_cols = ['petal_width'],\r\n\t\t\t\t\t\t group_by = None)\r\nres['model']", + "description": "In this python script, sample_iris data is used to train a PLS regression. The generated model is afterward applied to a test data set to predict the value of petal_width , by using PLS Regression Predict function.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/regression/meta/random_forest_regression_train.json b/function/python/brightics/function/regression/meta/random_forest_regression_train.json index a21f92eb1..3abe084a2 100644 --- a/function/python/brightics/function/regression/meta/random_forest_regression_train.json +++ b/function/python/brightics/function/regression/meta/random_forest_regression_train.json @@ -101,7 +101,7 @@ }, { "id": "max_depth", - "label": "Maximum Depth", + "label": "Max Depth", "description": " The maximum depth of the tree. It restricts the depth of each individual tree to prevent overfitting. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than `Minimum Number of Samples to Split`.", "visibleOption": [], "control": "InputBox", @@ -115,7 +115,7 @@ }, { "id": "min_samples_split", - "label": "Minimum Number of Samples to Split", + "label": "Min Sample Split", "description": "The minimum number of samples required to split an internal node. A very small number will usually mean the tree will overfit, whereas a large number will prevent the tree from learning the data.", "visibleOption": [], "control": "InputBox", @@ -129,7 +129,7 @@ }, { "id": "min_samples_leaf", - "label": "Minimum Number of Samples in a Leaf", + "label": "Min Sample Leaf", "description": "The minimum number of samples required to be at a leaf node. A split point at any depth will only be considered if it leaves at least `Minimum Number of Samples in a Leaf` training samples in each of the left and right branches. This may have the effect of smoothing the model, especially in regression. While `Minimum Number of Samples to Split` can create arbitrarily small leaves, `Minimum Number of Samples in a Leaf` guarantees that each leaf has a minimum size, avoiding low-variance, over-fit leaf nodes in regression problems.", "visibleOption": [], "control": "InputBox", diff --git a/function/python/brightics/function/regression/meta/regression_predict.json b/function/python/brightics/function/regression/meta/regression_predict.json index 9103c45a4..7d6dcf5ce 100644 --- a/function/python/brightics/function/regression/meta/regression_predict.json +++ b/function/python/brightics/function/regression/meta/regression_predict.json @@ -50,10 +50,10 @@ ], "summary": "This function predict data using a regression model." }, - "md": "# Regression Predict\nThis function predict data using a regression model.\n\n## Description\nRegression analysis is primarily used for two conceptually distinct purposes. First, regression analysis is widely used for prediction and forecasting, where its use has substantial overlap with the field of machine learning. Second, in some situations regression analysis can be used to infer causal relationships between the independent and dependent variables. Importantly, regressions by themselves only reveal relationships between a dependent variable and a collection of independent variables in a fixed dataset. To use regressions for prediction or to infer causal relationships, respectively, a researcher must carefully justify why existing relationships have predictive power for a new context or why a relationship between two variables has a causal interpretation. The latter is especially important when researchers hope to estimate causal relationships using observational data.\n\nReference: \n+ \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain Feature Columns that was used when train the model.\n2. **model***: (Model) Trained regression model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and prediction column as `Prediction Colmn Name`.\n#### PARAMETER\n1. **Prediction Column Name**: A name of prediction column.\n\n\n### Python\n#### USAGE\n\n```\nregression_predict(table, model, prediction_col='prediction')\n```\n\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain Feature Columns that was used when train the model.\n2. **model***: (Model) Trained regression model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and prediction column as `Prediction Colmn Name`.\n#### PARAMETER\n1. **prediction_col**: A name of prediction column.\n\t* Type: *str*\n\t* Default / Range: 'prediction'\n\n## Example\n### VA\n\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_iris data is used to train and predict a regression model.\nThe generated model is afterward applied to a test data set to predict the value of _pretal\\_width_ , by using Regression Predict function. \nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Prediction Column Name** : 'prediction'\n\n### Python\n```\nfrom brightics.function.regression import regression_predict\ninput_table = inputs[1]\ninput_model = models[0]\nresult = regression_predict(table=input_table,\n model=input_model,\n prediction_col='prediction')\noutput = result['out_table']\n```\n\n
In this python script, a trained regression model is applied to a test data set to predict the value of _petal/_width_, by using Regression Predict function.\n\n", + "md": "# Regression Predict\nThis function predict data using a regression model.\n\n## Description\nRegression analysis is primarily used for two conceptually distinct purposes. First, regression analysis is widely used for prediction and forecasting, where its use has substantial overlap with the field of machine learning. Second, in some situations regression analysis can be used to infer causal relationships between the independent and dependent variables. Importantly, regressions by themselves only reveal relationships between a dependent variable and a collection of independent variables in a fixed dataset. To use regressions for prediction or to infer causal relationships, respectively, a researcher must carefully justify why existing relationships have predictive power for a new context or why a relationship between two variables has a causal interpretation. The latter is especially important when researchers hope to estimate causal relationships using observational data.\n\nReference: \n+ \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain Feature Columns that was used when train the model.\n2. **model***: (Model) Trained regression model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and prediction column as `Prediction Colmn Name`.\n#### PARAMETER\n1. **Prediction Column Name**: A name of prediction column.\n\n\n### Python\n#### USAGE\n\n```\nregression_predict(table, model, prediction_col='prediction')\n```\n\n#### INPUT\n1. **table***: (Table) Data in a Table. It must contain Feature Columns that was used when train the model.\n2. **model***: (Model) Trained regression model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and prediction column as `Prediction Colmn Name`.\n#### PARAMETER\n1. **prediction_col**: A name of prediction column.\n\t* Type: *str*\n\t* Default / Range: 'prediction'\n\n## Example\n### VA\n\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_iris data is used to train and predict a regression model.\nThe generated model is afterward applied to a test data set to predict the value of _pretal\\_width_ , by using Regression Predict function. \nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Prediction Column Name** : 'prediction'\n\n### Python\n```\nfrom brightics.function.regression import regression_predict\ninput_table = inputs[1]\ninput_model = models[0]\nresult = regression_predict(table=input_table,\n model=input_model,\n prediction_col='prediction')\noutput = result['out_table']\n```\n\n
In this python script, a trained regression model is applied to a test data set to predict the value of _petal/_width_, by using Regression Predict function.\n\n", "exampleModels": [ { - "fileName": "brightics.function.regression$regression_predict.json", + "fileName": "regression_predict.json", "label": "test model", "contents": { "type": "files", @@ -1037,7 +1037,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.regression$regression_predict", + "func": "brightics.function.regression$regression_predict23233", "name": "brightics.function.regression$regression_predict", "param": {}, "display": { @@ -1558,9 +1558,12 @@ ], "sampleImages": [ { - "fileName": "brightics.function.regression$regression_predict.png", - "label": "brightics.function.regression$regression_predict.png", - "base64": "data:image/png;base64,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" + "fileName": "regression_predict.PNG", + "label": "regression_predict.PNG", + "base64": "data:image/png;base64,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", + "parameter": "1. **Prediction Column Name**: Prediction\n", + "index": 0 } - ] -} \ No newline at end of file + ], + "scriptExamples": [] +} diff --git a/function/python/brightics/function/regression/meta/xgb_regression_train.json b/function/python/brightics/function/regression/meta/xgb_regression_train.json index b9acddd14..eb5dd94b2 100644 --- a/function/python/brightics/function/regression/meta/xgb_regression_train.json +++ b/function/python/brightics/function/regression/meta/xgb_regression_train.json @@ -74,7 +74,7 @@ { "id": "objectibe", "label": "Objective", - "description": "The learning task and the corresponding learning objective.", + "description": "Specify the learning task and the corresponding learning objective or a custom objective function to be used. The objective options are below:\n\treg:linear - Regression task with squared loss\n\tcount:poisson - Poisson regression for count data, output mean of poisson distribution\n\tsurvival:cox - Cox regression for right censored survival time data (negative values are considered right censored)\n\trank:pairwise - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized\n\treg:gamma - gamma regression with log-link. Output is a mean of gamma distribution. It might be useful, e.g., for modeling insurance claims severity, or for any outcome that might be gamma-distributed\n\treg:tweedie - Tweedie regression with log-link. It might be useful, e.g., for modeling total loss in insurance, or for any outcome that might be Tweedie-distributed", "visibleOption": [], "control": "DropDownList", "validation": [], @@ -119,7 +119,7 @@ { "id": "max_depth", "label": "Max Depth", - "description": "Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Normally 6 is suggested for the depth. Increasing this value will make the model more complex and more likely to overfit. Beware that XGBoost aggressively consumes memory when training a deep tree.", + "description": "Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Normally 6 is suggested for the depth. Increasing this value will make the model more complex and more likely to overfit. 0 is only accepted in loss guided growing policy when tree_method is set as hist and it indicates no limit on depth. Beware that XGBoost aggressively consumes memory when training a deep tree.", "visibleOption": [], "control": "InputBox", "validation": [], @@ -250,7 +250,7 @@ ], "summary": "This function trains a XGBoost model for regression which is highly efficient, flexible and portable." }, - "md": "# XGB Regression Train\nThis function trains a XGBoost model for regression which is highly efficient, flexible and portable.\n\n## Description\nXGBoost stands for 'Extreme Gradient Boosting', where the term 'Gradient Boosting' originates from the paper Greedy Function Approximation: A Gradient Boosting Machine, by Friedman. \n\nXGBoost provides a parallel tree boosting (also known as GBDT, GBM) that solve many data science problems in a fast and accurate way. The same code runs on major distributed environment (Hadoop, SGE, MPI) and can solve problems beyond billions of examples. To sum up, XGBoost is an optimized distributed gradient boosting.\n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels. \n#### OUTPUT\n1. **model**: (Model) Trained XGBoost Regression model. \n#### PARAMETER\n1. **Feature Columns***: Feature column names. Only values in numeric type are possible.\n\n2. **Label Column***: The column designated for the labels of data. It should be numeric type as it is for regression.\n\n3. **Objective**: The learning task and the corresponding learning objective.\n * Available Options : `Linear regression with squared loss`, `Poisson regression for count data`, `Cox regression for right censored survival time`, `Pairwise ranking`, `Gamma regression with log-link`, `Tweedie regression with log-link`\n\n4. **Max Depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Normally 6 is suggested for the depth. Increasing this value will make the model more complex and more likely to overfit. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\n5. **Learning Rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. 0.3 is suggested.\n\n6. **Number of Trees**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\n7. **Importance Type**: `Importance Type` is a feature importance type property.\n * Available Options : `Gain`, `Weight`, `Cover`, `Total Gain`, `Total Cover`\n\n8. **Fraction of Samples**: The `fraction of samples` is to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `Fraction of samples` interacts with the parameter `Number of Trees`. Choosing `Fraction of samples` < 1.0 leads to a reduction of variance and an increase in bias.\n\n9. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n10. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\nxgb_regression_train(table, feature_cols, label_col, max_depth=4, learning_rate=0.01, n_estimators=100, random_state=0, silent=True, objective='reg:linear', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, seed=None, missing=None, sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True, xgb_model=None, sample_weight_eval_set=None, importance_type='gain')\n```\n\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels. \n#### OUTPUT\n1. **model**: (Model) Trained XGBoost Regression model.\n#### PARAMETER\n1. **feature_cols***: Feature column names. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **label_col***: The column designated for the labels of data. It should be numeric type as it is for regression.\n\t* Type: *str*\n3. **objective**: The learning task and the corresponding learning objective.\n\t* Type: *str*\n\t* Default / Range: reg:linear ( reg:linear | count:poisson | survival:cox | rank:pairwise | reg:gamma | reg:tweedie )\n4. **max_depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Normally 6 is suggested for the depth. Increasing this value will make the model more complex and more likely to overfit. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\t* Type: *int*\n\t* Default / Range: 3 (1 <= value)\n5. **learning_rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. 0.3 is suggested.\n\t* Type: *float*\n\t* Default / Range: 0.1 (0 <= value)\n6. **n_estimators**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\t* Type: *int*\n\t* Default / Range: 100 (1 <= value)\n7. **importance_type**: `importance type` is a feature importance type property.\n\t* Type: *str*\n\t* Default / Range: gain ( gain | weight | cover | total_gain | total_cover )\n8. **subsample**: Subsample to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `subsample` interacts with the parameter `n_estimators`. Choosing `subsample` < 1.0 leads to a reduction of variance and an increase in bias.\n\t* Type: *float*\n\t* Default / Range: 1.0 (0 < value <= 1.0)\n9. **random_state**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n10. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n11. **silent** : Whether print messages during construction\n - Type : _bool_ \n - Default : True\n12. **booster** : Specify which booster to use\n - Type : _str_ \n - Default / Range : gbtree ( gbtree | gblinear | dart )\n13. **n_jobs** : Number of parallel threads used to run xgboost.\n - Type : _int_ \n - Default / Range: 1 (1 <= value)\n14. **nthread** : Number of threads to use for loading data from numpy array. If -1, uses maximum threads available on the system.\n - Type : _int_ \n - Default / Range: None (-1 <= value)\n15. **gamma** : Minimum loss reduction required to make a further partition on a leaf node of the tree.\n - Type : _float_ \n - Default / Range: 0 (0 <= value)\n16. **min_child_weight** : Minimum sum of instance weight(hessian) needed in a child.\n - Type : _int_ \n - Default / Range: 1 (0 <= value)\n17. **max_delta_step** : Maximum delta step we allow each tree’s weight estimation to be.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n18. **colsample_bytree** : `subsample` ratio of columns when constructing each tree.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n19. **colsample_bylevel** : `subsample` ratio of columns for each level.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n20. **reg_alpha** : L1 regularization term on weights.\n - Type : _float_ \n - Default value: 0\n21. **reg_lambda** : L2 regularization term on weights.\n - Type : _float_ \n - Default value: 1\n22. **scale_pos_weight** : Balancing of positive and negative weights.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n23. **base_score** : The initial prediction score of all instances, global bias.\n - Type : _float_ \n - Default / Range: 0.5 (0 <= value)\n24. **seed** : Random seed. Use the same seed in order to reproduce the same results.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n25. **missing** : Value in the data which needs to be present as a missing value.\n - Type : _float_ \n - Default / Range: None (0 <= value)\n26. **sample_weight** : instance weights\n - Type : _list_[_float_] \n - Default / Range: None (0 <= value)\n27. **eval_set** : A list of (X, y) tuple pairs to use as validation sets, for which metrics will be computed. Validation metrics will help us track the performance of the model.\n - Type : _list_[_tuple_] \n - Default value: None\n28. **eval_metric** : If a str, should be a built-in evaluation metric to use. If a list of str, should be the list of multiple built-in evaluation metrics to use. If callable, a custom evaluation metric. The call signature is func(y_predicted, y_true) where y_true will be a DMatrix object such that you may need to call the get_label method. It must return a str, value pair where the str is a name for the evaluation and value is the value of the evaluation function. The callable custom objective is always minimized.\n default metric will be assigned according to objective. 1) poisson-nloglik: for Poisson regression (count:poisson), 2) gamma-nloglik: for gamma regression (reg:gamma), 3) cox-nloglik: for Cox proportional hazards regression (survival:cox), 4) gamma-deviance: for gamma regression (reg:gamma)\n - Type : _str_ or _list[_str_]\n - Default / Range : None ( rmse | rmsle | mae )\n29. **early_stopping_rounds** : Activates early stopping. Cross-Validation metric (average of validation metric computed over CV folds) needs to improve at least once in every `early_stopping_rounds` round(s) to continue training. The last entry in the evaluation history will represent the best iteration. If there’s more than one metric in the eval_metric parameter given in params, the last metric will be used for early stopping.\n - Type : _int_ \n - Default / Range: None (0 <= value)\n30. **verbose** : If `verbose` and an `eval_set` is used, writes the evaluation metric measured on the validation set to stderr.\n - Type : _bool_ \n - Default value: True\n31. **xgb_model** : file name of stored XGBoost model or `booster` instance XGBoost model to be loaded before training (allows training continuation).\n - Type : _str_ \n - Default value: None\n32. **sample_weight_eval_set** : A list of the form [L\\_1, L\\_2, …, L\\_n], where each L\\_i is a list of instance weights on the i-th validation set.\n - Type : _list_[_str_] \n - Default value: None\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a XGBoost for regression. The generated model is afterward applied to a test dataset to predict the value of _petal\\_width_ by using XGBoost Regression Predict function. The parameter settings used in the function are shown below. \n\n++Parameters++\n1. **Feature Columns***: sepal\\_length, sepal\\_width\n2. **Label Column***: petal\\_width\n3. **Objective**: Linear regression with squared loss\n4. **Max Depth**: 3\n5. **Learning Rate**: 0.1 \n6. **Number of Trees**: 100\n7. **Importance Type**: Gain\n8. **Fraction of Samples**: 1.0\n9. **Seed**: 0\n10. **Group By**: None \n\n\n### Python\n\n```\nfrom brightics.function.regression import xgb_regression_train\ninput_table = inputs[0]\nresult = xgb_regression_train(table=input_table,\n feature_cols=['sepal_length', 'sepal_width'],\n label_col=['petal_width'], max_depth=4, learning_rate=0.01, n_estimators=100,\n random_state=0, silent=True, objective='reg:linear', booster='gbtree', n_jobs=1,\n nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1,\n colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1,\n base_score=0.5, seed=None, missing=None, sample_weight=None, eval_set=None,\n eval_metric=None, early_stopping_rounds=None, verbose=True,\n xgb_model=None, sample_weight_eval_set=None, importance_type='gain')\noutput = result['model']\n```\nIn this python script, sample_iris data is used to train a XGBoost for regression. The generated model is afterward applied to a test dataset to predict the value of _petal\\_width_ by using XGBoost Regression Predict function.\n", + "md": "# XGB Regression Train\nThis function trains a XGBoost model for regression which is highly efficient, flexible and portable.\n\n## Description\nXGBoost stands for 'Extreme Gradient Boosting', where the term 'Gradient Boosting' originates from the paper Greedy Function Approximation: A Gradient Boosting Machine, by Friedman. \n\nXGBoost provides a parallel tree boosting (also known as GBDT, GBM) that solve many data science problems in a fast and accurate way. The same code runs on major distributed environment (Hadoop, SGE, MPI) and can solve problems beyond billions of examples. To sum up, XGBoost is an optimized distributed gradient boosting.\n\nReference\n- \n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels. \n#### OUTPUT\n1. **model**: (Model) Trained XGBoost Regression model. \n#### PARAMETER\n1. **Feature Columns***: Feature column names. Only values in numeric type are possible.\n\n2. **Label Column***: The column designated for the labels of data. It should be numeric type as it is for regression.\n\n3. **Objective**: Specify the learning task and the corresponding learning objective or a custom objective function to be used. The objective options are below:\n\treg:linear - Regression task with squared loss\n\tcount:poisson - Poisson regression for count data, output mean of poisson distribution\n\tsurvival:cox - Cox regression for right censored survival time data (negative values are considered right censored)\n\trank:pairwise - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized\n\treg:gamma - gamma regression with log-link. Output is a mean of gamma distribution. It might be useful, e.g., for modeling insurance claims severity, or for any outcome that might be gamma-distributed\n\treg:tweedie - Tweedie regression with log-link. It might be useful, e.g., for modeling total loss in insurance, or for any outcome that might be Tweedie-distributed\n * Available Options : `Linear regression with squared loss`, `Poisson regression for count data`, `Cox regression for right censored survival time`, `Pairwise ranking`, `Gamma regression with log-link`, `Tweedie regression with log-link`\n\n4. **Max Depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Normally 6 is suggested for the depth. Increasing this value will make the model more complex and more likely to overfit. 0 is only accepted in loss guided growing policy when tree_method is set as hist and it indicates no limit on depth. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\n5. **Learning Rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. 0.3 is suggested.\n\n6. **Number of Trees**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\n7. **Importance Type**: `Importance Type` is a feature importance type property.\n * Available Options : `Gain`, `Weight`, `Cover`, `Total Gain`, `Total Cover`\n\n8. **Fraction of Samples**: The `fraction of samples` is to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `Fraction of samples` interacts with the parameter `Number of Trees`. Choosing `Fraction of samples` < 1.0 leads to a reduction of variance and an increase in bias.\n\n9. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n10. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\nxgb_regression_train(table, feature_cols, label_col, max_depth=4, learning_rate=0.01, n_estimators=100, random_state=0, silent=True, objective='reg:linear', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, base_score=0.5, seed=None, missing=None, sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True, xgb_model=None, sample_weight_eval_set=None, importance_type='gain')\n```\n\n#### INPUT\n1. **table***: (Table) Training data in a Table. It must contain at least one column for labels. \n#### OUTPUT\n1. **model**: (Model) Trained XGBoost Regression model.\n#### PARAMETER\n1. **feature_cols***: Feature column names. Only values in numeric type are possible.\n\t* Type: *list[str]*\n2. **label_col***: The column designated for the labels of data. It should be numeric type as it is for regression.\n\t* Type: *str*\n3. **objective**: Specify the learning task and the corresponding learning objective or a custom objective function to be used. The objective options are below:\n\treg:linear - Regression task with squared loss\n\tcount:poisson - Poisson regression for count data, output mean of poisson distribution\n\tsurvival:cox - Cox regression for right censored survival time data (negative values are considered right censored)\n\trank:pairwise - Use LambdaMART to perform pairwise ranking where the pairwise loss is minimized\n\treg:gamma - gamma regression with log-link. Output is a mean of gamma distribution. It might be useful, e.g., for modeling insurance claims severity, or for any outcome that might be gamma-distributed\n\treg:tweedie - Tweedie regression with log-link. It might be useful, e.g., for modeling total loss in insurance, or for any outcome that might be Tweedie-distributed\n\t* Type: *str*\n\t* Default / Range: reg:linear ( reg:linear | count:poisson | survival:cox | rank:pairwise | reg:gamma | reg:tweedie )\n4. **max_depth**: Maximum depth of the tree. For example, depth 0 means 1 leaf node and depth 1 means 1 internal node + 2 leaf nodes. Normally 6 is suggested for the depth. Increasing this value will make the model more complex and more likely to overfit. 0 is only accepted in loss guided growing policy when tree_method is set as hist and it indicates no limit on depth. Beware that XGBoost aggressively consumes memory when training a deep tree.\n\t* Type: *int*\n\t* Default / Range: 3 (1 <= value)\n5. **learning_rate**: Step size shrinkage used in update to prevents overfitting. After each boosting step, we can directly get the weights of new features, and the `learning rate` shrinks the feature weights to make the boosting process more conservative. 0.3 is suggested.\n\t* Type: *float*\n\t* Default / Range: 0.1 (0 <= value)\n6. **n_estimators**: Number of generated trees. If 1, then no bootstrapping is used. If > 1, then bootstrapping will be\n performed.\n\t* Type: *int*\n\t* Default / Range: 100 (1 <= value)\n7. **importance_type**: `importance type` is a feature importance type property.\n\t* Type: *str*\n\t* Default / Range: gain ( gain | weight | cover | total_gain | total_cover )\n8. **subsample**: Subsample to be used for fitting the individual base learners. If smaller than 1.0 this results in Stochastic Gradient Boosting. `subsample` interacts with the parameter `n_estimators`. Choosing `subsample` < 1.0 leads to a reduction of variance and an increase in bias.\n\t* Type: *float*\n\t* Default / Range: 1.0 (0 < value <= 1.0)\n9. **random_state**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n10. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n11. **silent** : Whether print messages during construction\n - Type : _bool_ \n - Default : True\n12. **booster** : Specify which booster to use\n - Type : _str_ \n - Default / Range : gbtree ( gbtree | gblinear | dart )\n13. **n_jobs** : Number of parallel threads used to run xgboost.\n - Type : _int_ \n - Default / Range: 1 (1 <= value)\n14. **nthread** : Number of threads to use for loading data from numpy array. If -1, uses maximum threads available on the system.\n - Type : _int_ \n - Default / Range: None (-1 <= value)\n15. **gamma** : Minimum loss reduction required to make a further partition on a leaf node of the tree.\n - Type : _float_ \n - Default / Range: 0 (0 <= value)\n16. **min_child_weight** : Minimum sum of instance weight(hessian) needed in a child.\n - Type : _int_ \n - Default / Range: 1 (0 <= value)\n17. **max_delta_step** : Maximum delta step we allow each tree’s weight estimation to be.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n18. **colsample_bytree** : `subsample` ratio of columns when constructing each tree.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n19. **colsample_bylevel** : `subsample` ratio of columns for each level.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n20. **reg_alpha** : L1 regularization term on weights.\n - Type : _float_ \n - Default value: 0\n21. **reg_lambda** : L2 regularization term on weights.\n - Type : _float_ \n - Default value: 1\n22. **scale_pos_weight** : Balancing of positive and negative weights.\n - Type : _float_ \n - Default / Range: 1 (0 <= value)\n23. **base_score** : The initial prediction score of all instances, global bias.\n - Type : _float_ \n - Default / Range: 0.5 (0 <= value)\n24. **seed** : Random seed. Use the same seed in order to reproduce the same results.\n - Type : _int_ \n - Default / Range: 0 (0 <= value)\n25. **missing** : Value in the data which needs to be present as a missing value.\n - Type : _float_ \n - Default / Range: None (0 <= value)\n26. **sample_weight** : instance weights\n - Type : _list_[_float_] \n - Default / Range: None (0 <= value)\n27. **eval_set** : A list of (X, y) tuple pairs to use as validation sets, for which metrics will be computed. Validation metrics will help us track the performance of the model.\n - Type : _list_[_tuple_] \n - Default value: None\n28. **eval_metric** : If a str, should be a built-in evaluation metric to use. If a list of str, should be the list of multiple built-in evaluation metrics to use. If callable, a custom evaluation metric. The call signature is func(y_predicted, y_true) where y_true will be a DMatrix object such that you may need to call the get_label method. It must return a str, value pair where the str is a name for the evaluation and value is the value of the evaluation function. The callable custom objective is always minimized.\n default metric will be assigned according to objective. 1) poisson-nloglik: for Poisson regression (count:poisson), 2) gamma-nloglik: for gamma regression (reg:gamma), 3) cox-nloglik: for Cox proportional hazards regression (survival:cox), 4) gamma-deviance: for gamma regression (reg:gamma)\n - Type : _str_ or _list[_str_]\n - Default / Range : None ( rmse | rmsle | mae )\n29. **early_stopping_rounds** : Activates early stopping. Cross-Validation metric (average of validation metric computed over CV folds) needs to improve at least once in every `early_stopping_rounds` round(s) to continue training. The last entry in the evaluation history will represent the best iteration. If there’s more than one metric in the eval_metric parameter given in params, the last metric will be used for early stopping.\n - Type : _int_ \n - Default / Range: None (0 <= value)\n30. **verbose** : If `verbose` and an `eval_set` is used, writes the evaluation metric measured on the validation set to stderr.\n - Type : _bool_ \n - Default value: True\n31. **xgb_model** : file name of stored XGBoost model or `booster` instance XGBoost model to be loaded before training (allows training continuation).\n - Type : _str_ \n - Default value: None\n32. **sample_weight_eval_set** : A list of the form [L\\_1, L\\_2, …, L\\_n], where each L\\_i is a list of instance weights on the i-th validation set.\n - Type : _list_[_str_] \n - Default value: None\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used to train a XGBoost for regression. The generated model is afterward applied to a test dataset to predict the value of _petal\\_width_ by using XGBoost Regression Predict function. The parameter settings used in the function are shown below. \n\n++Parameters++\n1. **Feature Columns***: sepal\\_length, sepal\\_width\n2. **Label Column***: petal\\_width\n3. **Objective**: Linear regression with squared loss\n4. **Max Depth**: 3\n5. **Learning Rate**: 0.1 \n6. **Number of Trees**: 100\n7. **Importance Type**: Gain\n8. **Fraction of Samples**: 1.0\n9. **Seed**: 0\n10. **Group By**: None \n\n\n### Python\n\n```\nfrom brightics.function.regression import xgb_regression_train\ninput_table = inputs[0]\nresult = xgb_regression_train(table=input_table,\n feature_cols=['sepal_length', 'sepal_width'],\n label_col=['petal_width'], max_depth=4, learning_rate=0.01, n_estimators=100,\n random_state=0, silent=True, objective='reg:linear', booster='gbtree', n_jobs=1,\n nthread=None, gamma=0, min_child_weight=1, max_delta_step=0, subsample=1,\n colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, scale_pos_weight=1,\n base_score=0.5, seed=None, missing=None, sample_weight=None, eval_set=None,\n eval_metric=None, early_stopping_rounds=None, verbose=True,\n xgb_model=None, sample_weight_eval_set=None, importance_type='gain')\noutput = result['model']\n```\nIn this python script, sample_iris data is used to train a XGBoost for regression. The generated model is afterward applied to a test dataset to predict the value of _petal\\_width_ by using XGBoost Regression Predict function.\n", "exampleModels": [ { "fileName": "brightics.function.regression$xgb_regression.json", diff --git a/function/python/brightics/function/regression/pls_regression.py b/function/python/brightics/function/regression/pls_regression.py new file mode 100644 index 000000000..319366c33 --- /dev/null +++ b/function/python/brightics/function/regression/pls_regression.py @@ -0,0 +1,106 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.utils import check_required_parameters +from brightics.common.groupby import _function_by_group +from sklearn.metrics import mean_absolute_error +from sklearn.metrics import mean_squared_error +from sklearn.metrics import r2_score +import pandas as pd +from brightics.common.repr import strip_margin +from brightics.common.repr import BrtcReprBuilder +from brightics.common.repr import pandasDF2MD +from brightics.function.utils import _model_dict +from sklearn.cross_decomposition import PLSRegression as PLS +from brightics.common.validation import validate +from brightics.common.classify_input_type import check_col_type + + +def pls_regression_train(table, group_by=None, **params): + params = get_default_from_parameters_if_required( + params, _pls_regression_train) + check_required_parameters(_pls_regression_train, params, ['table']) + if group_by is not None: + grouped_model = _function_by_group( + _pls_regression_train, table, group_by=group_by, **params) + return grouped_model + else: + return _pls_regression_train(table, **params) + + +def _pls_regression_train(table, feature_cols, label_cols, n_components=2, scale=True, max_iter=500, tol=1e-6): + pls_model = PLS(n_components=n_components, scale=scale, max_iter=max_iter, tol=tol) + _, features = check_col_type(table, feature_cols) + _, labels = check_col_type(table, label_cols) + pls_model.fit(features, labels) + predict = pls_model.predict(features) + _mean_absolute_error = mean_absolute_error(labels, predict) + _mean_squared_error = mean_squared_error(labels, predict) + _r2_score = r2_score(labels, predict) + result_table = pd.DataFrame.from_items([ + ['Metric', ['Mean Absolute Error', 'Mean Squared Error', 'R2 Score']], + ['Score', [_mean_absolute_error, _mean_squared_error, _r2_score]] + ]) + label_name = { + 'n_components': 'Number of components', + 'scale': "Scale", + 'max_iter': 'Max iteration', + 'tol': 'Tolerance' + } + get_param = pls_model.get_params() + param_table = pd.DataFrame.from_items([ + ['Parameter', list(label_name.values())], + ['Value', [get_param[x] for x in list(label_name.keys())]] + ]) + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ### PLS Regression Result + | {result} + | ### Parameters + | {list_parameters} + """.format(result=pandasDF2MD(result_table), list_parameters=pandasDF2MD(param_table) + ))) + model = _model_dict('pls_regression_model') + model['feature_cols'] = feature_cols + model['label'] = label_cols + model['mean_absolute_error'] = _mean_absolute_error + model['mean_squared_error'] = _mean_squared_error + model['r2_score'] = _r2_score + model['max_iter'] = max_iter + model['tol'] = tol + model['pls_model'] = pls_model + model['_repr_brtc_'] = rb.get() + return {'model': model} + +def pls_regression_predict(table, model, **params): + check_required_parameters(_pls_regression_predict, + params, ['table', 'model']) + if '_grouped_data' in model: + return _function_by_group(_pls_regression_predict, table, model, **params) + else: + return _pls_regression_predict(table, model, **params) + + +def _pls_regression_predict(table, model, prediction_col='prediction'): + result = table.copy() + feature_cols = model['feature_cols'] + _, features = check_col_type(result, feature_cols) + pls_model = model['pls_model'] + prediction = pls_model.predict(features) + for i in range(prediction.shape[-1]): + result[prediction_col+"_{}".format(i)] = prediction[:, i] + return {'out_table': result} diff --git a/function/python/brightics/function/regression/random_forest_regression.py b/function/python/brightics/function/regression/random_forest_regression.py index 85fd52cd2..8508ed7b8 100644 --- a/function/python/brightics/function/regression/random_forest_regression.py +++ b/function/python/brightics/function/regression/random_forest_regression.py @@ -105,7 +105,7 @@ def _random_forest_regression_train(table, feature_cols, label_col, 'min_impurity_decrease': min_impurity_decrease, 'random_state': random_state} - model = dict() + model = _model_dict('random_forest_regression_model') model['regressor'] = regressor model['params'] = params diff --git a/function/python/brightics/function/regression/regression_predict.py b/function/python/brightics/function/regression/regression_predict.py index 4815b167f..b5dd42eb3 100644 --- a/function/python/brightics/function/regression/regression_predict.py +++ b/function/python/brightics/function/regression/regression_predict.py @@ -18,6 +18,12 @@ from .linear_regression import linear_regression_predict from .decision_tree_regression import decision_tree_regression_predict from .random_forest_regression import random_forest_regression_predict +from .ada_boost_regression import ada_boost_regression_predict +from .glm import glm_predict +from .isotonic_regression import isotonic_regression_predict +from .mlp_regression import mlp_regression_predict +from .xgb_regression import xgb_regression_predict +from .pls_regression import pls_regression_predict import numpy as np @@ -40,5 +46,16 @@ def regression_predict(table, model, prediction_col='prediction'): return random_forest_regression_predict(table = table, model = model, prediction_col = prediction_col) if 'forest_regression' in tmp_model['_type'] or 'gbt_regression' in tmp_model['_type']: return random_forest_regression_predict(table = table, model = model, prediction_col = prediction_col) + if tmp_model['_type'] == 'ada_boost_regression_model': + return ada_boost_regression_predict(table=table, model=model, pred_col_name=prediction_col) + if tmp_model['_type'] == 'glm_model': + return glm_predict(table=table, model=model, prediction_col=prediction_col) + if tmp_model['_type'] == 'mlp_regression_model': + return mlp_regression_predict(table=table, model=model, prediction_col=prediction_col) + if tmp_model['_type'] == 'xgb_regression_model': + return xgb_regression_predict(table=table, model=model, prediction_col=prediction_col) + if tmp_model['_type'] == 'isotonic_regression_model': + return isotonic_regression_predict(table=table, model=model, prediction_col=prediction_col) + if tmp_model['_type'] == 'pls_regression_model': + return pls_regression_predict(table=table, model=model, prediction_col=prediction_col) raise_runtime_error('''It is not supported yet.''') - diff --git a/function/python/brightics/function/regression/test/isotonic_regression_test.py b/function/python/brightics/function/regression/test/isotonic_regression_test.py new file mode 100644 index 000000000..efdc6c438 --- /dev/null +++ b/function/python/brightics/function/regression/test/isotonic_regression_test.py @@ -0,0 +1,46 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.function.regression.isotonic_regression import isotonic_regression_train +from brightics.function.regression.isotonic_regression import isotonic_regression_predict +from brightics.common.datasets import load_iris +import unittest +import pandas as pd +import numpy as np +import HtmlTestRunner +import os + + +class IsotonicRegression(unittest.TestCase): + + def setUp(self): + print("*** Isotonic Regression Train/Predict UnitTest Start ***") + self.testdata = load_iris() + + def tearDown(self): + print("*** Isotonic Regression Train/Predict UnitTest End ***") + + def test(self): + isotonic_train = isotonic_regression_train(self.testdata, feature_col='sepal_length', label_col='petal_width') + predict = isotonic_regression_predict(self.testdata, isotonic_train['model'])['out_table']['prediction'] + desired_label = [0.44, 0.44, 0.2166667, 0.2166667, 0.44] + np.testing.assert_array_almost_equal(desired_label, [round(x, 7) for x in predict.values[:5]], 7, 'incorrect prediction') + + +if __name__ == '__main__': + filepath = os.path.dirname(os.path.abspath(__file__)) + reportFoler = filepath + "/../../../../../../../reports" + unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(combine_reports=True, output=reportFoler)) diff --git a/function/python/brightics/function/regression/xgb_regression.py b/function/python/brightics/function/regression/xgb_regression.py index 3c59d7ba5..0f9435920 100644 --- a/function/python/brightics/function/regression/xgb_regression.py +++ b/function/python/brightics/function/regression/xgb_regression.py @@ -16,6 +16,7 @@ from random import randint import pandas as pd +import numpy as np import matplotlib.pyplot as plt from xgboost import XGBRegressor from xgboost import plot_importance, plot_tree @@ -44,37 +45,37 @@ def xgb_regression_train(table, group_by=None, **params): def _xgb_regression_train(table, feature_cols, label_col, max_depth=3, learning_rate=0.1, n_estimators=100, - silent=True, objectibe='reg:linear', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, - max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, - scale_pos_weight=1, base_score=0.5, random_state=None, seed=None, missing=None, - sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True, - xgb_model=None, sample_weight_eval_set=None, importance_type='gain'): + silent=True, objectibe='reg:linear', booster='gbtree', n_jobs=1, nthread=None, gamma=0, min_child_weight=1, + max_delta_step=0, subsample=1, colsample_bytree=1, colsample_bylevel=1, reg_alpha=0, reg_lambda=1, + scale_pos_weight=1, base_score=0.5, random_state=None, seed=None, missing=None, + sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None, verbose=True, + xgb_model=None, sample_weight_eval_set=None, importance_type='gain'): if random_state is None: random_state = randint(-2**31, 2**31-1) regressor = XGBRegressor(max_depth=max_depth, - learning_rate=learning_rate, - n_estimators=n_estimators, - silent=silent, - objective=objectibe, - booster=booster, - n_jobs=n_jobs, - nthread=nthread, - gamma=gamma, - min_child_weight=min_child_weight, - max_delta_step=max_delta_step, - subsample=subsample, - colsample_bytree=colsample_bytree, - colsample_bylevel=colsample_bylevel, - reg_alpha=reg_alpha, - reg_lambda=reg_lambda, - scale_pos_weight=scale_pos_weight, - base_score=base_score, - random_state=random_state, - seed=seed, - missing=missing, - importance_type=importance_type) + learning_rate=learning_rate, + n_estimators=n_estimators, + silent=silent, + objective=objectibe, + booster=booster, + n_jobs=n_jobs, + nthread=nthread, + gamma=gamma, + min_child_weight=min_child_weight, + max_delta_step=max_delta_step, + subsample=subsample, + colsample_bytree=colsample_bytree, + colsample_bylevel=colsample_bylevel, + reg_alpha=reg_alpha, + reg_lambda=reg_lambda, + scale_pos_weight=scale_pos_weight, + base_score=base_score, + random_state=random_state, + seed=seed, + missing=missing, + importance_type=importance_type) feature_names, features = check_col_type(table, feature_cols) label = table[label_col] regressor.fit(features, label, @@ -85,10 +86,11 @@ def _xgb_regression_train(table, feature_cols, label_col, max_depth=3, learning_ get_param = regressor.get_params() feature_importance = regressor.feature_importances_ # plt.rcdefaults() - plot_importance(regressor) - plt.tight_layout() - fig_plot_importance = plt2MD(plt) - plt.clf() + # plot_importance(regressor) + # plt.tight_layout() + # fig_plot_importance = plt2MD(plt) + fig_plot_importance = _plot_feature_importances(feature_cols, regressor) + # plt.clf() # plt.rcParams['figure.dpi'] = figure_dpi # plot_tree(regressor) # fig_plot_tree_UT = plt2MD(plt) @@ -166,3 +168,22 @@ def _xgb_regression_predict(table, model, prediction_col='prediction', out_table[prediction_col] = prediction return {'out_table': out_table} + + +def _plot_feature_importances(feature_cols, regressor): + + feature_importance = regressor.feature_importances_ + indices = np.argsort(feature_importance) + sorted_feature_cols = np.array(feature_cols)[indices] + + plt.barh(range(len(indices)), feature_importance[indices], color='b', align='center') + for i, v in enumerate(feature_importance[indices]): + plt.text(v, i, " {:.2f}".format(v), color='b', va='center', fontweight='bold') + + plt.yticks(range(len(indices)), sorted_feature_cols) + plt.xlabel("Feature importance") + plt.ylabel("Feature") + plt.tight_layout() + fig_feature_importances = plt2MD(plt) + plt.close() + return fig_feature_importances \ No newline at end of file diff --git a/function/python/brightics/function/statistics/__init__.py b/function/python/brightics/function/statistics/__init__.py index 58449a09e..e46b030b4 100644 --- a/function/python/brightics/function/statistics/__init__.py +++ b/function/python/brightics/function/statistics/__init__.py @@ -1,39 +1,41 @@ -""" - Copyright 2019 Samsung SDS - - Licensed 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 - - http://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. -""" - -from .profile_table import profile_table -from .correlation import correlation -from .pairplot import pairplot -from .anova import bartletts_test -from .anova import oneway_anova -from .anova import twoway_anova -from .anova import tukeys_range_test -from .ttest import one_sample_ttest -from .ttest import two_sample_ttest_for_stacked_data -from .ttest import paired_ttest -from .ftest import ftest_for_stacked_data -from .chi_square_test import chi_square_test_of_independence -from .summary import statistic_summary, statistic_derivation, string_summary -from .cross_table import cross_table -from .levene import levenes_test -from .duncan_test import duncan_test -from .ljung_box_test import ljung_box_test -from .mann_whitney_test import mann_whitney_test -from .wilcoxon_test import wilcoxon_test -from .friedman_test import friedman_test -from .kruskal_wallis_test import kruskal_wallis_test -from .normality_test import normality_test -from .kernel_density_estimation import kernel_density_estimation +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from .profile_table import profile_table +from .correlation import correlation +from .pairplot import pairplot +from .anova import bartletts_test +from .anova import oneway_anova +from .anova import twoway_anova +from .anova import tukeys_range_test +from .ttest import one_sample_ttest +from .ttest import two_sample_ttest_for_stacked_data +from .ttest import paired_ttest +from .ftest import ftest_for_stacked_data +from .chi_square_test import chi_square_test_of_independence +from .summary import statistic_summary, statistic_derivation, string_summary +from .cross_table import cross_table +from .cross_table import cross_table2 +from .levene import levenes_test +from .duncan_test import duncan_test +from .ljung_box_test import ljung_box_test +from .mann_whitney_test import mann_whitney_test +from .wilcoxon_test import wilcoxon_test +from .wilcoxon_test2 import wilcoxon_test2 +from .friedman_test import friedman_test +from .kruskal_wallis_test import kruskal_wallis_test +from .normality_test import normality_test +from .kernel_density_estimation import kernel_density_estimation diff --git a/function/python/brightics/function/statistics/anova.py b/function/python/brightics/function/statistics/anova.py index 3826dede5..2733c0553 100644 --- a/function/python/brightics/function/statistics/anova.py +++ b/function/python/brightics/function/statistics/anova.py @@ -169,7 +169,8 @@ def _twoway_anova(table, response_cols, factor_cols): """)) if n == 1: - groups = table[factor_cols].unique() + _factor_col = factor_cols[0] + groups = table[_factor_col].unique() groups.sort() sum_len = np.sum([len(str(group)) for group in groups]) @@ -181,7 +182,7 @@ def _twoway_anova(table, response_cols, factor_cols): result['_grouped_data'][response_col] = dict() if n == 1: - ax = sns.boxplot(x=factor_cols, y=response_col, data=table, order=groups) + ax = sns.boxplot(x=_factor_col, y=response_col, data=table, order=groups) if sum_len > 512: ax.set_xticklabels(ax.get_xticklabels(), rotation=90) elif sum_len > 64: diff --git a/function/python/brightics/function/statistics/correlation.py b/function/python/brightics/function/statistics/correlation.py index 29402a9b3..f0be6654e 100644 --- a/function/python/brightics/function/statistics/correlation.py +++ b/function/python/brightics/function/statistics/correlation.py @@ -42,19 +42,21 @@ def _correlation(table, vars, method='pearson', display_plt=True, height=2.5, co size = len(vars) result_arr = [] - + cov_xy = table[vars].cov() + for i in range(size): for j in range(i): + cov_temp = cov_xy[vars[i]][vars[j]] if method == 'pearson': r, p = stats.pearsonr(table[vars[i]], table[vars[j]]) elif method == 'spearman': r, p = stats.spearmanr(table[vars[i]], table[vars[j]]) else: r, p = stats.kendalltau(table[vars[i]], table[vars[j]]) + + result_arr.append([vars[i], vars[j], r, p, cov_temp]) - result_arr.append([vars[i], vars[j], r, p]) - - df_result = pd.DataFrame(result_arr, columns=['x', 'y', 'corr', 'p_value']) + df_result = pd.DataFrame(result_arr, columns=['x', 'y', 'corr', 'p_value', 'cov']) rb = BrtcReprBuilder() if display_plt: diff --git a/function/python/brightics/function/statistics/cross_table.py b/function/python/brightics/function/statistics/cross_table.py index ff81c9fbb..c3647b17a 100644 --- a/function/python/brightics/function/statistics/cross_table.py +++ b/function/python/brightics/function/statistics/cross_table.py @@ -104,3 +104,107 @@ def _cross_table(table, input_cols_1, input_cols_2, result='N', margins=False): model['_repr_brtc_'] = rb.get() return {'model': model} + + +def cross_table2(table, group_by=None, **params): + check_required_parameters(_cross_table2, params, ['table']) + if group_by is not None: + return _function_by_group(_cross_table2, table, group_by=group_by, **params) + else: + return _cross_table2(table, **params) + + +def _cross_table2(table, input_cols_1, input_cols_2, result=None, + add_info=None, row_total_str='row_total', col_total_str='col_total', contents_col='contents'): + df1 = [table[col] for col in input_cols_1] + df2 = [table[col] for col in input_cols_2] + if result is None: + result = ['N'] + if add_info is None: + add_info = [] + if not result: + raise_runtime_error("Please check 'result'.") + tables = [] + + if 'N' in result: + tmp_table1 = pd.crosstab(df1, df2, margins=False) + + if 'row_tot' in add_info: + tmp_sum = pd.DataFrame(tmp_table1.sum(axis=1), columns=[row_total_str]) + tmp_table1[row_total_str] = tmp_sum + if 'column_tot' in add_info: + tmp_sum = pd.DataFrame(tmp_table1.sum(axis=0), columns=[col_total_str]).T + tmp_table1 = pd.concat([tmp_table1, tmp_sum]) + + tmp_table1[contents_col] = ['N'] * tmp_table1.shape[0] + tables.append(tmp_table1) + + if 'N / Row Total' in result: + tmp_table2 = pd.crosstab(df1, df2, normalize='index') + tmp_table2[contents_col] = ['N / Row Total'] * tmp_table2.shape[0] + tables.append(tmp_table2) + + if 'N / Column Total' in result: + tmp_table3 = pd.crosstab(df1, df2, normalize='columns') + tmp_table3[contents_col] = ['N / Column Total'] * tmp_table3.shape[0] + tables.append(tmp_table3) + + if 'N / Total' in result: + tmp_table4 = pd.crosstab(df1, df2, normalize='all') + + if 'row_tot' in add_info: + tmp_sum = pd.DataFrame(tmp_table4.sum(axis=1), columns=[row_total_str]) + tmp_table4[row_total_str] = tmp_sum + if 'column_tot' in add_info: + tmp_sum = pd.DataFrame(tmp_table4.sum(axis=0), columns=[col_total_str]).T + tmp_table4 = pd.concat([tmp_table4, tmp_sum]) + + tmp_table4[contents_col] = ['N / Total'] * tmp_table4.shape[0] + tables.append(tmp_table4) + result_table = pd.concat(tables) + + if len(input_cols_1) == 1: + result_table['new_index'] = result_table.index + else: + result_table['new_index'] = ['_'.join([str(x).replace('.', '_') for x in idx]) for idx in result_table.index] + result_table = result_table.sort_values(by=['new_index', contents_col]) + result_table = result_table.drop(['new_index'], axis=1) + + # each row and column name + row_names = list(result_table.index)[:] + if len(input_cols_1) == 1: + joined_row_name = [str(i) for i in row_names] + else: + if 'column_tot' in add_info: + if ('N' not in result) and ('N / Total' not in result): + joined_row_name = ['_'.join(str(s) for s in row_names[i]) for i in range(len(row_names))] + elif ('N' in result) and ('N / Total' in result): + joined_row_name = ['_'.join(str(s) for s in row_names[i]) for i in range(len(row_names) - 2)] + [row_names[-2]] + [row_names[-1]] + else: + joined_row_name = ['_'.join(str(s) for s in row_names[i]) for i in range(len(row_names) - 1)] + [row_names[-1]] + else: + joined_row_name = ['_'.join(str(s) for s in row_names[i]) for i in range(len(row_names))] + + # joined_row_name = joined_row_name.astype(str) + + column_names = list(result_table.columns)[:] + if len(input_cols_2) == 1: + joined_column_name = [str(i).replace('.','_') for i in column_names] + else: + if 'row_tot' in add_info: + if ('N' not in result) and ('N / Total' not in result): + joined_column_name = ['_' + '_'.join(str(s) for s in column_names[i]).replace('.','_') for i in range(len(column_names))] + else: + joined_column_name = ['_' + '_'.join(str(s) for s in column_names[i]).replace('.','_') for i in range(len(column_names) - 1)] + [column_names[-1][0]] + else: + joined_column_name = ['_' + '_'.join(str(s) for s in column_names[i]).replace('.','_') for i in range(len(column_names))] + + input_cols = input_cols_1 + input_cols_2 + + # cross table + result_table.insert(loc=0, column=' ', value=joined_row_name) + result_table.columns = np.append('_'.join(input_cols), joined_column_name) + # result_table = result_table.rename(columns={result_table.columns[1]: contents_col}) + result_table.reset_index(drop=True, inplace=True) + + return {'out_table': result_table} \ No newline at end of file diff --git a/function/python/brightics/function/statistics/friedman_test.py b/function/python/brightics/function/statistics/friedman_test.py index 805c284b6..21458863a 100644 --- a/function/python/brightics/function/statistics/friedman_test.py +++ b/function/python/brightics/function/statistics/friedman_test.py @@ -53,21 +53,23 @@ def _friedman_test(table, response_cols, factor_col): samples[name] = groups[name] else: samples[name] = groups[name].sample(n=min_length) + group_name = [] + stats = [] + pvals = [] for response_col in response_cols: - stats, pval = friedmanchisquare(*[x[response_col] for x in samples.values()]) - rb.addMD(strip_margin(""" - | ## {response_col} by {factor_col} - | - | ### Statistics value: {stats} - | - | ### P value: {pval} - """.format(response_col=response_col, factor_col=factor_col, stats=stats, pval=pval))) + stat, pval = friedmanchisquare(*[x[response_col] for x in samples.values()]) + group_name.append(response_col + ' by ' + factor_col) + stats.append(stat) + pvals.append(pval) name = response_col + '_' + factor_col result[name] = dict() - result[name]['Statistics'] = stats + result[name]['Statistics'] = stat result[name]['P value'] = pval + rb.addMD(strip_margin(""" + | {table} + """.format(table=pandasDF2MD(pd.DataFrame({'': group_name, 'Test Statistics': stats, 'P Value': pvals}))))) result['_repr_brtc_'] = rb.get() return {'result': result} diff --git a/function/python/brightics/function/statistics/kruskal_wallis_test.py b/function/python/brightics/function/statistics/kruskal_wallis_test.py index 4b5d7b6bb..2155c6898 100644 --- a/function/python/brightics/function/statistics/kruskal_wallis_test.py +++ b/function/python/brightics/function/statistics/kruskal_wallis_test.py @@ -47,21 +47,27 @@ def _kruskal_wallis_test(table, response_cols, factor_col, nan_policy='propagate for name, group in table.groupby(factor_col): groups[name] = group + group_name = [] + df = [len(groups) - 1] * len(response_cols) + stats = [] + pvals = [] for response_col in response_cols: - stats, pval = kruskal(*[x[response_col] for x in groups.values()]) - rb.addMD(strip_margin(""" - | ## {response_col} by {factor_col} - | - | ### Statistics value: {stats} - | - | ### P value: {pval} - """.format(response_col=response_col, factor_col=factor_col, stats=stats, pval=pval))) + stat, pval = kruskal(*[x[response_col] for x in groups.values()]) + group_name.append(response_col + ' by ' + factor_col) + stats.append(stat) + pvals.append(pval) name = response_col + '_' + factor_col result[name] = dict() - result[name]['Statistics'] = stats + result[name]['Statistics'] = stat result[name]['P value'] = pval + rb.addMD(strip_margin(""" + | {table} + """.format(table=pandasDF2MD(pd.DataFrame({'': group_name, + 'Degree of Freedom': df, + 'Test Statistics': stats, + 'P value': pvals}))))) result['_repr_brtc_'] = rb.get() return {'result': result} diff --git a/function/python/brightics/function/statistics/mann_whitney_test.py b/function/python/brightics/function/statistics/mann_whitney_test.py index 4cab3e188..7a3f6991d 100644 --- a/function/python/brightics/function/statistics/mann_whitney_test.py +++ b/function/python/brightics/function/statistics/mann_whitney_test.py @@ -48,21 +48,23 @@ def _mann_whitney_test(table, response_col, factor_col, use_continuity=True): uniq_factor = table[factor_col].unique() for name in uniq_factor: groups[name] = np.array(table[response_col])[np.where(table[factor_col] == name)] + group_name = [] + stats = [] + pvals = [] for name1, name2 in itertools.combinations(uniq_factor, 2): - stats, pval = mannwhitneyu(groups[name1], groups[name2], use_continuity=use_continuity) - rb.addMD(strip_margin(""" - | ## {name1} vs {name2} - | - | ### Statistics U value: {stats} - | - | ### P value: {pval} - """.format(name1=name1, name2=name2, stats=stats, pval=pval))) + name = str(name1) + ' vs ' + str(name2) + stat, pval = mannwhitneyu(groups[name1], groups[name2], use_continuity=use_continuity) + group_name.append(name) + stats.append(stat) + pvals.append(pval) - name = str(name1) + '_' + str(name2) result[name] = dict() - result[name]['Statistics'] = stats + result[name]['Statistics'] = stat result[name]['P value'] = pval + rb.addMD(strip_margin(""" + | {table} + """.format(table=pandasDF2MD(pd.DataFrame({'': group_name, 'Test Statistics': stats, 'P Value': pvals}))))) result['_repr_brtc_'] = rb.get() return {'result': result} diff --git a/function/python/brightics/function/statistics/meta/cross_table.json b/function/python/brightics/function/statistics/meta/cross_table.json index e64737060..a9c420897 100644 --- a/function/python/brightics/function/statistics/meta/cross_table.json +++ b/function/python/brightics/function/statistics/meta/cross_table.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "statistics", "func": "brightics.function.statistics$cross_table00483", "name": "brightics.function.statistics$cross_table", diff --git a/function/python/brightics/function/statistics/meta/cross_table2.json b/function/python/brightics/function/statistics/meta/cross_table2.json new file mode 100644 index 000000000..d7bf336f7 --- /dev/null +++ b/function/python/brightics/function/statistics/meta/cross_table2.json @@ -0,0 +1,984 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "statistics", + "func": "brightics.function.statistics$cross_table2", + "name": "brightics.function.statistics$cross_table2", + "context": "python", + "label": "Cross Table", + "description": "In statistics, a crosstable is a type of table in a matrix format that displays the (multivariate) frequency distribution of the variables. They are heavily used in survey research, business intelligence, engineering and scientific research. They provide a basic picture of the interrelation between two variables and can help find interactions between them. This function provides cross table of the given columns.", + "tags": [], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a Table.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Cross Table result of the given `Input Columns`." + } + }, + "params": [ + { + "id": "input_cols_1", + "label": "Input Columns 1", + "description": "The first input column name.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "String" + ], + "multiple": true + }, + { + "id": "input_cols_2", + "label": "Input Columns 2", + "description": "The second input column name.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "String" + ], + "multiple": true + }, + { + "id": "result", + "label": "Contents", + "description": "Contents to be presented in the cross table.", + "visibleOption": [], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "N", + "value": "N", + "default": true + }, + { + "label": "N / Row Total", + "value": "N / Row Total", + "default": false + }, + { + "label": "N / Column Total", + "value": "N / Column Total", + "default": false + }, + { + "label": "N / Total", + "value": "N / Total", + "default": false + } + ], + "columnType": [] + }, + { + "id": "add_info", + "label": "Additional Information", + "description": "Add row/column margins (subtotals).", + "visibleOption": [], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Row Total", + "value": "row_tot", + "default": true + }, + { + "label": "Column Total", + "value": "column_tot", + "default": true + } + ], + "columnType": [] + }, + { + "id": "row_total_str", + "label": "Row Total Column Name", + "description": "Name of the column containing row totals.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "row_total", + "type": "String" + }, + { + "id": "col_total_str", + "label": "Column Total Row Name", + "description": "Name of the row containing column totals.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "col_total" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + }, + { + "id": "contents_col", + "label": "Contents Column Name", + "description": "Name of the column which contains content type of each row.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "globalVariable": false, + "placeHolder": "contents", + "type": "String", + "defaultValue": "" + } + ], + "summary": "This function is to create Cross Table." + }, + "md": { + "en": "# Cross Table\nThis function is to create Cross Table.\n\n## Description\nIn statistics, a crosstable is a type of table in a matrix format that displays the (multivariate) frequency distribution of the variables. They are heavily used in survey research, business intelligence, engineering and scientific research. They provide a basic picture of the interrelation between two variables and can help find interactions between them. This function provides cross table of the given columns.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Cross Table result of the given `Input Columns`.\n#### PARAMETER\n1. **Input Columns 1***: The first input column name.\n\n2. **Input Columns 2***: The second input column name.\n\n3. **Contents**: Contents to be presented in the cross table.\n * Available Options: `N`, `N / Row Total`, `N / Column Total`, `N / Total`\n\n4. **Additional Information**: Add row/column margins (subtotals).\n * Available Options: `Row Total`, `Column Total`\n\n5. **Row Total Column Name**: Name of the column containing row totals.\n\n6. **Column Total Row Name**: Name of the row containing column totals.\n\n7. **Group By**: Columns to group by.\n\n8. **Contents Column Name**: Name of the column which contains content type of each row.\n\t* Default value: contents\n\n### Python\n#### USAGE\n\n```\ncross_table2(table, input_cols_1, input_cols_2, result=None, add_info=None, row_total_str='row_total', col_total_str='col_total', contents_col='contents')\n```\n\n#### INPUT\n1. **table***: (Table) Data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Cross Table result of the given `Input Columns`.\n#### PARAMETER\n1. **input_cols_1***: The first input column name.\n\t* Type: *list[str]*\n2. **input_cols_2***: The second input column name.\n\t* Type: *list[str]*\n3. **result**: Contents to be presented in the cross table.\n\t* Type: *str*\n\t* Default / Range: N ( N | N / Row Total | N / Column Total | N / Total )\n4. **add_info**: Add row/column margins (subtotals).\n\t* Type: *str*\n\t* Default / Range: row_tot ( row_tot | column_tot )\n5. **row_total_str**: Name of the column containing row totals.\n\t* Type: *str*\n6. **col_total_str**: Name of the row containing column totals.\n\t* Type: *str*\n7. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n8. **contents_col**: Name of the column which contains content type of each row.\n\t* Type: *str*\n\t* Default value: \n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_adult data is used to create Cross Table. This table includes workclass and race to see the interrelation between them. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Columns 1***: workclass\n2. **Input Columns 2***: race\n3. **Contents**: N, N / Row Total, N / Column Total, N / Total\n4. **Additional Information**: Row Total, Column Total\n5. **Row Total Column Name**: a\n6. **Column Total Row Name**: b\n7. **Group By**: None\n8. **Contents Column Name**: contents\n\n\n\n### Python\n\n```\nfrom brightics.function.statistics import cross_table2\ninput_table = inputs[0]\nresult = cross_table2(table=input_table,\n input_cols_1=['workclass'],\n input_cols_2=['race'],\n\t\t\t\t\t result=['N', 'N / Row Total', 'N / Column Total', 'N / Total'],\n\t\t\t\t\t add_info=['row_tot', 'column_tot'],\n\t\t\t\t\t row_total_str='row_total',\n\t\t\t\t\t col_total_str='col_total',\n\t\t\t\t\t group_by=None,\n\t\t\t\t\t contents_col='contents')\nout_table = result['out_table']\n```\nIn this Python script, sample_adult data is used to create Cross Table. This table includes workclass and race to see the interrelation between them. The parameter settings used in the function are shown below.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "Cross Table.json", + "label": "Cross Table", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mrf55a724hwt7jd8", + "project_id": "p5dmzu78qb564crk", + "label": "Cross Table", + "contents": { + "mid": "mrf55a724hwt7jd8", + "type": "data", + "title": "Cross Table", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_adult.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585013781304", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "tnxtkq8ujfackfhhj3k8fm77" + } + ], + "layout": { + "type": "panel", + "id": "default-1585013781304" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tj5c52kjqdtpdhhm" + }, + "fid": "fn6wy7dwfdubqz3r" + }, + { + "persist-mode": "auto", + "func": "brightics.function.statistics$cross_table2", + "name": "brightics.function.statistics$cross_table2", + "param": { + "result": [ + "N", + "N / Row Total", + "N / Column Total", + "N / Total" + ], + "add_info": [ + "row_tot", + "column_tot" + ], + "input_cols_1": [ + "workclass" + ], + "input_cols_2": [ + "race" + ], + "row_total_str": "a", + "col_total_str": "b" + }, + "display": { + "label": "Cross Table", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593660151432", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "um8tj8a5jztm4w3zfsxi74f6" + } + ], + "layout": { + "type": "panel", + "id": "default-1593660151432" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593660151487", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "p4d6h3rpxfqupmk2uu5zmy74" + } + ], + "layout": { + "type": "panel", + "id": "default-1593660151487" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tj5c52kjqdtpdhhm" + }, + "outputs": { + "out_table": "t355szv4cuh793mf" + }, + "fid": "fxukpdjfek4x8gwq" + } + ], + "links": [ + { + "kid": "k7whgajv6d5pvun5", + "sourceFid": "fn6wy7dwfdubqz3r", + "targetFid": "fxukpdjfek4x8gwq" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-02T03:11:21.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-02T07:16:11.000Z", + "event_key": "2020_071611.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "brightics.function.statistics$cross_table.png", + "label": "brightics.function.statistics$cross_table.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_adult data is used to create Cross Table. This table includes workclass and race to see the interrelation between them. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Columns 1***: workclass\n2. **Input Columns 2***: race\n3. **Contents**: N, N / Row Total, N / Column Total, N / Total\n4. **Additional Information**: Row Total, Column Total\n5. **Row Total Column Name**: a\n6. **Column Total Row Name**: b\n7. **Group By**: None\n8. **Contents Column Name**: contents\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.statistics import cross_table2\r\ninput_table = inputs[0]\r\nresult = cross_table2(table=input_table,\r\n input_cols_1=['workclass'],\r\n input_cols_2=['race'],\r\n\t\t\t\t\t result=['N', 'N / Row Total', 'N / Column Total', 'N / Total'],\r\n\t\t\t\t\t add_info=['row_tot', 'column_tot'],\r\n\t\t\t\t\t row_total_str='row_total',\r\n\t\t\t\t\t col_total_str='col_total',\r\n\t\t\t\t\t group_by=None,\r\n\t\t\t\t\t contents_col='contents')\r\nout_table = result['out_table']", + "description": "In this Python script, sample_adult data is used to create Cross Table. This table includes workclass and race to see the interrelation between them. The parameter settings used in the function are shown below.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/statistics/meta/kruskal_wallis_test.json b/function/python/brightics/function/statistics/meta/kruskal_wallis_test.json index 1725c99a5..fea055e0e 100644 --- a/function/python/brightics/function/statistics/meta/kruskal_wallis_test.json +++ b/function/python/brightics/function/statistics/meta/kruskal_wallis_test.json @@ -8,7 +8,7 @@ "func": "brightics.function.statistics$kruskal_wallis_test", "name": "brightics.function.statistics$kruskal_wallis_test", "context": "python", - "label": "Kruskal-Wallis Test", + "label": "Kruskal Wallis Test", "description": "The Kruskal-Wallis test is a nonparametric test, and is used when the assumptions of one-way ANOVA are not met. Both the Kruskal-Wallis test and one-way ANOVA assess for significant differences on a continuous dependent variable by a categorical independent variable (with two or more groups). In the ANOVA, we assume that the dependent variable is normally distributed and there is approximately equal variance on the scores across groups. However, when using the Kruskal-Wallis Test, we do not have to make any of these assumptions. Therefore, the Kruskal-Wallis test can be used for both continuous and ordinal-level dependent variables. However, like most non-parametric tests, the Kruskal-Wallis Test is not as powerful as the ANOVA.\n\nReference\n+ ", "tags": [ "statistics" diff --git a/function/python/brightics/function/statistics/meta/mann_whitney_test.json b/function/python/brightics/function/statistics/meta/mann_whitney_test.json index 345bae219..7952b6e3c 100644 --- a/function/python/brightics/function/statistics/meta/mann_whitney_test.json +++ b/function/python/brightics/function/statistics/meta/mann_whitney_test.json @@ -8,7 +8,7 @@ "func": "brightics.function.statistics$mann_whitney_test", "name": "brightics.function.statistics$mann_whitney_test", "context": "python", - "label": "Mann-Whitney Test", + "label": "Mann Whitney Test", "description": "In statistics, the Mann–Whitney U test (also called the Mann–Whitney–Wilcoxon (MWW), Wilcoxon rank-sum test, or Wilcoxon–Mann–Whitney test) is a nonparametric test of the null hypothesis that it is equally likely that a randomly selected value from one sample will be less than or greater than a randomly selected value from a second sample. This test can be used to investigate whether two independent samples were selected from populations having the same distribution when the dependent variable is either ordinal or continuous, but not normally distributed. \n\nReference\n+ \n+ ", "tags": [ "statistics" diff --git a/function/python/brightics/function/statistics/meta/normality_test.json b/function/python/brightics/function/statistics/meta/normality_test.json index 79607f18e..f67f9adc5 100644 --- a/function/python/brightics/function/statistics/meta/normality_test.json +++ b/function/python/brightics/function/statistics/meta/normality_test.json @@ -664,25 +664,8 @@ } ], "preferences": {}, - "variables": { - "path": { - "type": "array[string]", - "value": [ - "" - ] - }, - "out_alias": { - "type": "string", - "value": "" - } - }, - "variableRef": [ - { - "param": { - "out-alias": "out_alias" - } - } - ], + "variables": {}, + "variableRef": [], "innerModels": {}, "inData": [], "outData": [], diff --git a/function/python/brightics/function/statistics/meta/one_sample_ttest.json b/function/python/brightics/function/statistics/meta/one_sample_ttest.json index c7b2f0ab7..302c1852c 100644 --- a/function/python/brightics/function/statistics/meta/one_sample_ttest.json +++ b/function/python/brightics/function/statistics/meta/one_sample_ttest.json @@ -381,7 +381,7 @@ }, { "persist-mode": "auto", - "func": "brightics.function.statistics$one_sample_ttest", + "func": "brightics.function.statistics$one_sample_ttest84543", "name": "brightics.function.statistics$one_sample_ttest", "param": { "alternatives": [ diff --git a/function/python/brightics/function/statistics/meta/statistic_derivation.json b/function/python/brightics/function/statistics/meta/statistic_derivation.json index 79c5bb607..179dd0a5e 100644 --- a/function/python/brightics/function/statistics/meta/statistic_derivation.json +++ b/function/python/brightics/function/statistics/meta/statistic_derivation.json @@ -81,17 +81,17 @@ "default": true }, { - "label": "Variance", + "label": "Variance of Population", "value": "variance", "default": false }, { - "label": "Standard Deviation", + "label": "Standard Deviation of Population", "value": "stddev", "default": false }, { - "label": "Skewness", + "label": "Skewness of Sample", "value": "skewness", "default": false }, @@ -101,12 +101,12 @@ "default": false }, { - "label": "Number of row", + "label": "Number of Row", "value": "nrow", "default": false }, { - "label": "Number of value", + "label": "Number of Value", "value": "num_of_value", "default": false }, @@ -164,7 +164,7 @@ "items": [], "columnType": [], "type": "Double", - "placeHolder": "50 (0 <= value <= 100)", + "placeHolder": "(0 <= value <= 100)", "min": 0, "max": 100 }, @@ -179,7 +179,7 @@ "items": [], "columnType": [], "type": "Double", - "placeHolder": "0.1 (0.0 <= value < 0.5)", + "placeHolder": "(0.0 <= value < 0.5)", "min": 0, "max": 0.5 }, diff --git a/function/python/brightics/function/statistics/meta/statistic_summary.json b/function/python/brightics/function/statistics/meta/statistic_summary.json index 704cc8027..5b0824c0e 100644 --- a/function/python/brightics/function/statistics/meta/statistic_summary.json +++ b/function/python/brightics/function/statistics/meta/statistic_summary.json @@ -81,17 +81,17 @@ "default": true }, { - "label": "Variance", + "label": "Variance of Population", "value": "variance", "default": false }, { - "label": "Standard Deviation", + "label": "Standard Deviation of Population", "value": "stddev", "default": false }, { - "label": "Skewness", + "label": "Skewness of Sample", "value": "skewness", "default": false }, @@ -101,12 +101,12 @@ "default": false }, { - "label": "Number of row", + "label": "Number of Row", "value": "nrow", "default": false }, { - "label": "Number of value", + "label": "Number of Value", "value": "num_of_value", "default": false }, @@ -164,7 +164,7 @@ "items": [], "columnType": [], "type": "Double", - "placeHolder": "50 (0 <= value <= 100)", + "placeHolder": "(0 <= value <= 100)", "min": 0, "max": 100 }, @@ -179,7 +179,7 @@ "items": [], "columnType": [], "type": "Double", - "placeHolder": "0.1 (0.0 <= value < 0.5)", + "placeHolder": "(0.0 <= value < 0.5)", "min": 0, "max": 0.5 }, diff --git a/function/python/brightics/function/statistics/meta/wilcoxon_test.json b/function/python/brightics/function/statistics/meta/wilcoxon_test.json index 22cd5c723..acdf576cf 100644 --- a/function/python/brightics/function/statistics/meta/wilcoxon_test.json +++ b/function/python/brightics/function/statistics/meta/wilcoxon_test.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "statistics", "func": "brightics.function.statistics$wilcoxon_test", "name": "brightics.function.statistics$wilcoxon_test", diff --git a/function/python/brightics/function/statistics/meta/wilcoxon_test2.json b/function/python/brightics/function/statistics/meta/wilcoxon_test2.json new file mode 100644 index 000000000..eefad7252 --- /dev/null +++ b/function/python/brightics/function/statistics/meta/wilcoxon_test2.json @@ -0,0 +1,711 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "statistics", + "func": "brightics.function.statistics$wilcoxon_test2", + "name": "brightics.function.statistics$wilcoxon_test2", + "context": "python", + "label": "Wilcoxon Test", + "description": "The Wilcoxon test(Wilcoxon signed-rank test) is a non-parametric statistical hypothesis test used to compare two related samples, matched samples, or repeated measurements on a single sample to assess whether their population mean ranks differ. It can be used as an alternative to the paired Student's t-test when the distribution of the differences between the two samples cannot be assumed to be normally distributed. This test is a nonparametric test that can be used to determine whether two dependent samples were selected from populations having the same distribution.\n\nReference\n+ ", + "tags": [ + "statistics" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "result": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a Table.", + "optional": false + }, + "result": { + "type": "model", + "desc": "It shows the result of Wilcoxon Test." + } + }, + "params": [ + { + "id": "first_col", + "label": "First Column", + "description": "Column to select as the first column.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double" + ], + "multiple": false + }, + { + "id": "second_col", + "label": "Second Column", + "description": "Column to select as the second column.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Long", + "Float", + "Double" + ], + "multiple": false + }, + { + "id": "zero_method", + "label": "Zero Method", + "description": "Choose a method of handling ties at zero. `pratt` includes zero-differences in the ranking process, but drops the ranks of the zeros. `wilcox` discards all zero-differences, the default. `zsplit` includes zero-differences in the ranking process and split the zero rank between positive and negative ones.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "pratt", + "value": "pratt", + "default": false + }, + { + "label": "wilcox", + "value": "wilcox", + "default": true + }, + { + "label": "zsplit", + "value": "zsplit", + "default": false + } + ], + "columnType": [], + "targetTable": [] + }, + { + "id": "correction", + "label": "Correction", + "description": "If `True`, apply continuity correction by adjusting the Wilcoxon rank statistic by 0.5 towards the mean value when computing the z-statistic.", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [], + "defaultValue": false + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.\n", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + } + ], + "summary": "This function is for Wilcoxon Test in statistics." + }, + "md": "# Wilcoxon Test\r\nThis function is for Wilcoxon Test in statistics.\r\n\r\n## Description\r\nThe Wilcoxon test(Wilcoxon signed-rank test) is a non-parametric statistical hypothesis test used to compare two related samples, matched samples, or repeated measurements on a single sample to assess whether their population mean ranks differ. It can be used as an alternative to the paired Student's t-test when the distribution of the differences between the two samples cannot be assumed to be normally distributed. This test is a nonparametric test that can be used to determine whether two dependent samples were selected from populations having the same distribution.\r\n\r\nReference\r\n+ \r\n\r\n\r\n\r\n## Properties\r\n### VA\r\n#### INPUT\r\n1. **table***: (Table) Data in a Table.\r\n#### OUTPUT\r\n1. **result**: (Model) It shows the result of Wilcoxon Test.\r\n#### PARAMETER\r\n1. **Response Column***: Column to select as response.\r\n\r\n2. **Factor Column***: Column to select as factor.\r\n\r\n3. **Zero Method**: Choose a method of handling ties at zero. `pratt` includes zero-differences in the ranking process, but drops the ranks of the zeros. `wilcox` discards all zero-differences, the default. `zsplit` includes zero-differences in the ranking process and split the zero rank between positive and negative ones.\r\n * Available Options : `pratt`, `wilcox`, `zsplit` \r\n4. **Correction**: If `True`, apply continuity correction by adjusting the Wilcoxon rank statistic by 0.5 towards the mean value when computing the z-statistic.\r\n\t* Available Options : `True`, `False`\r\n5. **Group By**: Columns to group by.\r\n\r\n\r\n\r\n### Python\r\n#### USAGE\r\n\r\n```\r\nwilcoxon_test2(table, response_col, factor_col, zero_method='wilcox', correction=False, group_by=None)\r\n```\r\n\r\n#### INPUT\r\n1. **table***: (Table) Data in a Table.\r\n#### OUTPUT\r\n1. **result**: (Model) It shows the result of Wilcoxon Test.\r\n#### PARAMETER\r\n1. **response_col***: Column to select as response.\r\n\t* Type: *str*\r\n2. **factor_col***: Column to select as factor.\r\n\t* Type: *str*\r\n3. **zero_method**: Choose a method of handling ties at zero. `pratt` includes zero-differences in the ranking process, but drops the ranks of the zeros. `wilcox` discards all zero-differences, the default. `zsplit` includes zero-differences in the ranking process and split the zero rank between positive and negative ones.\r\n\t* Type: *str*\r\n\t* Default / Range: wilcox ( prattwilcox | wilcox | zsplit )\r\n4. **correction**: If `True`, apply continuity correction by adjusting the Wilcoxon rank statistic by 0.5 towards the mean value when computing the z-statistic.\r\n - Type: _bool_\r\n\t* Default / Range: False\r\n5. **group_by**: Columns to group by.\r\n - Type : _list_[_str_]\r\n\r\n\r\n## Example\r\n### VA\r\n\r\n\r\n\r\n**[Sample Model]**\r\n\r\n\r\n\r\n\r\n\r\n
In this tutorial workflow, sample_iris data is used for Wilcoxon Test. _sepal\\_length_ is used as `Response Column` and _species_ is used as `Factor Column`. The parameter settings used in the function are shown below. \r\n\r\n++Parametersres++\r\n1. **Response Column*** : sepal_length\r\n2. **Factor Column*** : species\r\n3. **Zero Method** : wilcox\r\n4. **Crrection** : False\r\n5. **Group By** : None\r\n\r\n### Python\r\n```\r\nfrom brightics.function.statistics import wilcoxon_test2\r\ninput_table = inputs[0]\r\nresult = wilcoxon_test2(table=input_table, \r\n response_col='sepal_length',\r\n factor_col='species', \r\n zero_method='wilcox',\r\n correction=False, \r\n group_by=None)\r\noutput = result['result']\r\n```\r\n\r\n
In this python script, sample_iris data is used for Wilcoxon Test. _sepal\\_length_ is used as `response_col` and _species_ is used as `factor_col`.\r\n\r\n", + "exampleModels": [ + { + "fileName": "Wilcoxon Test.json", + "label": "Wilcoxon Test", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m2v36sx2837se4v2", + "project_id": "p5dmzu78qb564crk", + "label": "Wilcoxon Test", + "contents": { + "mid": "m2v36sx2837se4v2", + "type": "data", + "title": "Wilcoxon Test", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": {}, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583890726086", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "7ujcya5np3j8crdabs9srht5" + } + ], + "layout": { + "type": "panel", + "id": "default-1583890726086" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tyt73kyy87rxreta" + }, + "fid": "fxq5afrx8vfccyrc" + }, + { + "persist-mode": "auto", + "func": "brightics.function.statistics$wilcoxon_test2", + "name": "brightics.function.statistics$wilcoxon_test2", + "param": { + "zero_method": "wilcox", + "correction": false, + "first_col": "sepal_length", + "second_col": "sepal_width" + }, + "display": { + "label": "Wilcoxon Test", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593669161957", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "6frhts47nmjbn4725ufpy94i" + } + ], + "layout": { + "type": "panel", + "id": "default-1593669161957" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "result": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "result": "tebxdsr8uh4shhtf" + }, + "fid": "fpp8x8dkzeq76uvm", + "inputs": { + "table": "tyt73kyy87rxreta" + } + } + ], + "links": [ + { + "kid": "kp8nnkyrtyaz5hb4", + "sourceFid": "fxq5afrx8vfccyrc", + "targetFid": "fpp8x8dkzeq76uvm" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-02T05:51:36.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-02T06:00:07.000Z", + "event_key": "2020_060007.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "brightics.function.statistics$wilcoxon_test.png", + "label": "brightics.function.statistics$wilcoxon_test.png", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdgAAACCCAYAAADlu9m8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAACIdSURBVHhe7d0JfBRVngfwPzlJSEJCEkgAkwAaCYRwqTgTLqMioHKpuCseqzueOM6O48yyzriD4zGM42d2dcRj2RVFYQbUcCiXOggiziACAoFgUAgRCJCEhIQkJCFh6/eqKul0upO+Kufvy6fp7ldV/bo77/W/3qtXr7odP1V8UYiIiMin/Ix7IiIi8iEGWCIiIgswwBIREVmAAZaIiMgCDLBEREQWYIAlIiKyAAMsERGRBRhgiYiILMAAS0REZAEGWCIiIgswwBIREVmAAZaIiMgCDLBEREQW4NV0iEh56vlC45HIM0/GqPv5fyiS2lr9J2L+v0eLv383efbFIqmq1tN+80S0BAd1k9//1xmpqKxTaf/x814SGuInL/z5jJSV6Wm/+mkvCQ/3kz+9WizFJbUq7fFHoiQq0l9eeqNYCov0tJ89GCUx0f6y8H9L5OTpCypt7k8iJa53gLy+uESO5+tpD90bKf3iA2TRkrOSd6xGpd1/d09J6B8oi5eelcNH9bR75/SUgYmBsuSvpXLocLVKu/ufIuSygUGy9P1SOZijp825NUIGJwfJ8pVlkpVdpdJunxkuqSnB8v6aMtmTpafdOi1chqcGy8q152TXnvMqbeaNYTJqeHf5cMM5+WqXnnbz5DC5alR3WfdJufx9R6VKm3p9D/nRlSGycVO5fPEPPe2GjB4y9uoQ+duWCtm8rUKlXTshVCamh6rnSAc8Rzq2w/aA7bA9Xh/5AF4f+eB94P0A3gfeD94v3jfg/eJ943Ph8wE+Fz4fPj++B8Dnx/eA7wnfF+B7wveF7xPfK+D7xPeK7x3fP+B7x/ePvw/+ToC/D/5O+Dvi7wn4O+Lvib83/u6Avzf+7igXKB+AcoHygfKDcgQoPyhHKGcob4ByhvKG8ohyCSiPKJcotyi/gHKL8ovyjXIOKN8o5+CoPriLAZaIFPygePpDQtRZeVMv2EVMRERkAbZgiYiILMAWLBERkQUYYIlIMQeEEFEDb+oFAywRKeYoYCJq4E29aPVjsN26dTMeiQT4+4k/bn5+4ufXkE7krrq6i1JbVye1tXVyQbuZLl7kEANX+XIU8fmaC9p3r+3Ba/X9ZPE5yS8ul8LSSqmoqtb+VsZKRG7QwoSEBgdJTESIxEf1kLioMKnTChlCSvfAAGMt3/OmXrRKgDVjamBAgIR0D5Rg7csICPDXE4kscOFCrVRpP/KV52uk5oJ+7iRjbfOwp47zBT1Vo33n2IH+/mSJfJ6VJ3tzC+RYoX4+JZEV+seES1pSrIxPTZBBcZFqhzrQx7HFm3phaYA1W6thocES2j1ItVaJWhtatRXnq+VchT5ZAFu1voXWajft3+rtOfLpN0el4Kw+OQJRa4rtGSrXjUiU6WOS5aL2z8pWrassDbDhPbqr4GrbLUzUVhBYEWTLyvXZdqgxzJiDmXLcgX2V97ZlywfbcqRaa8EStbUgrQV7S3qy3JaeUt976g1P6oXJ501KHHMJ0vYcevcKVwGWwZXaC5RFlEmUTZRRlFVqYE5X6Iry8zXy7fEz8tj/fCJ/2ZLN4ErtBsoiyiTKJsooyqo33KkX9nwaYPED1kNrscZEhfEYK7VbKJsooyir3AF0X2X1BVn79Xcy763NPMZK7RbKJsooyirKbFvwWRcxfqd6hoeqY61EHQWOzZ4tq+AAKA321DGhenMwQvu1dbtl096jRgpR+5eRligPTx2pzlxxlyv1whmfBFgE18iIHhISHGikEHUclVU1UlJaziDbAgTX/169Q7ZlHzdSiDqO9JR+8m/Tr/QoyHrK65zQxYaWK4MrdVQouyjDXb272LykmCPoYkPLlcGVOiqUXZRhd7uLm6sXLfEqwGKQiHkKDlFHhjKMstyVBz6Z11W1h0EiH351iN3C1OGhDKMsuzPwyVm9cIVXARaDRTAqk6gzQFnm4LymjhWVqVGZRJ0ByjLKdGvwKsBGhocYj4g6h65cpu+/u6fxqAGOS7/y0U7jGVHngDLt6pgLR/XCVR4FWPN8Qu7tU2dj9sp0xeOxCf0bj6PADE2YRIKn4lBngzKNso0y3hL7euEOj1uwOF5F1Bl11bK99P1S45EO0x9ihiaizghlG2W8Jfb1wh1uB1js2HP6Q+rMULb1Mm4kdBEHc6qNR/rE/ZhbmDM0UWeFso0yjrLeHNt64S6PWrAcNUydXVcv49jJwMT9RJ0ZyriVjUW3J5rAHK6YZs4qY372pvHIM9tfus94ROSdwuJzUu3CMZrOAnvqg5P1HQvM4Ypp5qzy5uM3y5DE2EYddLi2pxi/RvjRw+9eaUWVzPnDKjldUq4vIPKxBf8yUS7v18t41pRtvXCXWwEWhT4irLv0CLHuGNXvlm41Hrlnz+FTcqywlAGWfKa8skpKz52XrnZ5Owz8eGdTlqz7+rCR4nuX94+Wp++aIAPiItXzqppa+fLAD3Ial7rTvm/0ICT2jpCE2J5yz4tr1EXbiaww9YqBcldGqiWXt3M7wMa204n8EZjXfnWIAZZ8CpUDF2+vtLmebEd16nS+9OkdbzxrauXaczLzxjA1082vFn9m6ehhXBt60qiB8ui0KyQmIlSqtQC75G97Zcmn+9SF8v39ukm/mAj5yeSR8sqaHWzBkmXQi4LyiB26sUP6y4yrk/UFBrNeeMLtY7A8NYe6ElS+QK3MR4SFSGyv8Fadx9SX9h3Yrd12ybbtm1WgdWTXHv06uZjNyupTc3AR/E3fHJH1O76Tmgt1EhToL9N/dLmMujROfee1dRcl7/RZ+b+Nu6XkHK/fS9ZRO9Faefw+v0Te/luWPPHmJjlZ3LBDZ9YLT7j1a9GWPy5ooeL4rG/2ZPfI648/Lw++vcd4boXWyIOscKTshLy4d6ncs/lpdcNjpCHQRvXsYazVsYSGhEpdXZ2Ul5fJ/oN7mg20rdUdi27htz7eK98cPqmex/YMlXuuT5OYyFD1HI6eOuvhSOZUWbjgPtm+YIrMMVLmPHqn6uFqmnanLJzYeP1fP6k9fmmW/FpfrX26Y5b+eRzcPn001VjJXfge2vnn9pHgyCqJG3NKBtyUq254jDQE2hdXbjfW8o5bERPN6LYyfGAfNSn7XS+sVsdbiayAQDp/5yLZWXhQqusuqBseI80Msh39PNkLF2ocBlqzGyzfZu/daufOV8vvl2+TnONn1PORg+Lk7mvTVBexd7LkBE5fDAmRJD1BkiKMgSoh0fLjifpDPa1CTmzOkrnz3pQx89bLUn1R+7csUzU6xvzsK/m6EgklskY9f1OueyVLreKuXz95lVzRBSYzQyDtOzZfQuMqpJv/RXXDY6SZQXbVP/RzwD3tHgb3Aqxf2wXY6T9Klv+8Y5yUlJ9XrVmrg+zut7XWJ1qguC3YKLb7+o2WPb5MdhvpcnqjzDfT395vJFJH8sGRz1RQtYc0LIOQTnIKj32g7RdfrNILS9Wvdas5Xlgm/621GIqMfAcaA5+8lVuK8xcjJe0OPBsraX1wD0ES0xf3Rtqp0/KcgxZvIxOnyKc2LcTl6jV19S1jdbNp/RktTL01aby+zXKn2xl5ffroFFluLn9yrLHQDY1auI1bpXoL3bgZnxnvZ5r6jiJlmmrV43HnFHV5iQqq9pCGZfDFgWPqftRwz+fbd2uQE6aQa43J/Td9kysvr/7KeNZY/hm9+ypSex/v/Gq69I7Uu+zcG+SE7tu1snv4jfLGPcONtAYIoK/vSZKH/nSHjLRfd98yeXBttMyfd4PEI6Au2Cn5almcrFvwf7L6tLEd1lucqzW9HedB7RO6hB0FWAjyC5C3J/5WHbN5+6/v6ImdyJG8RLluQrDsPF7X6pP7TxiWIM/ec40UlVXKLxd9KodO6C3ax6ZfJRkjktShoQdeWqvSXIZANTNe5NBXct2ZZNk+JlJyt2utkjHJknQqR8Z8Gd6w/BXRAqDWetN2pV/WWrFJWgCa1gctwkwt+I7VAl2yRKv1slRwMpflakHpsctEvl75rszdjCDa8BpoCevrVkuu1h5I6hOk5f+m3L5MD2ZOtzPed3il/lwarat/tMaM7UPM96ux/ex2n20pAq/6LrT3csJ2vcafTb1OJ4UuYUcBFi7WdpMjHyWpQ6LvzZshGzeVyw0Znh0aarsmabu1R7bjsOnwoVpwheEyfbK2R71nm6w7rT0ddoe8oQXXk2jFIriqdTSnv5GvtOXxk6/Vtxtmbk/UMRw7oZp1rQrnuib3j5an5oxXx2TfWLdLyiqrJb5XmNqJjgwLlof/vK5+R9otm8ukSLsLj4iUOb1wXLdE9i4rkUI0lCPCZU7fEAnXHhadaaE79Y7ekiTV8m2Wvt5zz6MbFgEoVX7cP0ikski+VIEvS+bu1Vo/IfEyzWjhPvdlvpRpLWYEV9EC5hotuCIgtrSdUlqmgvTSMxXa/2ar2zVzUqO1z2a+5yz58pjWmrfpLoekMVpLvO96uc6LLuWu4It/eN6j41aAratzubHrFeyxrvrt7CY37M1C/5gIeeEn13pW6Vpy+qRgyEV8fJz+3E7+x6+qLuDXRWuZ/ulGBtFOZlivS41HTZnLcNrOpIybO9Rt0IDGpx7YCggIlB49EGpEW+9yCQ1uvS7wQfG91KGf7oH+suYf38rn+/Lk9cemqrr+2IwrjbU8ZQbT3jJNBbRKya0PNtEyLckMumplp/Tg7EikxOB4pREIHdq8Xj4zjmbl7jWP77qwnaasVO+q9IR+bDlIrpipdwM/dhmeh0pfdPsuyzGO2epBFsttu7y7gsoC5weazWU4bcdbbgXY2ro641HrW/33HPndsq1qr/Y/54xTg54s0TtOEFrz8/WRjY2dkt27tELfe7TMd9Lt63g76ihuGXCN6gq2hzQsA5wT2xmYgXXo4OGSPmZifTdYTETrjHKJ01qp/3rDCBkYHyU7cvLlL5v3S7nx3To6RIQ6j7qPm2vMYBopSdpHKjv2Q6MWod6qRNBtnvMWpE1rWE9o6o5ZxnFNBDPzOKgL23lJP/5cLV+v1Ac96Tezi9kY0KWlvXxI/74b3lvXUPxtpOoKtoc0LAOcEwuedg+DewG2tu0CLAY1VVbVqOOulgVXZbiMQezcs98YvLRHVm/QgurwdJnau4/WstWSThepVm7+x9saBjj1HiFX9dbuze32mdtTRzIgvK/MH32/jI4ZrIIqbniMNCzDxOAdfcIJ+8BqTj4x9mo9sMZHWdAzZCc4MEBuHTtYxg1LUCOG+8eGyzP3TJQfpeg/ao6g5+r7/GK5Mtn1vlI9OOrqu4KXnW4Iqi20IhVj/aQkfaBRw6k9Da1hfVRyqixM036c67uCx8ryMfrzl7ejNRop09RgpZa2897SrCLVNX15qs0AK5vBTPr719Z75Ru9NevCjkZnUlUSLCe+iJeKk6EqqOKGx0jDskHxkfUTTpj1whNuBVicjNtWsNeKrgyfdgvvWWszGhjHVPXRwiPveVIeGp6rn8dqNxhq5JTREq8VRSybv0H7MUJQ1Vqt+dJHps5Dl7Gx3S5tXbUFdTQIpE+kzVEDmnDDYzO4Fp/tmDMKVVRWiJ+fn8PAajKPNcVZONe46doRSfLPE1Ml0Dj1D1MipibGSnho893TJeeq1CQULjtRqQUasO0KNlqQmtzcL/QHzfpCbl+ZL2V9kuu7W3O3663Bpa+8q7UCxeiKbTzAac6jSeqYp+oaXpYpa9BV3CfJCGzOt/OJzevlOi2oh192lf76GABlvD7yXnPK7D7GMq2lu0Ff9lyusSPQBbqNEUhPbu+jBjThhsdmcH1i5hhjLe+OwXKqRKJmoHJ0lakSn3q+UJ55MqZVpkp8fNYYCQtpHEyxA49DQc/9yzVqYNP9U/Rd1EXrd8trP52q7gHpM55eoR4TeQsdxc1NlWjWC09wsn8iJ7raZP/mD0lrTPbfHAxoZICl1tLSZP+tFmCBl6ujrqKrXa7O9nw/qy9X1xwEWByX3ZFzQj3HMVd0CyPAYmRxuNby/fHP31LLiLzV0uXqvDkP1u0Ai/PWeveKUE1qos4KA/pOnynFldO6JHTXPvLax1KAy8cRdVKY//rVhydZNs++R69a0UlOUyBypiuWcdurhqBb/LoRicYzos4JZbylQ0CtdjUdwHvBYI+udhFq6jpQtvUybiR0EbjupQkXNZg+JlmC2uGARiJfQNlGGUdZb45tvXCXx+3ijj6iksgZlm3dRe3fLenOZ4Ai6shQtlHGreRRgMUefln5eXX6AlFngjKNst0Ve2jsrxqCUZW3padI/xh9GkWizgJlGmXb2chhW95cTcerI7slZZ6fgEvUHnXlMu3oupcY1PjoTaONZ0SdA8o0yrYrWu16sPbMvX2izqCr98oczHE8sKt/dLj884QU4xlRx4ayjDLtKmf1whVeBdg6YzAIRxVTR4cyjLKMMt1VLX2/1HjUWI/ugXLzVZdJRhpHFVPHhjKMsowy7Spn9cIVXgVYwLGqs2UVaiJ+oo4IZRdlmCPjnQsJCpCHp46U9JR+RgpRx4KyizKMstxavA6wgN+lktJytmSpw0GZRdllbBUZnNz8RPs4Gf/fpl/Jlix1OCizKLueTCjRUr1ojtszOTUHcxWHhQZLeA/PR10RtRYcc9XPd2V0dQcuBvDhV4fkL1uyjRSi9gvHXNEt3JotV5NPAyz4aUEWV9uJDA9pl1fdIcJAJowWxn1XPuZqL+9YjST0d+3YVPn5GjlWVCavfLTT0qvuEHkKp+JgtDAGNLlzzNWeO/XCnk+6iG3hBwsTpJ8+U9Zlzyek9gllEWUSZRNllMG1sUVLzhqPWoYfLEyQ/vID16sWAmd8ovYCZRFlEmUTZdSb4Aru1At7Pg+wttD9drKwVP2oYfJ0oraAsocyiLLIWZp8C+cSThtzmSx5/Cb1o4bJ04naAsoeyiDKIsqkq+e5WsnnXcSOmB80MCBAQrS9ieDAAHYfk6XQ/VultVIrz9dIzQX9knNssDYPe+r3393TeOa+Gu07xziM70+WyOdZebI3t4Ddx2QpdAOnJcXK+NQEGRQXqXqpWppb2F3e1ItWCbC2UAFNGNGFy975+/mJn1872N2gDquu7qLU1tWp1ioutWbiIYq2gYu246vHmIyTxeckv7hcCksrpaKqWvtbGSsRuUELExIaHCQxESESH9VD4qLC1GEehBRXpjxsC60eYImofSosqpWYaPYsEdnypl5YegyWiDqOl94oNh4RkcmbesEAS0REZAH/X/xy3nzjMZGu6HNZuPSoDBydKGpMaM5qeXrRJtnyxQ7ZUhgmEwfHqtWasN+uiULZuihT8pLSJFGtkC0rFrwn7+N17V47e9W7cjAW62Gbt+StT7DOCekzdrA4zN2lvD+RitFOtifZd6BKrr4ixHhGnZ4F9bxw27vyx2Vf2L2GbR3+VvxTzPpvW8/15/pvwkY5Y7NOY/prbQ+/UoZGG0mN+L6ee1Mv2IKlxlQly9KKqUkrsFtEZs97RH47b7ZkFOyUrUXGIltNtrOHirNCNtluW1QgBdGpMle9tnabYVyxRXutTbGTZZxWgQq3bZC9Q2bry2eJrFjlYPagFvOGGBl3f7Lsc7Q9KT97MMp4RJ2eFfVcC7zLDyTU1+fZ8pmsyNHrcP4Eo47fnyB7txp10Kae6xAcP9N+KZzLXmX3G9KE7+u5N/WCAZZsaAW8IFmrBKlaMTWhwE6XJhcrw17sos+NiuZoO1SGV1UFg8JtBTIMFdd2r7OoWAqLsmThglfl6QXv1lfo7ANlkjZYf6WCAql/LMnJknIwx64COs/7afW62q2+sqXIMHHyw0FSUcnhvV2DRfU8erzMvX98/bLY2Ajt/0KtPodLfMG7el1clCdp4/RcbOs56DvT1zT+jbClBeQVco3MHmw817RGPfemXjDAkg2tkqU7ue4n9lzRAo0dre9xNqpMjrdLmaHtxSbrj2PSxzepvIUFZRIzzmidYs82ExU5W/YVJEhKfSUrlb0Hjf1ltHj1RzYc5Y3XcNAy1sTGiuQzwDr0+/86Yzyizs26em5CV/HCgtFG+nHZK5Obr+davlh/bnoz3dJbomSuTV1urXruTb1ggCXXJE/XC/GQHFm4zWEHkdti0u/UKpSxBxsdK7Fai9Y+gKbMuEZit67Q91Az87T1olw4tpIiGUPyjJax7Z6trqDAN++fqNPxQT1Hq3I5Amp9wOsnGS3U8+wDx0UOfqYH96JS2bRodaOeqsKDefW9XSsOautnoser/ddzBlhqAY6dNhR2tDp9xbYLWXJyJHtwctNW7radUmC2cmclqF3Thk4l5xC81TYOjifFxrryCl1PaAh/DrouX9TzQtm66FXZN+SRhh1nrbamDCmTTWawRj13sJOMVnB9fY2OkAy77uqG+qy1lgdr68+6U7WwW6Oee1MvWKOoBSkyG4OLjL3EhQcS5HZUnkbHZhxrFEAdQOtUMo29z0yR2WqPN0WGxeZJtlFRYtJH27RgRW5X66AiNxyzbQo/Fsbr2nZ3aXBMN76++5ls/cfPexmPqOvxQT3P2aYGIGWbdVq7IT0mfbKkHTDrcJlkzEKXc+N67lj7qOfe1AvO5ETtjzoek26zF+wj+LHYGmt3HIeI2kQXqOdswVL7kzxdMgo2NLPn6gltbzizWDIYXJ166vm2P2ZFXUgHqefe1Au2YIlIwQ/JM0/6uDVB1MF5Uy8YYIlIsd1TN39Q5v+hSGpr9Z+I+f8eLf7+3eTZF4ukqlpP+80T0RIc1E2dymCeL4hjVhgY8sKfz0hZmZ72q5/2kvBwP/nTq8VSXFKr0h5/JEqiIv3VXK+YUB1wUj8mVl/4vyVy8rR+mcG5P4mUuN4B8vriEjmer6c9dG+k9IsPUJcSyztWo9JwSbGE/oGyeOlZOXxUT7t3Tk8ZmBgoS/5aKocOV6u0u/8pQi4bGCRL3y+Vgzl62pxbI2RwcpAsX1kmWdn6NYNvnxkuqSnB8v6aMtmTpafdOi1chqcGy8q152TXnvMqjTo/BlgiolaGnZLXXxxgPKPO6KEnjngcYHkMloiIyAIMsERERBZggCUiIrIAAywREZEFGGCJiIgswFHEREQecncU8dGjubJ//wHJzT0iZ8+eVWk9e/aUpKQBMmRIirq3Qlvle+TIYcnalyU/HPtBSktLVVpERIRc0v8SGZo6VAYMGCjdunVT6b6Ez5uVtV99XuTr5+en8k1ISJShQ4e49Xm9GUXMAEtE5CFXA2xhYaFsWL9eyivKZeTIUTJw4ECJjIxUy0pKSuTw4cOye/cu6RHaQyZPmSIxMZ79oNtry3zXrv1IqqurZdSo0ZKYmNgo36NHj6p8uwd3lylTp0p0tG8mDi4qKpL169apz3vllVepfKOioqS2tlbtWOTl5cnOnV9LSPcQlz8vAywRURtwJcDmacHkg8wPZPz4CVqwGeW0xXbx4kXtx3+nbNmyWW679TZJ0IKDN9o63wkTJmpBfWSz+e7Zs0c2b/5Mbr3lVul/ySXGEs8g38yVmerztpTv7t271ee9ZdYtLX5engdLRNQOoSWHYDNjxgwZPXp0s92hWHbFFVfIrFmz1DbY1lNtlS9akGa+zQV1wLIRI0aodd97/z1L8l2xfHmjG2AZ1vHF520JAywRkQXQUvroow9l3Ljx6lijq7AutsG2eA13tWW+6J4dO3acW/nieCi2Qb6eMj+veWwVwXRlZqZ6PPv229UNbANtYmKSau2iK9uTz+sKBlgiIgtggE1VVZVqQZqeffYZ45Fj5nJsg23xGu4y8w0MDJQ//vEF9Zq437t3r7GGDs/tl3uT7w95eVJRWaFaw7YWL35TXnvtVfn224NGSlPYpqamRg4f/t5IcR0GUp0/f77R9wwztRYq2AZVM9Ca0JL19PO6ggGWiMgCBw5kq4FFtt2kv/nNU06DLNKxHLANtsVruMvM9+OPN8p99/2rek3cb9y4wVhDh+f2y73Jd9++fTJiRNNjn8ePH5dJkybJpk2bZNnSpQ67ZPVu29Gyb+8+I8V12dkHm3zPJrP1atuKtVX/efcfMFJ8iwGWiMgCOFUEo3btOQqytsHVhG3xGu5yli+CCfJ58IEH1H12duMgagYoT/PN+yHPYb4waNCl8sADD8rAQYNkyZK3tWC+UbU6bSUlJcnxE8eNZ677QcsX23pqwIABkuvB53UFAywRkQVwWoh5aoo92yDrKLgCTi8xz1l1h5nvDTdMlrfeWqxeH/eTJt2g8rkk4RJ1P3PGzCbLwdN8cb6ps88L/v7+cvXVV8tDDz0sdXV1qtsYrV4Tzss1z5V1R3P5mt3Dtt3E9nB+rCf5uoIBlojIAgEBAQ67LU1mkHUUXAHnbnrCzDctLU1+8Ysn1OvjHs9t3TxtmsPlnubrqtDQUJkyZYqkp4+VdevWGqmeQ7B2NkippS5iQOC3CgMsEZEFwsLCpLi42HjWlBlcce8IWpFoXbmrpXxNjgY5gaf5YhtMItEStBZXrVwpf//7l3LTTTcbqfoEFJ7m66zF7UoLFt8VWs9WYIAlIrJAv7791ExJjti2XJ0F2SNHjqgpBd3VXL62HA1yAk/zxTbY1hm0jLdt2yaLFv2PRGgB7eGHH5GhQ4caSzH6OdejfHG6DbZ1xJUWLL4rvIYVGGCJiCyQOixVvvlmd5PuS9vgarIPstgG2w5LG2akuM5ZvraQl6NBTlble+hQjrzxxuty4vhxuffe+yQjI0OCgoKMpQ2fF/MTuwtzKWPaxeY+rzNmvngNK/j/4pfz5huPiYjIDZ9trZCbJkUZzxqLjIySrKx9quXWt29fleYouJow6QGW437Xrl1SVFQoEyde0+xxXEcc5WsLr48bJoPIzPxANm36m+zfn6UGOeGUGm/yxetg/uF+/foZqXqL+LvvvpPrr79exo4bJyEhIcaSBpi6sKS4RL0vT/I9cGC/XLhwof7z7t+/3+kNhqamqnt8z2fOFKlpHZ3l+9HHJZIxLtR45h7ORUxE5KGW5iLGOZ/vvLNEZs6c6fIVXDBxwqpVq+Suu+72ePL9tsoXUxbiNBxMWejqbE6YoAJzCN95510eT/qPfPF5p0+f7nK+OBUJn7elfL2Zi5gtWCIiDzXXggWMmO2ntaoQQIKDgyUuLs5pSwndlZh0f8OG9Wry+3gHrU9XtWW+iQkJWss4U4KCWs53x44d6tjv7NtmS58+fYwl7tM/bz9ZuWqlBAQEtpgvWq6ffPKJmuwf6zaHLVgiojbgzuXqMF8upuXDzEGDBg1S526iGxcjYNGNiuOICIYYWevLy8a1Rb5oUX744Zr6fDGZg3muKvLFoCTki+OwN954k8/yPXPmjJoP+Vz5ORk+fIRceuml9fnaXp4vrEeYukxer1691LLm8HJ1RERtwJ0LrqPlhDlvMQ0h7nG6Cs7BxGkml1ySUH/hc2ctL0+1Zb7o/sVkEpjlyZzMAfn279dfDYpy56IA7kD3Ly4wj1mebPPF58UF190ZNcwAS0TUBtwJsNQx8XqwRERE7QwDLBERkQUYYImIiCzAAEtERGQBBlgiIiILcBQxEZGHMIqYOj+epkNERNSOsIuYiIjIAgywREREFmCAJSIisgADLBERkQUYYImIiCzAAEtERGQBBlgiIiILMMASERFZgAGWiIjIAgywREREFmCAJSIisgADLBERkQUYYImIiCzAAEtERGQBBlgiIiKfE/l/h6E1rXF4IncAAAAASUVORK5CYIJrJaZDnWtPK3dPvIrtHcqarqS4EjGLjN8BKfMpWqLD3waNFuRvLJ5lbPMGXsUV+jb3JOLIpo/avS9d5/s2xSy4A1Oz3rD5PfEODLTJBVqlVZyiFYI0rZIzFaMAiUg1jhxTJyeguFgrHnKUvN4oKCmr8OCCtmfoOj4vO0srFrbP04pJNlZoBTNBPVJKi1E8KUWrFkWM9jygQBW6bBwtNl7P6TY2crKAm7QfgUnGY0WvlB9/Qr89bVa60ZMRn7XH6wptdwUH9a7rSE0thwPpHzxdzqVy36ZVxFdgmbGdL5VzK8rF2XOn1b0E2QNlOBUit3NUzh3UuRppaTYPkEv2FGOqdmDbWlaFBOyv6yWnuLgCJbte1ctXp78N2msdy0PsZL0ES4CeaixLWZyGMu3Xoz2n+zbK8uNPtAXX8nvgbQ1kLMnkghgsWmAUhE6UFGvFI3oxHrxHWp1MRuW2qRLLFhmvUZqHbKNilEKmtHteqra/joXTnqrwc3JQPHmyzf7aU9vYSlmMRbaFVZRm4UiscUSt3dp+GGIQE1uJEvtK3MfIFM6BgYFoampS3Ui667/++4KxRP7Nw+VcqyifLp6llTdnp6l13lrO3V0uzNbs0NAwJIz0vSH9yFc4KueO69zUG42WaU3MgsXGwa0NLZB+7EZJLdHKeASWGWewHpych42twa79b0OJdtAdjqnG63bUsSw62nd2lvZ6xv4eW7uqbX10lPwgGA+8AwNtcpuYWEcVplaoVWFYAWySo045VRuO7UbL0sYsZ8/rWmyss2q3jSvbSOW/DDtaj45bW7qUio6tZT5oUIjel7S2tkbdE/WUu8p5dlY+cEzKnZwSrtC2dXzKt7+Uc9vW7MDA3k0PT+RZUv7vaD24jYkN1w/I9Ud2vw1dCUeM/UGyA6mLEnHE+H2xbdFWtH3bHXr3KQba1EOxiEdbi5VUmvaVnfT5aqvMio2KTDu6/bDtSPS2ya5WkrGIPZZjFCY5Igbi7QujK9s4IUfu+pHxFYjdZXsaOcLl1/BmMjOk6EmgHRbKn4n+y7py3lbm5JSwtIatQqoPlXN3lotjJzJVa3ZY2GAkjGTfbPI10oe6LdiV3wnpDuL4t6E9CcpVtzIhZ50Qpf3quEDOjqmy/AAeXFTZvruIdlDvQlThMaxBqYe0o9Sb2o4o5WIGdYrJpg9mzIIVmJZl9Nl6Ygdwk5ze0Z63xKalCys6PM8x/aKlV9VrvYojk1foR88pKYjNyjKe52Qbm35kDsm+1XP091m8aIH2SkJOh7l2dO3tWgPtuu4H2j/692HGEvU/LOfOuKtcyIRSeWdOqqH8JqWkIcQYjpOor9n20XaotczZlsm23wlnvw2pkytx1HzdlFXqYmm1zfo8TFMXPHe9b1mvv+4zeHpXOJaZXV9Ky1Sg7U04MyT5vOzX/4aSRW2nrdxG9SFd4PBiDl9zMvcEvjh5DKMTkpA6caqRSuQ7/LGcF54/hyOZ+9WylEspn0R+Tw56d8XiQdW/252kP/gexMjZMSPFG7BFm3xe6o2zUOBwSKDeyMarH0bhNj8IskVvWrR/+kv3frNEPeFt5by35aL84gVkHz+ilsckjmOQTf1H9GLcFru/89byHpBRjAqWeFeQLdiiTdQPlJWXYt+Bj9WQYVcuvd5IdY0EFD971D8OOIjcpTflor6+DgcO70VlVQWGx8Zh+tQ5xhoi8jcMtIn6iY8+fl9NWjMzfR5ioocbqV2zbbkzA4t1vypFc7P+07HuP6IREDAAP/9tKeob9LSfPBKNkOABagg0c7xh6dMqF5D9+n8voLJST/vhvw5DePhA/O6ZMu1goFmlPfxAFKIiA/Dkc2UoKdXTZHKQmOgAPP2nchQWNam0B78dibjhgXj2hXLkF+hp990diYT4QKx/6SLyzupDGd5z11AkjgrCCxsu4uRpPe3uNUMxdkwQXnqlAidONqi0u74WgQljg7HhHxU4lqOnrbklApNSgrFxcyUysutV2m2rw5GWGoJ/vFmJwxl62i0rw5GeFoLNW6q0AKpOpZH/62mgfTjjc5wvKlDTrEt5HBQyyFhDRP6GgTZRPyF9tKWvduKoZHXRFVlHDk6e/W2y8Yj80X2PnOpRoH1CK4entHIYEBCI2TPmY2gEZ14l8mfso03UT8TGjFD3MowYEXneuYIzKsgW06bMZJBN1A8w0CbqJ6RSHxoRqS6ILCouNFKJyBPKL5YhI/uQWp4yKb31wJeI/BsDbaJ+xOybnfNllronIus1Njbgs/271XLymPGclIaoH2GgTdSPjEueiPAhEaipqW4dv5eIrFNdU4Udu95Vy5FDh2HCOG8bfIyIrMRAm6ifGTd2orqXyTJk2D8isobM+rjn0x3GI2DurAXGEhH1Fxx1hKgfOpJ5QAu089XyosuXI3RQmFom9+juqCOnT+ciMzMLubmncPHiRZU2dOhQJCUlY/LkVHVvhb7a76lTJ5FxNANnzp5BRUWFSouIiMDoUaMxJW0KkpPHqinJ3U0+b0ZGpvq8sl8ZV172m5g4BlOmTO7W5+1q1JGMrEM4V3hGLcu1EfNmL1LLRNS/MNAm6qfe2/6WsQSkpU7HyPjRxiPqLVcD7ZKSEmx75x1U11RjxoyZGDt2LCIjI9W68vJynDx5EgcPHsDgsMFYce21iInp2bjN9vpyv1u2vI2GhgbMnDkLY8aMabff06dPq/3KuNLXXncdoqPdM996aWkp3tm6VX3eOXPmqv1GRUWhublZHWDk5eVh//7PtQPOUJc/r7NAW7plZR0/ggtl+vjzo0clITVlqlomov6HgTZRP3YsJwN5Z0+pZQm0xyWnsHXbDVwJtPO0oPK1Ta9h8eIlWtA502kL7qVLl7QgcD8+/HAnvnrLV5GoBYm90df7XbJkqRbcz+h0v4cPH8bOnTtwy823YNTo3h0Ayn43bd6kPm9X+z148KD6vDffdHOXn9c+0C4rv4DzRedQqN0aGuoRoh0sSH/skXGjjC2IqD8K+P4P1q4zlomon5FRSCLCI1F6oQgXL5ahoOAsKirL1SgJoaFhCAgIMLak7tixqwY3XO18jGRp2X1l4yu48cYbMXnylE67Sci6kSNHIj4+Dps3b8aECRMQFtazg6G+2q+0KL/yyt+N/U7ucr9xcXHqJoG5O/a7evVqpKa27ffVjRuRmZnZepuSlqbWxcfHa585Hps2bepyv2+/V44llwejoPAsTnyZrSaEulhRrlrJZVr1qZNnIDrKPWcCiMh3MdAm6ucGhw1B3IiRqKurQ2XVRVRXV6GktEhdyCUXS9bX16nT4XLf1NSISy2XVN9WuZFjnQXa0nL6f//3qurCMGXKFCO1a9LVISgoCLt370J6+vROg1VH+nK/m157TXUVmTLF9RlJIyOjEBgYiD17dmP69BlGavfI5509e446qBASYOfk5KClpQW33nabCrDtA27pyhIcHKz2m56e7vTzSqAdHPQpzmmBdm1tjfacECTEJ2LihDQkJY7T1gUbWxJRf8auI0TUSgLqopJCNXskRyTpuV2fXua064hcCPjee+/hO9+5tzWI+/nPf4af/OSnatkRc70ErX/843O4+uqr1QWD3WHud/78y7T7d7UDJ+neEIJrrlmBadOmGVsBR44cwbvvbmu3furUqT3er3Td2Ka93j33fKdd0PrCC8+rg7tly5Zh4sRJRmp78nn/9Kf1WL58OcaOHWekusbR9yyBtgTYcm/LTJN7Iftdv/6PuOqqq5x+Xuk6smj+J4gcGqUdqCYgbvhIFWwTEdlikxQRtQoLG6xa4+bMvBxLFlylLuIaM3os4uNGIWaYdDMZikGDQtmlpBeysrLVBYi2QacE0RJMO2IbhMtz5LnyGt1l7leC7G9+81vqNeVegmpb8th+fW/2e/ToUdUibft5RX5+vgrct2/fjpc3bFDdWuzJc6Ql/OiRo0aK67Kzj3X4nk0SUNve7LV+3szOJ3aaPeMyzJ21EImjkhlkE5FDbNEmInKzzi6GfOaZp3Hrrbc5HNnCvmXbUUu3BKSvvroRDzzwoJHiGnO/0pIsAbSM6CF9mM2W5TN5ZzA6cbQaceQ3v/ltu/WPPPKDHu/3D394Bl/96q0dPq/52aRP8759+/Dxx3tU15IlS5ZoB3ODjK30ftYbN77S7f0+99yzWL36Jgwfrs+GKmxbre3Zr5PPK/t98MGHjJT2uhrej4hIsEWbiMiDZDg5c0g7exJ4mi3bjoJsIX2mzTGvu8Pcr3QF+ctfXlCvL/dXX32N2o8E2XK/+sbVHdaLnu5Xxqt29nmFnB2ZP38+7rvvftV3WgJzaQU3ybje5ljb3dHZfiWotr05IuNr92S/RES2GGgTEXmQXODnqDuDyQy2HQXZQlqAe8Lcr/TH/v73H1GvL/e2/bPFV1audLi+p/t1lYzwce2112LBgoXYunWLkdpzErRLX2tHbLuNOGvhZvcoInIHBtpERB40ZMgQlJWVGY86MoNsuXdEWpWltbW7utqvSS6G/M1vfq32L/fyWPR0v/IcmYymK9J6/Prmzfjkk49xww1fMVL1iWx6ul9nLfCutGjLdyWt6UREvcFAm4jIgxJGJqh+0I7YtmQ7C7ZPnTqlpirvrs72a8vRxZCip/uV58hznZGW8j179qhRPiK0wPb++x9oN/xgbm5uj/Y7ZkySeq4jrrRoy3clr0FE1BsMtImIPChtahoOHTrYoVuDbZBtsg+25Tny3KnTuj+lt7P92pJ9ZWe3H1lEuptYtd8TJ3LURYvn8vNx993fVEP9yRjWJnO/U9JcH/fbNHlyqprOvbPP64y5X3kNIqLe4IQ1RERu1tmENTIRS0bGUdWSKzMvCkdBtkmmDpf1cn/gwAGUlpZg6dIrOu3n7Yij/dqS15ebjBu9adNr2L79A2RmZqiLIWUovt7sV16noaEBCQkJRqreQv7FF1+osaoXLlqE0NBQY00bmRK9vKxcva+e7DcrKxNNTU2tn9d2chr7m5AJa4R8zxculKrp4p3tVyasWbaoZzNWElH/weH9iIjcrLPh/YQMHffXv76kpgZPSnK+nS2ZgOX111/HnXfe5XBoQFf01X5liL6XXnpRTcHu6oQ3Z/LysGnzJtxxx51qqMGekP3K5121apXL+z19Old93q72y+H9iMgVbNEmInKzzlq0hYywkTBypAokZfbFuLg4py2n0o1h//792LbtHdxy8y2Id9Aa7aq+3O+YxERs2rRJTezS1X5lXG3pG37rV2/FiBEjjDXdp3/eBGx+fTMCA4O63K+0ZP/zn//EzTfdrLbtDFu0icgVbNEmInKzrlq0TdLC/Pbbb6npzmUmwnHjxqmxn6V7h4yYId0rpJ+xBMUyEkdPW5Tt9dV+pYX5rbfebN1vcnKy2q+Q/crFi7Jf6ad9/fU3uG2/Fy5cwDtbt6Kqugrp6dMxfvz41v3KqCZy4aPsd8jgIbj2uuswbNgwta4zbNEmIlcw0CYicjNXA20hLam5uafU9OZyL8PcyRjOMjzd6NGJ6oI86ebhrCW2p/pyv9ItRCalyTuT1zopjOx3VMIodfGkq908uku6hWRmZuGM3X7l806ZMrlbo4ww0CYiVzDQJiJys+4E2uSbGGgTkSs4vB8RERERkQUYaBMRERERWYCBNhERERGRBRhoExERERFZgIE2EREREZEFOOoIEZGbyagj5P846ggRdYWBNhERERGRBdh1hIiIiIjIAgy0iYiIiIgswECbiIiIiMgCDLSJiIiIiCzAQJuIiIiIyAIMtImIiIiILMBAm4iIiIjIAgy0iYiIiIgswECbiIiIiMgCDLSJiIiIiCzAQJuIiIiIyAIMtImIiIiILMBAm4iIiIjIAgy0iYiIiIgswECbiIiIiMjtgP8PMO/VOMqv8MkAAAAASUVORK5CYIIREVmAiTYRERERkQWYaBMRERERuR3w/1MYDrAtZ2nnAAAAAElFTkSuQmCC", + "description": "In this tutorial workflow, sample_iris data is used for Wilcoxon Test. sepal_length is used as `First Column` and sepal_width is used as `Second Column`. The parameter settings used in the function are shown below.", + "parameter": "1. **First Column***: sepal_length\n2. **Second Column***: sepal_width\n3. **Zero Method**: wilcox\n4. **Correction**: false\n5. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.statistics import wilcoxon_test2\r\ninput_table = inputs[0]\r\nresult = wilcoxon_test2(table=input_table, \r\n first_col='sepal_length',\r\n second_col='sepal_width', \r\n zero_method='wilcox',\r\n correction=False, \r\n group_by=None)\r\noutput = result['result']", + "description": "In this tutorial workflow, sample_iris data is used for Wilcoxon Test. sepal_length is used as `First Column` and sepal_width is used as `Second Column`.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/statistics/wilcoxon_test2.py b/function/python/brightics/function/statistics/wilcoxon_test2.py new file mode 100644 index 000000000..89b5b2290 --- /dev/null +++ b/function/python/brightics/function/statistics/wilcoxon_test2.py @@ -0,0 +1,64 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.repr import BrtcReprBuilder, strip_margin, plt2MD, \ + pandasDF2MD, keyValues2MD +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate +from brightics.common.validation import from_under +from brightics.common.exception import BrighticsFunctionException as BFE + +import pandas as pd +import numpy as np +from scipy.stats import wilcoxon +import itertools + + +def wilcoxon_test2(table, group_by=None, **params): + check_required_parameters(_wilcoxon_test2, params, ['table']) + + params = get_default_from_parameters_if_required(params, _wilcoxon_test2) + + if group_by is not None: + return _function_by_group(_wilcoxon_test2, table, group_by=group_by, **params) + else: + return _wilcoxon_test2(table, **params) + + +def _wilcoxon_test2(table, first_col, second_col, zero_method='wilcox', correction=False): + result = dict() + rb = BrtcReprBuilder() + rb.addMD("""## Wilcoxon Test Result""") + + alter_hypothesis = [] + stats = [] + pvals = [] + + stat, pval = wilcoxon(x=table[first_col], y=table[second_col], zero_method=zero_method, correction=correction) + alter_hypothesis.append('Median of the differences != 0') + stats.append(stat) + pvals.append(pval) + + result_table = pd.DataFrame({'Alternative hypothesis': alter_hypothesis, 'Sum of differences ranks': stats, 'P-value': pvals}) + + rb.addMD(strip_margin(""" + | {table} + """.format(table=pandasDF2MD(result_table)))) + result['_repr_brtc_'] = rb.get() + + return {'result': result} diff --git a/function/python/brightics/function/textanalytics/__init__.py b/function/python/brightics/function/textanalytics/__init__.py index 5198cba64..fdc9487c3 100644 --- a/function/python/brightics/function/textanalytics/__init__.py +++ b/function/python/brightics/function/textanalytics/__init__.py @@ -19,10 +19,18 @@ from .lda import lda from .lda import lda2 from .lda import lda3 +from .lda import lda4 +from .topic_name_extraction import topic_name_extraction +from .gsdmm import gsdmm +from .dtm import dtm +from .dtm import dim from .tfidf import tfidf from .tfidf import tfidf2 +from .tfidf import tfidf3 from .tokenizer import tokenizer_eng from .tokenizer import tokenizer_kor +from .tokenizer2 import tokenizer_eng2 +from .tokenizer2 import tokenizer_kor2 from .bow import bow from .doc_doc_mtx import doc_doc_mtx from .doc_term_mtx import doc_term_mtx @@ -35,12 +43,21 @@ from .word2vec import word2vec_similarity from .word2vec import word2vec_similarity2 from .word2vec import word2vec_model +from .fasttext import fasttext +from .fasttext import fasttext_similarity +from .fasttext import fasttext_model from .doc2vec import doc2vec from .doc2vec import doc2vec_model from .doc_summarize import doc_summarizer_kor from .doc_summarize import doc_summarizer_eng from .extract_senti_words import extract_senti_words from .split_sentences import split_sentences +from .split_sentences import split_sentences2 from .search import search from .search import search_user_dict from .search import search2 +from .regex import regex +from .ner import ner_eng +from .ner import ner_kor +from .ner import ner_crf_train +from .ner import ner_crf_predict \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/data/english_ner_model.pickle b/function/python/brightics/function/textanalytics/data/english_ner_model.pickle new file mode 100644 index 000000000..5524821e6 Binary files /dev/null and b/function/python/brightics/function/textanalytics/data/english_ner_model.pickle differ diff --git a/function/python/brightics/function/textanalytics/data/korean_ner_model.pickle b/function/python/brightics/function/textanalytics/data/korean_ner_model.pickle new file mode 100644 index 000000000..4cd9d2e52 Binary files /dev/null and b/function/python/brightics/function/textanalytics/data/korean_ner_model.pickle differ diff --git a/function/python/brightics/function/textanalytics/data/regex_format_dict.py b/function/python/brightics/function/textanalytics/data/regex_format_dict.py new file mode 100644 index 000000000..cb2c9d285 --- /dev/null +++ b/function/python/brightics/function/textanalytics/data/regex_format_dict.py @@ -0,0 +1,41 @@ +IPV4_SEG = r'(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)' +DATE_SEP = r'(?:-|/| |\.|\. )' +DATE_SEP_US = r'(?:-|/| |\.|\. |,|, )' +YEAR = r'(?:\d{4}|\d{2})' +MONTH = r'(?:1[0-2]|0?[1-9]|Jan|January|Feb|February|Mar|March|Apr|April|May|Jun|June|Jul|July|Aug|August|Sep|Septermber|Oct|October|Nov|November|Dec|December)' +MONTH_NUM = r'(?:1[0-2]|0?[1-9])' +MONTH_NUM_2DIGIT = r'(?:1[0-2]|0[1-9])' +DAY = r'(?:3[01]|[12]\d|0?[1-9])' +DAY_2DIGIT = r'(?:3[01]|[12]\d|0[1-9])' +YEAR_SEP_KOR = r'[년年] ?' +MONTH_SEP_KOR = r'[월月] ?' +DAY_SEP_KOR = r'[일日]' +DATE_PATTERNS = [YEAR + DATE_SEP + MONTH + DATE_SEP + DAY, + YEAR + YEAR_SEP_KOR + MONTH_NUM + MONTH_SEP_KOR + DAY + DAY_SEP_KOR, + YEAR + YEAR_SEP_KOR + MONTH_NUM + MONTH_SEP_KOR, + MONTH_NUM + MONTH_SEP_KOR + DAY + DAY_SEP_KOR, + MONTH + DATE_SEP_US + DAY + DATE_SEP_US + YEAR, + DAY + DATE_SEP_US + MONTH + DATE_SEP_US + YEAR, + YEAR + MONTH_NUM_2DIGIT + DAY_2DIGIT, + MONTH_NUM_2DIGIT + DAY_2DIGIT + YEAR, + DAY_2DIGIT + MONTH_NUM_2DIGIT + YEAR] + +pattern_dict = {'alphabet': r'[a-zA-Z]+', + 'hangul': r'[ㄱ-ㅣ가-힣]+', + 'numeric': r'\d+', + 'emoji': r'\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468|\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468|\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469|\U0001f9d1\U0001f3fb\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fb|\U0001f9d1\U0001f3fc\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fb|\U0001f9d1\U0001f3fc\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fc|\U0001f9d1\U0001f3fd\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fb|\U0001f9d1\U0001f3fd\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fc|\U0001f9d1\U0001f3fd\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fd|\U0001f9d1\U0001f3fe\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fb|\U0001f9d1\U0001f3fe\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fc|\U0001f9d1\U0001f3fe\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fd|\U0001f9d1\U0001f3fe\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fe|\U0001f9d1\U0001f3ff\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fb|\U0001f9d1\U0001f3ff\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fc|\U0001f9d1\U0001f3ff\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fd|\U0001f9d1\U0001f3ff\u200d\U0001f91d\u200d\U0001f9d1\U0001f3fe|\U0001f9d1\U0001f3ff\u200d\U0001f91d\u200d\U0001f9d1\U0001f3ff|\U0001f469\U0001f3fc\u200d\U0001f91d\u200d\U0001f469\U0001f3fb|\U0001f469\U0001f3fd\u200d\U0001f91d\u200d\U0001f469\U0001f3fb|\U0001f469\U0001f3fd\u200d\U0001f91d\u200d\U0001f469\U0001f3fc|\U0001f469\U0001f3fe\u200d\U0001f91d\u200d\U0001f469\U0001f3fb|\U0001f469\U0001f3fe\u200d\U0001f91d\u200d\U0001f469\U0001f3fc|\U0001f469\U0001f3fe\u200d\U0001f91d\u200d\U0001f469\U0001f3fd|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f469\U0001f3fb|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f469\U0001f3fc|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f469\U0001f3fd|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f469\U0001f3fe|\U0001f469\U0001f3fb\u200d\U0001f91d\u200d\U0001f468\U0001f3fc|\U0001f469\U0001f3fb\u200d\U0001f91d\u200d\U0001f468\U0001f3fd|\U0001f469\U0001f3fb\u200d\U0001f91d\u200d\U0001f468\U0001f3fe|\U0001f469\U0001f3fb\u200d\U0001f91d\u200d\U0001f468\U0001f3ff|\U0001f469\U0001f3fc\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f469\U0001f3fc\u200d\U0001f91d\u200d\U0001f468\U0001f3fd|\U0001f469\U0001f3fc\u200d\U0001f91d\u200d\U0001f468\U0001f3fe|\U0001f469\U0001f3fc\u200d\U0001f91d\u200d\U0001f468\U0001f3ff|\U0001f469\U0001f3fd\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f469\U0001f3fd\u200d\U0001f91d\u200d\U0001f468\U0001f3fc|\U0001f469\U0001f3fd\u200d\U0001f91d\u200d\U0001f468\U0001f3fe|\U0001f469\U0001f3fd\u200d\U0001f91d\u200d\U0001f468\U0001f3ff|\U0001f469\U0001f3fe\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f469\U0001f3fe\u200d\U0001f91d\u200d\U0001f468\U0001f3fc|\U0001f469\U0001f3fe\u200d\U0001f91d\u200d\U0001f468\U0001f3fd|\U0001f469\U0001f3fe\u200d\U0001f91d\u200d\U0001f468\U0001f3ff|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fc|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fd|\U0001f469\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fe|\U0001f468\U0001f3fc\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f468\U0001f3fd\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f468\U0001f3fd\u200d\U0001f91d\u200d\U0001f468\U0001f3fc|\U0001f468\U0001f3fe\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f468\U0001f3fe\u200d\U0001f91d\u200d\U0001f468\U0001f3fc|\U0001f468\U0001f3fe\u200d\U0001f91d\u200d\U0001f468\U0001f3fd|\U0001f468\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fb|\U0001f468\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fc|\U0001f468\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fd|\U0001f468\U0001f3ff\u200d\U0001f91d\u200d\U0001f468\U0001f3fe|\U0001f469\u200d\u2764\u200d\U0001f48b\u200d\U0001f468|\U0001f468\u200d\u2764\u200d\U0001f48b\u200d\U0001f468|\U0001f469\u200d\u2764\u200d\U0001f48b\u200d\U0001f469|\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466|\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466|\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467|\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f466|\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f466|\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f467|\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466|\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466|\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467|\U0001f3f4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f|\U0001f3f4\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f|\U0001f3f4\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f|\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468|\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468|\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469|\U0001f441\ufe0f\u200d\U0001f5e8\ufe0f|\U0001f471\U0001f3fb\u200d\u2642\ufe0f|\U0001f471\U0001f3fc\u200d\u2642\ufe0f|\U0001f471\U0001f3fd\u200d\u2642\ufe0f|\U0001f471\U0001f3fe\u200d\u2642\ufe0f|\U0001f471\U0001f3ff\u200d\u2642\ufe0f|\U0001f471\U0001f3fb\u200d\u2640\ufe0f|\U0001f471\U0001f3fc\u200d\u2640\ufe0f|\U0001f471\U0001f3fd\u200d\u2640\ufe0f|\U0001f471\U0001f3fe\u200d\u2640\ufe0f|\U0001f471\U0001f3ff\u200d\u2640\ufe0f|\U0001f64d\U0001f3fb\u200d\u2642\ufe0f|\U0001f64d\U0001f3fc\u200d\u2642\ufe0f|\U0001f64d\U0001f3fd\u200d\u2642\ufe0f|\U0001f64d\U0001f3fe\u200d\u2642\ufe0f|\U0001f64d\U0001f3ff\u200d\u2642\ufe0f|\U0001f64d\U0001f3fb\u200d\u2640\ufe0f|\U0001f64d\U0001f3fc\u200d\u2640\ufe0f|\U0001f64d\U0001f3fd\u200d\u2640\ufe0f|\U0001f64d\U0001f3fe\u200d\u2640\ufe0f|\U0001f64d\U0001f3ff\u200d\u2640\ufe0f|\U0001f64e\U0001f3fb\u200d\u2642\ufe0f|\U0001f64e\U0001f3fc\u200d\u2642\ufe0f|\U0001f64e\U0001f3fd\u200d\u2642\ufe0f|\U0001f64e\U0001f3fe\u200d\u2642\ufe0f|\U0001f64e\U0001f3ff\u200d\u2642\ufe0f|\U0001f64e\U0001f3fb\u200d\u2640\ufe0f|\U0001f64e\U0001f3fc\u200d\u2640\ufe0f|\U0001f64e\U0001f3fd\u200d\u2640\ufe0f|\U0001f64e\U0001f3fe\u200d\u2640\ufe0f|\U0001f64e\U0001f3ff\u200d\u2640\ufe0f|\U0001f645\U0001f3fb\u200d\u2642\ufe0f|\U0001f645\U0001f3fc\u200d\u2642\ufe0f|\U0001f645\U0001f3fd\u200d\u2642\ufe0f|\U0001f645\U0001f3fe\u200d\u2642\ufe0f|\U0001f645\U0001f3ff\u200d\u2642\ufe0f|\U0001f645\U0001f3fb\u200d\u2640\ufe0f|\U0001f645\U0001f3fc\u200d\u2640\ufe0f|\U0001f645\U0001f3fd\u200d\u2640\ufe0f|\U0001f645\U0001f3fe\u200d\u2640\ufe0f|\U0001f645\U0001f3ff\u200d\u2640\ufe0f|\U0001f646\U0001f3fb\u200d\u2642\ufe0f|\U0001f646\U0001f3fc\u200d\u2642\ufe0f|\U0001f646\U0001f3fd\u200d\u2642\ufe0f|\U0001f646\U0001f3fe\u200d\u2642\ufe0f|\U0001f646\U0001f3ff\u200d\u2642\ufe0f|\U0001f646\U0001f3fb\u200d\u2640\ufe0f|\U0001f646\U0001f3fc\u200d\u2640\ufe0f|\U0001f646\U0001f3fd\u200d\u2640\ufe0f|\U0001f646\U0001f3fe\u200d\u2640\ufe0f|\U0001f646\U0001f3ff\u200d\u2640\ufe0f|\U0001f481\U0001f3fb\u200d\u2642\ufe0f|\U0001f481\U0001f3fc\u200d\u2642\ufe0f|\U0001f481\U0001f3fd\u200d\u2642\ufe0f|\U0001f481\U0001f3fe\u200d\u2642\ufe0f|\U0001f481\U0001f3ff\u200d\u2642\ufe0f|\U0001f481\U0001f3fb\u200d\u2640\ufe0f|\U0001f481\U0001f3fc\u200d\u2640\ufe0f|\U0001f481\U0001f3fd\u200d\u2640\ufe0f|\U0001f481\U0001f3fe\u200d\u2640\ufe0f|\U0001f481\U0001f3ff\u200d\u2640\ufe0f|\U0001f64b\U0001f3fb\u200d\u2642\ufe0f|\U0001f64b\U0001f3fc\u200d\u2642\ufe0f|\U0001f64b\U0001f3fd\u200d\u2642\ufe0f|\U0001f64b\U0001f3fe\u200d\u2642\ufe0f|\U0001f64b\U0001f3ff\u200d\u2642\ufe0f|\U0001f64b\U0001f3fb\u200d\u2640\ufe0f|\U0001f64b\U0001f3fc\u200d\u2640\ufe0f|\U0001f64b\U0001f3fd\u200d\u2640\ufe0f|\U0001f64b\U0001f3fe\u200d\u2640\ufe0f|\U0001f64b\U0001f3ff\u200d\u2640\ufe0f|\U0001f9cf\U0001f3fb\u200d\u2642\ufe0f|\U0001f9cf\U0001f3fc\u200d\u2642\ufe0f|\U0001f9cf\U0001f3fd\u200d\u2642\ufe0f|\U0001f9cf\U0001f3fe\u200d\u2642\ufe0f|\U0001f9cf\U0001f3ff\u200d\u2642\ufe0f|\U0001f9cf\U0001f3fb\u200d\u2640\ufe0f|\U0001f9cf\U0001f3fc\u200d\u2640\ufe0f|\U0001f9cf\U0001f3fd\u200d\u2640\ufe0f|\U0001f9cf\U0001f3fe\u200d\u2640\ufe0f|\U0001f9cf\U0001f3ff\u200d\u2640\ufe0f|\U0001f647\U0001f3fb\u200d\u2642\ufe0f|\U0001f647\U0001f3fc\u200d\u2642\ufe0f|\U0001f647\U0001f3fd\u200d\u2642\ufe0f|\U0001f647\U0001f3fe\u200d\u2642\ufe0f|\U0001f647\U0001f3ff\u200d\u2642\ufe0f|\U0001f647\U0001f3fb\u200d\u2640\ufe0f|\U0001f647\U0001f3fc\u200d\u2640\ufe0f|\U0001f647\U0001f3fd\u200d\u2640\ufe0f|\U0001f647\U0001f3fe\u200d\u2640\ufe0f|\U0001f647\U0001f3ff\u200d\u2640\ufe0f|\U0001f926\U0001f3fb\u200d\u2642\ufe0f|\U0001f926\U0001f3fc\u200d\u2642\ufe0f|\U0001f926\U0001f3fd\u200d\u2642\ufe0f|\U0001f926\U0001f3fe\u200d\u2642\ufe0f|\U0001f926\U0001f3ff\u200d\u2642\ufe0f|\U0001f926\U0001f3fb\u200d\u2640\ufe0f|\U0001f926\U0001f3fc\u200d\u2640\ufe0f|\U0001f926\U0001f3fd\u200d\u2640\ufe0f|\U0001f926\U0001f3fe\u200d\u2640\ufe0f|\U0001f926\U0001f3ff\u200d\u2640\ufe0f|\U0001f937\U0001f3fb\u200d\u2642\ufe0f|\U0001f937\U0001f3fc\u200d\u2642\ufe0f|\U0001f937\U0001f3fd\u200d\u2642\ufe0f|\U0001f937\U0001f3fe\u200d\u2642\ufe0f|\U0001f937\U0001f3ff\u200d\u2642\ufe0f|\U0001f937\U0001f3fb\u200d\u2640\ufe0f|\U0001f937\U0001f3fc\u200d\u2640\ufe0f|\U0001f937\U0001f3fd\u200d\u2640\ufe0f|\U0001f937\U0001f3fe\u200d\u2640\ufe0f|\U0001f937\U0001f3ff\u200d\u2640\ufe0f|\U0001f468\U0001f3fb\u200d\u2695\ufe0f|\U0001f468\U0001f3fc\u200d\u2695\ufe0f|\U0001f468\U0001f3fd\u200d\u2695\ufe0f|\U0001f468\U0001f3fe\u200d\u2695\ufe0f|\U0001f468\U0001f3ff\u200d\u2695\ufe0f|\U0001f469\U0001f3fb\u200d\u2695\ufe0f|\U0001f469\U0001f3fc\u200d\u2695\ufe0f|\U0001f469\U0001f3fd\u200d\u2695\ufe0f|\U0001f469\U0001f3fe\u200d\u2695\ufe0f|\U0001f469\U0001f3ff\u200d\u2695\ufe0f|\U0001f468\U0001f3fb\u200d\u2696\ufe0f|\U0001f468\U0001f3fc\u200d\u2696\ufe0f|\U0001f468\U0001f3fd\u200d\u2696\ufe0f|\U0001f468\U0001f3fe\u200d\u2696\ufe0f|\U0001f468\U0001f3ff\u200d\u2696\ufe0f|\U0001f469\U0001f3fb\u200d\u2696\ufe0f|\U0001f469\U0001f3fc\u200d\u2696\ufe0f|\U0001f469\U0001f3fd\u200d\u2696\ufe0f|\U0001f469\U0001f3fe\u200d\u2696\ufe0f|\U0001f469\U0001f3ff\u200d\u2696\ufe0f|\U0001f468\U0001f3fb\u200d\u2708\ufe0f|\U0001f468\U0001f3fc\u200d\u2708\ufe0f|\U0001f468\U0001f3fd\u200d\u2708\ufe0f|\U0001f468\U0001f3fe\u200d\u2708\ufe0f|\U0001f468\U0001f3ff\u200d\u2708\ufe0f|\U0001f469\U0001f3fb\u200d\u2708\ufe0f|\U0001f469\U0001f3fc\u200d\u2708\ufe0f|\U0001f469\U0001f3fd\u200d\u2708\ufe0f|\U0001f469\U0001f3fe\u200d\u2708\ufe0f|\U0001f469\U0001f3ff\u200d\u2708\ufe0f|\U0001f46e\U0001f3fb\u200d\u2642\ufe0f|\U0001f46e\U0001f3fc\u200d\u2642\ufe0f|\U0001f46e\U0001f3fd\u200d\u2642\ufe0f|\U0001f46e\U0001f3fe\u200d\u2642\ufe0f|\U0001f46e\U0001f3ff\u200d\u2642\ufe0f|\U0001f46e\U0001f3fb\u200d\u2640\ufe0f|\U0001f46e\U0001f3fc\u200d\u2640\ufe0f|\U0001f46e\U0001f3fd\u200d\u2640\ufe0f|\U0001f46e\U0001f3fe\u200d\u2640\ufe0f|\U0001f46e\U0001f3ff\u200d\u2640\ufe0f|\U0001f575\ufe0f\u200d\u2642\ufe0f|\U0001f575\U0001f3fb\u200d\u2642\ufe0f|\U0001f575\U0001f3fc\u200d\u2642\ufe0f|\U0001f575\U0001f3fd\u200d\u2642\ufe0f|\U0001f575\U0001f3fe\u200d\u2642\ufe0f|\U0001f575\U0001f3ff\u200d\u2642\ufe0f|\U0001f575\ufe0f\u200d\u2640\ufe0f|\U0001f575\U0001f3fb\u200d\u2640\ufe0f|\U0001f575\U0001f3fc\u200d\u2640\ufe0f|\U0001f575\U0001f3fd\u200d\u2640\ufe0f|\U0001f575\U0001f3fe\u200d\u2640\ufe0f|\U0001f575\U0001f3ff\u200d\u2640\ufe0f|\U0001f482\U0001f3fb\u200d\u2642\ufe0f|\U0001f482\U0001f3fc\u200d\u2642\ufe0f|\U0001f482\U0001f3fd\u200d\u2642\ufe0f|\U0001f482\U0001f3fe\u200d\u2642\ufe0f|\U0001f482\U0001f3ff\u200d\u2642\ufe0f|\U0001f482\U0001f3fb\u200d\u2640\ufe0f|\U0001f482\U0001f3fc\u200d\u2640\ufe0f|\U0001f482\U0001f3fd\u200d\u2640\ufe0f|\U0001f482\U0001f3fe\u200d\u2640\ufe0f|\U0001f482\U0001f3ff\u200d\u2640\ufe0f|\U0001f477\U0001f3fb\u200d\u2642\ufe0f|\U0001f477\U0001f3fc\u200d\u2642\ufe0f|\U0001f477\U0001f3fd\u200d\u2642\ufe0f|\U0001f477\U0001f3fe\u200d\u2642\ufe0f|\U0001f477\U0001f3ff\u200d\u2642\ufe0f|\U0001f477\U0001f3fb\u200d\u2640\ufe0f|\U0001f477\U0001f3fc\u200d\u2640\ufe0f|\U0001f477\U0001f3fd\u200d\u2640\ufe0f|\U0001f477\U0001f3fe\u200d\u2640\ufe0f|\U0001f477\U0001f3ff\u200d\u2640\ufe0f|\U0001f473\U0001f3fb\u200d\u2642\ufe0f|\U0001f473\U0001f3fc\u200d\u2642\ufe0f|\U0001f473\U0001f3fd\u200d\u2642\ufe0f|\U0001f473\U0001f3fe\u200d\u2642\ufe0f|\U0001f473\U0001f3ff\u200d\u2642\ufe0f|\U0001f473\U0001f3fb\u200d\u2640\ufe0f|\U0001f473\U0001f3fc\u200d\u2640\ufe0f|\U0001f473\U0001f3fd\u200d\u2640\ufe0f|\U0001f473\U0001f3fe\u200d\u2640\ufe0f|\U0001f473\U0001f3ff\u200d\u2640\ufe0f|\U0001f9b8\U0001f3fb\u200d\u2642\ufe0f|\U0001f9b8\U0001f3fc\u200d\u2642\ufe0f|\U0001f9b8\U0001f3fd\u200d\u2642\ufe0f|\U0001f9b8\U0001f3fe\u200d\u2642\ufe0f|\U0001f9b8\U0001f3ff\u200d\u2642\ufe0f|\U0001f9b8\U0001f3fb\u200d\u2640\ufe0f|\U0001f9b8\U0001f3fc\u200d\u2640\ufe0f|\U0001f9b8\U0001f3fd\u200d\u2640\ufe0f|\U0001f9b8\U0001f3fe\u200d\u2640\ufe0f|\U0001f9b8\U0001f3ff\u200d\u2640\ufe0f|\U0001f9b9\U0001f3fb\u200d\u2642\ufe0f|\U0001f9b9\U0001f3fc\u200d\u2642\ufe0f|\U0001f9b9\U0001f3fd\u200d\u2642\ufe0f|\U0001f9b9\U0001f3fe\u200d\u2642\ufe0f|\U0001f9b9\U0001f3ff\u200d\u2642\ufe0f|\U0001f9b9\U0001f3fb\u200d\u2640\ufe0f|\U0001f9b9\U0001f3fc\u200d\u2640\ufe0f|\U0001f9b9\U0001f3fd\u200d\u2640\ufe0f|\U0001f9b9\U0001f3fe\u200d\u2640\ufe0f|\U0001f9b9\U0001f3ff\u200d\u2640\ufe0f|\U0001f9d9\U0001f3fb\u200d\u2642\ufe0f|\U0001f9d9\U0001f3fc\u200d\u2642\ufe0f|\U0001f9d9\U0001f3fd\u200d\u2642\ufe0f|\U0001f9d9\U0001f3fe\u200d\u2642\ufe0f|\U0001f9d9\U0001f3ff\u200d\u2642\ufe0f|\U0001f9d9\U0001f3fb\u200d\u2640\ufe0f|\U0001f9d9\U0001f3fc\u200d\u2640\ufe0f|\U0001f9d9\U0001f3fd\u200d\u2640\ufe0f|\U0001f9d9\U0001f3fe\u200d\u2640\ufe0f|\U0001f9d9\U0001f3ff\u200d\u2640\ufe0f|\U0001f9da\U0001f3fb\u200d\u2642\ufe0f|\U0001f9da\U0001f3fc\u200d\u2642\ufe0f|\U0001f9da\U0001f3fd\u200d\u2642\ufe0f|\U0001f9da\U0001f3fe\u200d\u2642\ufe0f|\U0001f9da\U0001f3ff\u200d\u2642\ufe0f|\U0001f9da\U0001f3fb\u200d\u2640\ufe0f|\U0001f9da\U0001f3fc\u200d\u2640\ufe0f|\U0001f9da\U0001f3fd\u200d\u2640\ufe0f|\U0001f9da\U0001f3fe\u200d\u2640\ufe0f|\U0001f9da\U0001f3ff\u200d\u2640\ufe0f|\U0001f9db\U0001f3fb\u200d\u2642\ufe0f|\U0001f9db\U0001f3fc\u200d\u2642\ufe0f|\U0001f9db\U0001f3fd\u200d\u2642\ufe0f|\U0001f9db\U0001f3fe\u200d\u2642\ufe0f|\U0001f9db\U0001f3ff\u200d\u2642\ufe0f|\U0001f9db\U0001f3fb\u200d\u2640\ufe0f|\U0001f9db\U0001f3fc\u200d\u2640\ufe0f|\U0001f9db\U0001f3fd\u200d\u2640\ufe0f|\U0001f9db\U0001f3fe\u200d\u2640\ufe0f|\U0001f9db\U0001f3ff\u200d\u2640\ufe0f|\U0001f9dc\U0001f3fb\u200d\u2642\ufe0f|\U0001f9dc\U0001f3fc\u200d\u2642\ufe0f|\U0001f9dc\U0001f3fd\u200d\u2642\ufe0f|\U0001f9dc\U0001f3fe\u200d\u2642\ufe0f|\U0001f9dc\U0001f3ff\u200d\u2642\ufe0f|\U0001f9dc\U0001f3fb\u200d\u2640\ufe0f|\U0001f9dc\U0001f3fc\u200d\u2640\ufe0f|\U0001f9dc\U0001f3fd\u200d\u2640\ufe0f|\U0001f9dc\U0001f3fe\u200d\u2640\ufe0f|\U0001f9dc\U0001f3ff\u200d\u2640\ufe0f|\U0001f9dd\U0001f3fb\u200d\u2642\ufe0f|\U0001f9dd\U0001f3fc\u200d\u2642\ufe0f|\U0001f9dd\U0001f3fd\u200d\u2642\ufe0f|\U0001f9dd\U0001f3fe\u200d\u2642\ufe0f|\U0001f9dd\U0001f3ff\u200d\u2642\ufe0f|\U0001f9dd\U0001f3fb\u200d\u2640\ufe0f|\U0001f9dd\U0001f3fc\u200d\u2640\ufe0f|\U0001f9dd\U0001f3fd\u200d\u2640\ufe0f|\U0001f9dd\U0001f3fe\u200d\u2640\ufe0f|\U0001f9dd\U0001f3ff\u200d\u2640\ufe0f|\U0001f486\U0001f3fb\u200d\u2642\ufe0f|\U0001f486\U0001f3fc\u200d\u2642\ufe0f|\U0001f486\U0001f3fd\u200d\u2642\ufe0f|\U0001f486\U0001f3fe\u200d\u2642\ufe0f|\U0001f486\U0001f3ff\u200d\u2642\ufe0f|\U0001f486\U0001f3fb\u200d\u2640\ufe0f|\U0001f486\U0001f3fc\u200d\u2640\ufe0f|\U0001f486\U0001f3fd\u200d\u2640\ufe0f|\U0001f486\U0001f3fe\u200d\u2640\ufe0f|\U0001f486\U0001f3ff\u200d\u2640\ufe0f|\U0001f487\U0001f3fb\u200d\u2642\ufe0f|\U0001f487\U0001f3fc\u200d\u2642\ufe0f|\U0001f487\U0001f3fd\u200d\u2642\ufe0f|\U0001f487\U0001f3fe\u200d\u2642\ufe0f|\U0001f487\U0001f3ff\u200d\u2642\ufe0f|\U0001f487\U0001f3fb\u200d\u2640\ufe0f|\U0001f487\U0001f3fc\u200d\u2640\ufe0f|\U0001f487\U0001f3fd\u200d\u2640\ufe0f|\U0001f487\U0001f3fe\u200d\u2640\ufe0f|\U0001f487\U0001f3ff\u200d\u2640\ufe0f|\U0001f6b6\U0001f3fb\u200d\u2642\ufe0f|\U0001f6b6\U0001f3fc\u200d\u2642\ufe0f|\U0001f6b6\U0001f3fd\u200d\u2642\ufe0f|\U0001f6b6\U0001f3fe\u200d\u2642\ufe0f|\U0001f6b6\U0001f3ff\u200d\u2642\ufe0f|\U0001f6b6\U0001f3fb\u200d\u2640\ufe0f|\U0001f6b6\U0001f3fc\u200d\u2640\ufe0f|\U0001f6b6\U0001f3fd\u200d\u2640\ufe0f|\U0001f6b6\U0001f3fe\u200d\u2640\ufe0f|\U0001f6b6\U0001f3ff\u200d\u2640\ufe0f|\U0001f9cd\U0001f3fb\u200d\u2642\ufe0f|\U0001f9cd\U0001f3fc\u200d\u2642\ufe0f|\U0001f9cd\U0001f3fd\u200d\u2642\ufe0f|\U0001f9cd\U0001f3fe\u200d\u2642\ufe0f|\U0001f9cd\U0001f3ff\u200d\u2642\ufe0f|\U0001f9cd\U0001f3fb\u200d\u2640\ufe0f|\U0001f9cd\U0001f3fc\u200d\u2640\ufe0f|\U0001f9cd\U0001f3fd\u200d\u2640\ufe0f|\U0001f9cd\U0001f3fe\u200d\u2640\ufe0f|\U0001f9cd\U0001f3ff\u200d\u2640\ufe0f|\U0001f9ce\U0001f3fb\u200d\u2642\ufe0f|\U0001f9ce\U0001f3fc\u200d\u2642\ufe0f|\U0001f9ce\U0001f3fd\u200d\u2642\ufe0f|\U0001f9ce\U0001f3fe\u200d\u2642\ufe0f|\U0001f9ce\U0001f3ff\u200d\u2642\ufe0f|\U0001f9ce\U0001f3fb\u200d\u2640\ufe0f|\U0001f9ce\U0001f3fc\u200d\u2640\ufe0f|\U0001f9ce\U0001f3fd\u200d\u2640\ufe0f|\U0001f9ce\U0001f3fe\u200d\u2640\ufe0f|\U0001f9ce\U0001f3ff\u200d\u2640\ufe0f|\U0001f3c3\U0001f3fb\u200d\u2642\ufe0f|\U0001f3c3\U0001f3fc\u200d\u2642\ufe0f|\U0001f3c3\U0001f3fd\u200d\u2642\ufe0f|\U0001f3c3\U0001f3fe\u200d\u2642\ufe0f|\U0001f3c3\U0001f3ff\u200d\u2642\ufe0f|\U0001f3c3\U0001f3fb\u200d\u2640\ufe0f|\U0001f3c3\U0001f3fc\u200d\u2640\ufe0f|\U0001f3c3\U0001f3fd\u200d\u2640\ufe0f|\U0001f3c3\U0001f3fe\u200d\u2640\ufe0f|\U0001f3c3\U0001f3ff\u200d\u2640\ufe0f|\U0001f9d6\U0001f3fb\u200d\u2642\ufe0f|\U0001f9d6\U0001f3fc\u200d\u2642\ufe0f|\U0001f9d6\U0001f3fd\u200d\u2642\ufe0f|\U0001f9d6\U0001f3fe\u200d\u2642\ufe0f|\U0001f9d6\U0001f3ff\u200d\u2642\ufe0f|\U0001f9d6\U0001f3fb\u200d\u2640\ufe0f|\U0001f9d6\U0001f3fc\u200d\u2640\ufe0f|\U0001f9d6\U0001f3fd\u200d\u2640\ufe0f|\U0001f9d6\U0001f3fe\u200d\u2640\ufe0f|\U0001f9d6\U0001f3ff\u200d\u2640\ufe0f|\U0001f9d7\U0001f3fb\u200d\u2642\ufe0f|\U0001f9d7\U0001f3fc\u200d\u2642\ufe0f|\U0001f9d7\U0001f3fd\u200d\u2642\ufe0f|\U0001f9d7\U0001f3fe\u200d\u2642\ufe0f|\U0001f9d7\U0001f3ff\u200d\u2642\ufe0f|\U0001f9d7\U0001f3fb\u200d\u2640\ufe0f|\U0001f9d7\U0001f3fc\u200d\u2640\ufe0f|\U0001f9d7\U0001f3fd\u200d\u2640\ufe0f|\U0001f9d7\U0001f3fe\u200d\u2640\ufe0f|\U0001f9d7\U0001f3ff\u200d\u2640\ufe0f|\U0001f3cc\ufe0f\u200d\u2642\ufe0f|\U0001f3cc\U0001f3fb\u200d\u2642\ufe0f|\U0001f3cc\U0001f3fc\u200d\u2642\ufe0f|\U0001f3cc\U0001f3fd\u200d\u2642\ufe0f|\U0001f3cc\U0001f3fe\u200d\u2642\ufe0f|\U0001f3cc\U0001f3ff\u200d\u2642\ufe0f|\U0001f3cc\ufe0f\u200d\u2640\ufe0f|\U0001f3cc\U0001f3fb\u200d\u2640\ufe0f|\U0001f3cc\U0001f3fc\u200d\u2640\ufe0f|\U0001f3cc\U0001f3fd\u200d\u2640\ufe0f|\U0001f3cc\U0001f3fe\u200d\u2640\ufe0f|\U0001f3cc\U0001f3ff\u200d\u2640\ufe0f|\U0001f3c4\U0001f3fb\u200d\u2642\ufe0f|\U0001f3c4\U0001f3fc\u200d\u2642\ufe0f|\U0001f3c4\U0001f3fd\u200d\u2642\ufe0f|\U0001f3c4\U0001f3fe\u200d\u2642\ufe0f|\U0001f3c4\U0001f3ff\u200d\u2642\ufe0f|\U0001f3c4\U0001f3fb\u200d\u2640\ufe0f|\U0001f3c4\U0001f3fc\u200d\u2640\ufe0f|\U0001f3c4\U0001f3fd\u200d\u2640\ufe0f|\U0001f3c4\U0001f3fe\u200d\u2640\ufe0f|\U0001f3c4\U0001f3ff\u200d\u2640\ufe0f|\U0001f6a3\U0001f3fb\u200d\u2642\ufe0f|\U0001f6a3\U0001f3fc\u200d\u2642\ufe0f|\U0001f6a3\U0001f3fd\u200d\u2642\ufe0f|\U0001f6a3\U0001f3fe\u200d\u2642\ufe0f|\U0001f6a3\U0001f3ff\u200d\u2642\ufe0f|\U0001f6a3\U0001f3fb\u200d\u2640\ufe0f|\U0001f6a3\U0001f3fc\u200d\u2640\ufe0f|\U0001f6a3\U0001f3fd\u200d\u2640\ufe0f|\U0001f6a3\U0001f3fe\u200d\u2640\ufe0f|\U0001f6a3\U0001f3ff\u200d\u2640\ufe0f|\U0001f3ca\U0001f3fb\u200d\u2642\ufe0f|\U0001f3ca\U0001f3fc\u200d\u2642\ufe0f|\U0001f3ca\U0001f3fd\u200d\u2642\ufe0f|\U0001f3ca\U0001f3fe\u200d\u2642\ufe0f|\U0001f3ca\U0001f3ff\u200d\u2642\ufe0f|\U0001f3ca\U0001f3fb\u200d\u2640\ufe0f|\U0001f3ca\U0001f3fc\u200d\u2640\ufe0f|\U0001f3ca\U0001f3fd\u200d\u2640\ufe0f|\U0001f3ca\U0001f3fe\u200d\u2640\ufe0f|\U0001f3ca\U0001f3ff\u200d\u2640\ufe0f|\u26f9\ufe0f\u200d\u2642\ufe0f|\u26f9\U0001f3fb\u200d\u2642\ufe0f|\u26f9\U0001f3fc\u200d\u2642\ufe0f|\u26f9\U0001f3fd\u200d\u2642\ufe0f|\u26f9\U0001f3fe\u200d\u2642\ufe0f|\u26f9\U0001f3ff\u200d\u2642\ufe0f|\u26f9\ufe0f\u200d\u2640\ufe0f|\u26f9\U0001f3fb\u200d\u2640\ufe0f|\u26f9\U0001f3fc\u200d\u2640\ufe0f|\u26f9\U0001f3fd\u200d\u2640\ufe0f|\u26f9\U0001f3fe\u200d\u2640\ufe0f|\u26f9\U0001f3ff\u200d\u2640\ufe0f|\U0001f3cb\ufe0f\u200d\u2642\ufe0f|\U0001f3cb\U0001f3fb\u200d\u2642\ufe0f|\U0001f3cb\U0001f3fc\u200d\u2642\ufe0f|\U0001f3cb\U0001f3fd\u200d\u2642\ufe0f|\U0001f3cb\U0001f3fe\u200d\u2642\ufe0f|\U0001f3cb\U0001f3ff\u200d\u2642\ufe0f|\U0001f3cb\ufe0f\u200d\u2640\ufe0f|\U0001f3cb\U0001f3fb\u200d\u2640\ufe0f|\U0001f3cb\U0001f3fc\u200d\u2640\ufe0f|\U0001f3cb\U0001f3fd\u200d\u2640\ufe0f|\U0001f3cb\U0001f3fe\u200d\u2640\ufe0f|\U0001f3cb\U0001f3ff\u200d\u2640\ufe0f|\U0001f6b4\U0001f3fb\u200d\u2642\ufe0f|\U0001f6b4\U0001f3fc\u200d\u2642\ufe0f|\U0001f6b4\U0001f3fd\u200d\u2642\ufe0f|\U0001f6b4\U0001f3fe\u200d\u2642\ufe0f|\U0001f6b4\U0001f3ff\u200d\u2642\ufe0f|\U0001f6b4\U0001f3fb\u200d\u2640\ufe0f|\U0001f6b4\U0001f3fc\u200d\u2640\ufe0f|\U0001f6b4\U0001f3fd\u200d\u2640\ufe0f|\U0001f6b4\U0001f3fe\u200d\u2640\ufe0f|\U0001f6b4\U0001f3ff\u200d\u2640\ufe0f|\U0001f6b5\U0001f3fb\u200d\u2642\ufe0f|\U0001f6b5\U0001f3fc\u200d\u2642\ufe0f|\U0001f6b5\U0001f3fd\u200d\u2642\ufe0f|\U0001f6b5\U0001f3fe\u200d\u2642\ufe0f|\U0001f6b5\U0001f3ff\u200d\u2642\ufe0f|\U0001f6b5\U0001f3fb\u200d\u2640\ufe0f|\U0001f6b5\U0001f3fc\u200d\u2640\ufe0f|\U0001f6b5\U0001f3fd\u200d\u2640\ufe0f|\U0001f6b5\U0001f3fe\u200d\u2640\ufe0f|\U0001f6b5\U0001f3ff\u200d\u2640\ufe0f|\U0001f938\U0001f3fb\u200d\u2642\ufe0f|\U0001f938\U0001f3fc\u200d\u2642\ufe0f|\U0001f938\U0001f3fd\u200d\u2642\ufe0f|\U0001f938\U0001f3fe\u200d\u2642\ufe0f|\U0001f938\U0001f3ff\u200d\u2642\ufe0f|\U0001f938\U0001f3fb\u200d\u2640\ufe0f|\U0001f938\U0001f3fc\u200d\u2640\ufe0f|\U0001f938\U0001f3fd\u200d\u2640\ufe0f|\U0001f938\U0001f3fe\u200d\u2640\ufe0f|\U0001f938\U0001f3ff\u200d\u2640\ufe0f|\U0001f93d\U0001f3fb\u200d\u2642\ufe0f|\U0001f93d\U0001f3fc\u200d\u2642\ufe0f|\U0001f93d\U0001f3fd\u200d\u2642\ufe0f|\U0001f93d\U0001f3fe\u200d\u2642\ufe0f|\U0001f93d\U0001f3ff\u200d\u2642\ufe0f|\U0001f93d\U0001f3fb\u200d\u2640\ufe0f|\U0001f93d\U0001f3fc\u200d\u2640\ufe0f|\U0001f93d\U0001f3fd\u200d\u2640\ufe0f|\U0001f93d\U0001f3fe\u200d\u2640\ufe0f|\U0001f93d\U0001f3ff\u200d\u2640\ufe0f|\U0001f93e\U0001f3fb\u200d\u2642\ufe0f|\U0001f93e\U0001f3fc\u200d\u2642\ufe0f|\U0001f93e\U0001f3fd\u200d\u2642\ufe0f|\U0001f93e\U0001f3fe\u200d\u2642\ufe0f|\U0001f93e\U0001f3ff\u200d\u2642\ufe0f|\U0001f93e\U0001f3fb\u200d\u2640\ufe0f|\U0001f93e\U0001f3fc\u200d\u2640\ufe0f|\U0001f93e\U0001f3fd\u200d\u2640\ufe0f|\U0001f93e\U0001f3fe\u200d\u2640\ufe0f|\U0001f93e\U0001f3ff\u200d\u2640\ufe0f|\U0001f939\U0001f3fb\u200d\u2642\ufe0f|\U0001f939\U0001f3fc\u200d\u2642\ufe0f|\U0001f939\U0001f3fd\u200d\u2642\ufe0f|\U0001f939\U0001f3fe\u200d\u2642\ufe0f|\U0001f939\U0001f3ff\u200d\u2642\ufe0f|\U0001f939\U0001f3fb\u200d\u2640\ufe0f|\U0001f939\U0001f3fc\u200d\u2640\ufe0f|\U0001f939\U0001f3fd\u200d\u2640\ufe0f|\U0001f939\U0001f3fe\u200d\u2640\ufe0f|\U0001f939\U0001f3ff\u200d\u2640\ufe0f|\U0001f9d8\U0001f3fb\u200d\u2642\ufe0f|\U0001f9d8\U0001f3fc\u200d\u2642\ufe0f|\U0001f9d8\U0001f3fd\u200d\u2642\ufe0f|\U0001f9d8\U0001f3fe\u200d\u2642\ufe0f|\U0001f9d8\U0001f3ff\u200d\u2642\ufe0f|\U0001f9d8\U0001f3fb\u200d\u2640\ufe0f|\U0001f9d8\U0001f3fc\u200d\u2640\ufe0f|\U0001f9d8\U0001f3fd\u200d\u2640\ufe0f|\U0001f9d8\U0001f3fe\u200d\u2640\ufe0f|\U0001f9d8\U0001f3ff\u200d\u2640\ufe0f|\U0001f9d1\u200d\U0001f91d\u200d\U0001f9d1|\U0001f469\u200d\u2764\u200d\U0001f468|\U0001f468\u200d\u2764\u200d\U0001f468|\U0001f469\u200d\u2764\u200d\U0001f469|\U0001f468\u200d\U0001f469\u200d\U0001f466|\U0001f468\u200d\U0001f469\u200d\U0001f467|\U0001f468\u200d\U0001f468\u200d\U0001f466|\U0001f468\u200d\U0001f468\u200d\U0001f467|\U0001f469\u200d\U0001f469\u200d\U0001f466|\U0001f469\u200d\U0001f469\u200d\U0001f467|\U0001f468\u200d\U0001f466\u200d\U0001f466|\U0001f468\u200d\U0001f467\u200d\U0001f466|\U0001f468\u200d\U0001f467\u200d\U0001f467|\U0001f469\u200d\U0001f466\u200d\U0001f466|\U0001f469\u200d\U0001f467\u200d\U0001f466|\U0001f469\u200d\U0001f467\u200d\U0001f467|\U0001f441\u200d\U0001f5e8\ufe0f|\U0001f441\ufe0f\u200d\U0001f5e8|\U0001f471\u200d\u2642\ufe0f|\U0001f471\U0001f3fb\u200d\u2642|\U0001f471\U0001f3fc\u200d\u2642|\U0001f471\U0001f3fd\u200d\u2642|\U0001f471\U0001f3fe\u200d\u2642|\U0001f471\U0001f3ff\u200d\u2642|\U0001f468\U0001f3fb\u200d\U0001f9b0|\U0001f468\U0001f3fc\u200d\U0001f9b0|\U0001f468\U0001f3fd\u200d\U0001f9b0|\U0001f468\U0001f3fe\u200d\U0001f9b0|\U0001f468\U0001f3ff\u200d\U0001f9b0|\U0001f468\U0001f3fb\u200d\U0001f9b1|\U0001f468\U0001f3fc\u200d\U0001f9b1|\U0001f468\U0001f3fd\u200d\U0001f9b1|\U0001f468\U0001f3fe\u200d\U0001f9b1|\U0001f468\U0001f3ff\u200d\U0001f9b1|\U0001f468\U0001f3fb\u200d\U0001f9b3|\U0001f468\U0001f3fc\u200d\U0001f9b3|\U0001f468\U0001f3fd\u200d\U0001f9b3|\U0001f468\U0001f3fe\u200d\U0001f9b3|\U0001f468\U0001f3ff\u200d\U0001f9b3|\U0001f468\U0001f3fb\u200d\U0001f9b2|\U0001f468\U0001f3fc\u200d\U0001f9b2|\U0001f468\U0001f3fd\u200d\U0001f9b2|\U0001f468\U0001f3fe\u200d\U0001f9b2|\U0001f468\U0001f3ff\u200d\U0001f9b2|\U0001f471\u200d\u2640\ufe0f|\U0001f471\U0001f3fb\u200d\u2640|\U0001f471\U0001f3fc\u200d\u2640|\U0001f471\U0001f3fd\u200d\u2640|\U0001f471\U0001f3fe\u200d\u2640|\U0001f471\U0001f3ff\u200d\u2640|\U0001f469\U0001f3fb\u200d\U0001f9b0|\U0001f469\U0001f3fc\u200d\U0001f9b0|\U0001f469\U0001f3fd\u200d\U0001f9b0|\U0001f469\U0001f3fe\u200d\U0001f9b0|\U0001f469\U0001f3ff\u200d\U0001f9b0|\U0001f469\U0001f3fb\u200d\U0001f9b1|\U0001f469\U0001f3fc\u200d\U0001f9b1|\U0001f469\U0001f3fd\u200d\U0001f9b1|\U0001f469\U0001f3fe\u200d\U0001f9b1|\U0001f469\U0001f3ff\u200d\U0001f9b1|\U0001f469\U0001f3fb\u200d\U0001f9b3|\U0001f469\U0001f3fc\u200d\U0001f9b3|\U0001f469\U0001f3fd\u200d\U0001f9b3|\U0001f469\U0001f3fe\u200d\U0001f9b3|\U0001f469\U0001f3ff\u200d\U0001f9b3|\U0001f469\U0001f3fb\u200d\U0001f9b2|\U0001f469\U0001f3fc\u200d\U0001f9b2|\U0001f469\U0001f3fd\u200d\U0001f9b2|\U0001f469\U0001f3fe\u200d\U0001f9b2|\U0001f469\U0001f3ff\u200d\U0001f9b2|\U0001f64d\u200d\u2642\ufe0f|\U0001f64d\U0001f3fb\u200d\u2642|\U0001f64d\U0001f3fc\u200d\u2642|\U0001f64d\U0001f3fd\u200d\u2642|\U0001f64d\U0001f3fe\u200d\u2642|\U0001f64d\U0001f3ff\u200d\u2642|\U0001f64d\u200d\u2640\ufe0f|\U0001f64d\U0001f3fb\u200d\u2640|\U0001f64d\U0001f3fc\u200d\u2640|\U0001f64d\U0001f3fd\u200d\u2640|\U0001f64d\U0001f3fe\u200d\u2640|\U0001f64d\U0001f3ff\u200d\u2640|\U0001f64e\u200d\u2642\ufe0f|\U0001f64e\U0001f3fb\u200d\u2642|\U0001f64e\U0001f3fc\u200d\u2642|\U0001f64e\U0001f3fd\u200d\u2642|\U0001f64e\U0001f3fe\u200d\u2642|\U0001f64e\U0001f3ff\u200d\u2642|\U0001f64e\u200d\u2640\ufe0f|\U0001f64e\U0001f3fb\u200d\u2640|\U0001f64e\U0001f3fc\u200d\u2640|\U0001f64e\U0001f3fd\u200d\u2640|\U0001f64e\U0001f3fe\u200d\u2640|\U0001f64e\U0001f3ff\u200d\u2640|\U0001f645\u200d\u2642\ufe0f|\U0001f645\U0001f3fb\u200d\u2642|\U0001f645\U0001f3fc\u200d\u2642|\U0001f645\U0001f3fd\u200d\u2642|\U0001f645\U0001f3fe\u200d\u2642|\U0001f645\U0001f3ff\u200d\u2642|\U0001f645\u200d\u2640\ufe0f|\U0001f645\U0001f3fb\u200d\u2640|\U0001f645\U0001f3fc\u200d\u2640|\U0001f645\U0001f3fd\u200d\u2640|\U0001f645\U0001f3fe\u200d\u2640|\U0001f645\U0001f3ff\u200d\u2640|\U0001f646\u200d\u2642\ufe0f|\U0001f646\U0001f3fb\u200d\u2642|\U0001f646\U0001f3fc\u200d\u2642|\U0001f646\U0001f3fd\u200d\u2642|\U0001f646\U0001f3fe\u200d\u2642|\U0001f646\U0001f3ff\u200d\u2642|\U0001f646\u200d\u2640\ufe0f|\U0001f646\U0001f3fb\u200d\u2640|\U0001f646\U0001f3fc\u200d\u2640|\U0001f646\U0001f3fd\u200d\u2640|\U0001f646\U0001f3fe\u200d\u2640|\U0001f646\U0001f3ff\u200d\u2640|\U0001f481\u200d\u2642\ufe0f|\U0001f481\U0001f3fb\u200d\u2642|\U0001f481\U0001f3fc\u200d\u2642|\U0001f481\U0001f3fd\u200d\u2642|\U0001f481\U0001f3fe\u200d\u2642|\U0001f481\U0001f3ff\u200d\u2642|\U0001f481\u200d\u2640\ufe0f|\U0001f481\U0001f3fb\u200d\u2640|\U0001f481\U0001f3fc\u200d\u2640|\U0001f481\U0001f3fd\u200d\u2640|\U0001f481\U0001f3fe\u200d\u2640|\U0001f481\U0001f3ff\u200d\u2640|\U0001f64b\u200d\u2642\ufe0f|\U0001f64b\U0001f3fb\u200d\u2642|\U0001f64b\U0001f3fc\u200d\u2642|\U0001f64b\U0001f3fd\u200d\u2642|\U0001f64b\U0001f3fe\u200d\u2642|\U0001f64b\U0001f3ff\u200d\u2642|\U0001f64b\u200d\u2640\ufe0f|\U0001f64b\U0001f3fb\u200d\u2640|\U0001f64b\U0001f3fc\u200d\u2640|\U0001f64b\U0001f3fd\u200d\u2640|\U0001f64b\U0001f3fe\u200d\u2640|\U0001f64b\U0001f3ff\u200d\u2640|\U0001f9cf\u200d\u2642\ufe0f|\U0001f9cf\U0001f3fb\u200d\u2642|\U0001f9cf\U0001f3fc\u200d\u2642|\U0001f9cf\U0001f3fd\u200d\u2642|\U0001f9cf\U0001f3fe\u200d\u2642|\U0001f9cf\U0001f3ff\u200d\u2642|\U0001f9cf\u200d\u2640\ufe0f|\U0001f9cf\U0001f3fb\u200d\u2640|\U0001f9cf\U0001f3fc\u200d\u2640|\U0001f9cf\U0001f3fd\u200d\u2640|\U0001f9cf\U0001f3fe\u200d\u2640|\U0001f9cf\U0001f3ff\u200d\u2640|\U0001f647\u200d\u2642\ufe0f|\U0001f647\U0001f3fb\u200d\u2642|\U0001f647\U0001f3fc\u200d\u2642|\U0001f647\U0001f3fd\u200d\u2642|\U0001f647\U0001f3fe\u200d\u2642|\U0001f647\U0001f3ff\u200d\u2642|\U0001f647\u200d\u2640\ufe0f|\U0001f647\U0001f3fb\u200d\u2640|\U0001f647\U0001f3fc\u200d\u2640|\U0001f647\U0001f3fd\u200d\u2640|\U0001f647\U0001f3fe\u200d\u2640|\U0001f647\U0001f3ff\u200d\u2640|\U0001f926\u200d\u2642\ufe0f|\U0001f926\U0001f3fb\u200d\u2642|\U0001f926\U0001f3fc\u200d\u2642|\U0001f926\U0001f3fd\u200d\u2642|\U0001f926\U0001f3fe\u200d\u2642|\U0001f926\U0001f3ff\u200d\u2642|\U0001f926\u200d\u2640\ufe0f|\U0001f926\U0001f3fb\u200d\u2640|\U0001f926\U0001f3fc\u200d\u2640|\U0001f926\U0001f3fd\u200d\u2640|\U0001f926\U0001f3fe\u200d\u2640|\U0001f926\U0001f3ff\u200d\u2640|\U0001f937\u200d\u2642\ufe0f|\U0001f937\U0001f3fb\u200d\u2642|\U0001f937\U0001f3fc\u200d\u2642|\U0001f937\U0001f3fd\u200d\u2642|\U0001f937\U0001f3fe\u200d\u2642|\U0001f937\U0001f3ff\u200d\u2642|\U0001f937\u200d\u2640\ufe0f|\U0001f937\U0001f3fb\u200d\u2640|\U0001f937\U0001f3fc\u200d\u2640|\U0001f937\U0001f3fd\u200d\u2640|\U0001f937\U0001f3fe\u200d\u2640|\U0001f937\U0001f3ff\u200d\u2640|\U0001f468\u200d\u2695\ufe0f|\U0001f468\U0001f3fb\u200d\u2695|\U0001f468\U0001f3fc\u200d\u2695|\U0001f468\U0001f3fd\u200d\u2695|\U0001f468\U0001f3fe\u200d\u2695|\U0001f468\U0001f3ff\u200d\u2695|\U0001f469\u200d\u2695\ufe0f|\U0001f469\U0001f3fb\u200d\u2695|\U0001f469\U0001f3fc\u200d\u2695|\U0001f469\U0001f3fd\u200d\u2695|\U0001f469\U0001f3fe\u200d\u2695|\U0001f469\U0001f3ff\u200d\u2695|\U0001f468\U0001f3fb\u200d\U0001f393|\U0001f468\U0001f3fc\u200d\U0001f393|\U0001f468\U0001f3fd\u200d\U0001f393|\U0001f468\U0001f3fe\u200d\U0001f393|\U0001f468\U0001f3ff\u200d\U0001f393|\U0001f469\U0001f3fb\u200d\U0001f393|\U0001f469\U0001f3fc\u200d\U0001f393|\U0001f469\U0001f3fd\u200d\U0001f393|\U0001f469\U0001f3fe\u200d\U0001f393|\U0001f469\U0001f3ff\u200d\U0001f393|\U0001f468\U0001f3fb\u200d\U0001f3eb|\U0001f468\U0001f3fc\u200d\U0001f3eb|\U0001f468\U0001f3fd\u200d\U0001f3eb|\U0001f468\U0001f3fe\u200d\U0001f3eb|\U0001f468\U0001f3ff\u200d\U0001f3eb|\U0001f469\U0001f3fb\u200d\U0001f3eb|\U0001f469\U0001f3fc\u200d\U0001f3eb|\U0001f469\U0001f3fd\u200d\U0001f3eb|\U0001f469\U0001f3fe\u200d\U0001f3eb|\U0001f469\U0001f3ff\u200d\U0001f3eb|\U0001f468\u200d\u2696\ufe0f|\U0001f468\U0001f3fb\u200d\u2696|\U0001f468\U0001f3fc\u200d\u2696|\U0001f468\U0001f3fd\u200d\u2696|\U0001f468\U0001f3fe\u200d\u2696|\U0001f468\U0001f3ff\u200d\u2696|\U0001f469\u200d\u2696\ufe0f|\U0001f469\U0001f3fb\u200d\u2696|\U0001f469\U0001f3fc\u200d\u2696|\U0001f469\U0001f3fd\u200d\u2696|\U0001f469\U0001f3fe\u200d\u2696|\U0001f469\U0001f3ff\u200d\u2696|\U0001f468\U0001f3fb\u200d\U0001f33e|\U0001f468\U0001f3fc\u200d\U0001f33e|\U0001f468\U0001f3fd\u200d\U0001f33e|\U0001f468\U0001f3fe\u200d\U0001f33e|\U0001f468\U0001f3ff\u200d\U0001f33e|\U0001f469\U0001f3fb\u200d\U0001f33e|\U0001f469\U0001f3fc\u200d\U0001f33e|\U0001f469\U0001f3fd\u200d\U0001f33e|\U0001f469\U0001f3fe\u200d\U0001f33e|\U0001f469\U0001f3ff\u200d\U0001f33e|\U0001f468\U0001f3fb\u200d\U0001f373|\U0001f468\U0001f3fc\u200d\U0001f373|\U0001f468\U0001f3fd\u200d\U0001f373|\U0001f468\U0001f3fe\u200d\U0001f373|\U0001f468\U0001f3ff\u200d\U0001f373|\U0001f469\U0001f3fb\u200d\U0001f373|\U0001f469\U0001f3fc\u200d\U0001f373|\U0001f469\U0001f3fd\u200d\U0001f373|\U0001f469\U0001f3fe\u200d\U0001f373|\U0001f469\U0001f3ff\u200d\U0001f373|\U0001f468\U0001f3fb\u200d\U0001f527|\U0001f468\U0001f3fc\u200d\U0001f527|\U0001f468\U0001f3fd\u200d\U0001f527|\U0001f468\U0001f3fe\u200d\U0001f527|\U0001f468\U0001f3ff\u200d\U0001f527|\U0001f469\U0001f3fb\u200d\U0001f527|\U0001f469\U0001f3fc\u200d\U0001f527|\U0001f469\U0001f3fd\u200d\U0001f527|\U0001f469\U0001f3fe\u200d\U0001f527|\U0001f469\U0001f3ff\u200d\U0001f527|\U0001f468\U0001f3fb\u200d\U0001f3ed|\U0001f468\U0001f3fc\u200d\U0001f3ed|\U0001f468\U0001f3fd\u200d\U0001f3ed|\U0001f468\U0001f3fe\u200d\U0001f3ed|\U0001f468\U0001f3ff\u200d\U0001f3ed|\U0001f469\U0001f3fb\u200d\U0001f3ed|\U0001f469\U0001f3fc\u200d\U0001f3ed|\U0001f469\U0001f3fd\u200d\U0001f3ed|\U0001f469\U0001f3fe\u200d\U0001f3ed|\U0001f469\U0001f3ff\u200d\U0001f3ed|\U0001f468\U0001f3fb\u200d\U0001f4bc|\U0001f468\U0001f3fc\u200d\U0001f4bc|\U0001f468\U0001f3fd\u200d\U0001f4bc|\U0001f468\U0001f3fe\u200d\U0001f4bc|\U0001f468\U0001f3ff\u200d\U0001f4bc|\U0001f469\U0001f3fb\u200d\U0001f4bc|\U0001f469\U0001f3fc\u200d\U0001f4bc|\U0001f469\U0001f3fd\u200d\U0001f4bc|\U0001f469\U0001f3fe\u200d\U0001f4bc|\U0001f469\U0001f3ff\u200d\U0001f4bc|\U0001f468\U0001f3fb\u200d\U0001f52c|\U0001f468\U0001f3fc\u200d\U0001f52c|\U0001f468\U0001f3fd\u200d\U0001f52c|\U0001f468\U0001f3fe\u200d\U0001f52c|\U0001f468\U0001f3ff\u200d\U0001f52c|\U0001f469\U0001f3fb\u200d\U0001f52c|\U0001f469\U0001f3fc\u200d\U0001f52c|\U0001f469\U0001f3fd\u200d\U0001f52c|\U0001f469\U0001f3fe\u200d\U0001f52c|\U0001f469\U0001f3ff\u200d\U0001f52c|\U0001f468\U0001f3fb\u200d\U0001f4bb|\U0001f468\U0001f3fc\u200d\U0001f4bb|\U0001f468\U0001f3fd\u200d\U0001f4bb|\U0001f468\U0001f3fe\u200d\U0001f4bb|\U0001f468\U0001f3ff\u200d\U0001f4bb|\U0001f469\U0001f3fb\u200d\U0001f4bb|\U0001f469\U0001f3fc\u200d\U0001f4bb|\U0001f469\U0001f3fd\u200d\U0001f4bb|\U0001f469\U0001f3fe\u200d\U0001f4bb|\U0001f469\U0001f3ff\u200d\U0001f4bb|\U0001f468\U0001f3fb\u200d\U0001f3a4|\U0001f468\U0001f3fc\u200d\U0001f3a4|\U0001f468\U0001f3fd\u200d\U0001f3a4|\U0001f468\U0001f3fe\u200d\U0001f3a4|\U0001f468\U0001f3ff\u200d\U0001f3a4|\U0001f469\U0001f3fb\u200d\U0001f3a4|\U0001f469\U0001f3fc\u200d\U0001f3a4|\U0001f469\U0001f3fd\u200d\U0001f3a4|\U0001f469\U0001f3fe\u200d\U0001f3a4|\U0001f469\U0001f3ff\u200d\U0001f3a4|\U0001f468\U0001f3fb\u200d\U0001f3a8|\U0001f468\U0001f3fc\u200d\U0001f3a8|\U0001f468\U0001f3fd\u200d\U0001f3a8|\U0001f468\U0001f3fe\u200d\U0001f3a8|\U0001f468\U0001f3ff\u200d\U0001f3a8|\U0001f469\U0001f3fb\u200d\U0001f3a8|\U0001f469\U0001f3fc\u200d\U0001f3a8|\U0001f469\U0001f3fd\u200d\U0001f3a8|\U0001f469\U0001f3fe\u200d\U0001f3a8|\U0001f469\U0001f3ff\u200d\U0001f3a8|\U0001f468\u200d\u2708\ufe0f|\U0001f468\U0001f3fb\u200d\u2708|\U0001f468\U0001f3fc\u200d\u2708|\U0001f468\U0001f3fd\u200d\u2708|\U0001f468\U0001f3fe\u200d\u2708|\U0001f468\U0001f3ff\u200d\u2708|\U0001f469\u200d\u2708\ufe0f|\U0001f469\U0001f3fb\u200d\u2708|\U0001f469\U0001f3fc\u200d\u2708|\U0001f469\U0001f3fd\u200d\u2708|\U0001f469\U0001f3fe\u200d\u2708|\U0001f469\U0001f3ff\u200d\u2708|\U0001f468\U0001f3fb\u200d\U0001f680|\U0001f468\U0001f3fc\u200d\U0001f680|\U0001f468\U0001f3fd\u200d\U0001f680|\U0001f468\U0001f3fe\u200d\U0001f680|\U0001f468\U0001f3ff\u200d\U0001f680|\U0001f469\U0001f3fb\u200d\U0001f680|\U0001f469\U0001f3fc\u200d\U0001f680|\U0001f469\U0001f3fd\u200d\U0001f680|\U0001f469\U0001f3fe\u200d\U0001f680|\U0001f469\U0001f3ff\u200d\U0001f680|\U0001f468\U0001f3fb\u200d\U0001f692|\U0001f468\U0001f3fc\u200d\U0001f692|\U0001f468\U0001f3fd\u200d\U0001f692|\U0001f468\U0001f3fe\u200d\U0001f692|\U0001f468\U0001f3ff\u200d\U0001f692|\U0001f469\U0001f3fb\u200d\U0001f692|\U0001f469\U0001f3fc\u200d\U0001f692|\U0001f469\U0001f3fd\u200d\U0001f692|\U0001f469\U0001f3fe\u200d\U0001f692|\U0001f469\U0001f3ff\u200d\U0001f692|\U0001f46e\u200d\u2642\ufe0f|\U0001f46e\U0001f3fb\u200d\u2642|\U0001f46e\U0001f3fc\u200d\u2642|\U0001f46e\U0001f3fd\u200d\u2642|\U0001f46e\U0001f3fe\u200d\u2642|\U0001f46e\U0001f3ff\u200d\u2642|\U0001f46e\u200d\u2640\ufe0f|\U0001f46e\U0001f3fb\u200d\u2640|\U0001f46e\U0001f3fc\u200d\u2640|\U0001f46e\U0001f3fd\u200d\u2640|\U0001f46e\U0001f3fe\u200d\u2640|\U0001f46e\U0001f3ff\u200d\u2640|\U0001f575\u200d\u2642\ufe0f|\U0001f575\ufe0f\u200d\u2642|\U0001f575\U0001f3fb\u200d\u2642|\U0001f575\U0001f3fc\u200d\u2642|\U0001f575\U0001f3fd\u200d\u2642|\U0001f575\U0001f3fe\u200d\u2642|\U0001f575\U0001f3ff\u200d\u2642|\U0001f575\u200d\u2640\ufe0f|\U0001f575\ufe0f\u200d\u2640|\U0001f575\U0001f3fb\u200d\u2640|\U0001f575\U0001f3fc\u200d\u2640|\U0001f575\U0001f3fd\u200d\u2640|\U0001f575\U0001f3fe\u200d\u2640|\U0001f575\U0001f3ff\u200d\u2640|\U0001f482\u200d\u2642\ufe0f|\U0001f482\U0001f3fb\u200d\u2642|\U0001f482\U0001f3fc\u200d\u2642|\U0001f482\U0001f3fd\u200d\u2642|\U0001f482\U0001f3fe\u200d\u2642|\U0001f482\U0001f3ff\u200d\u2642|\U0001f482\u200d\u2640\ufe0f|\U0001f482\U0001f3fb\u200d\u2640|\U0001f482\U0001f3fc\u200d\u2640|\U0001f482\U0001f3fd\u200d\u2640|\U0001f482\U0001f3fe\u200d\u2640|\U0001f482\U0001f3ff\u200d\u2640|\U0001f477\u200d\u2642\ufe0f|\U0001f477\U0001f3fb\u200d\u2642|\U0001f477\U0001f3fc\u200d\u2642|\U0001f477\U0001f3fd\u200d\u2642|\U0001f477\U0001f3fe\u200d\u2642|\U0001f477\U0001f3ff\u200d\u2642|\U0001f477\u200d\u2640\ufe0f|\U0001f477\U0001f3fb\u200d\u2640|\U0001f477\U0001f3fc\u200d\u2640|\U0001f477\U0001f3fd\u200d\u2640|\U0001f477\U0001f3fe\u200d\u2640|\U0001f477\U0001f3ff\u200d\u2640|\U0001f473\u200d\u2642\ufe0f|\U0001f473\U0001f3fb\u200d\u2642|\U0001f473\U0001f3fc\u200d\u2642|\U0001f473\U0001f3fd\u200d\u2642|\U0001f473\U0001f3fe\u200d\u2642|\U0001f473\U0001f3ff\u200d\u2642|\U0001f473\u200d\u2640\ufe0f|\U0001f473\U0001f3fb\u200d\u2640|\U0001f473\U0001f3fc\u200d\u2640|\U0001f473\U0001f3fd\u200d\u2640|\U0001f473\U0001f3fe\u200d\u2640|\U0001f473\U0001f3ff\u200d\u2640|\U0001f9b8\u200d\u2642\ufe0f|\U0001f9b8\U0001f3fb\u200d\u2642|\U0001f9b8\U0001f3fc\u200d\u2642|\U0001f9b8\U0001f3fd\u200d\u2642|\U0001f9b8\U0001f3fe\u200d\u2642|\U0001f9b8\U0001f3ff\u200d\u2642|\U0001f9b8\u200d\u2640\ufe0f|\U0001f9b8\U0001f3fb\u200d\u2640|\U0001f9b8\U0001f3fc\u200d\u2640|\U0001f9b8\U0001f3fd\u200d\u2640|\U0001f9b8\U0001f3fe\u200d\u2640|\U0001f9b8\U0001f3ff\u200d\u2640|\U0001f9b9\u200d\u2642\ufe0f|\U0001f9b9\U0001f3fb\u200d\u2642|\U0001f9b9\U0001f3fc\u200d\u2642|\U0001f9b9\U0001f3fd\u200d\u2642|\U0001f9b9\U0001f3fe\u200d\u2642|\U0001f9b9\U0001f3ff\u200d\u2642|\U0001f9b9\u200d\u2640\ufe0f|\U0001f9b9\U0001f3fb\u200d\u2640|\U0001f9b9\U0001f3fc\u200d\u2640|\U0001f9b9\U0001f3fd\u200d\u2640|\U0001f9b9\U0001f3fe\u200d\u2640|\U0001f9b9\U0001f3ff\u200d\u2640|\U0001f9d9\u200d\u2642\ufe0f|\U0001f9d9\U0001f3fb\u200d\u2642|\U0001f9d9\U0001f3fc\u200d\u2642|\U0001f9d9\U0001f3fd\u200d\u2642|\U0001f9d9\U0001f3fe\u200d\u2642|\U0001f9d9\U0001f3ff\u200d\u2642|\U0001f9d9\u200d\u2640\ufe0f|\U0001f9d9\U0001f3fb\u200d\u2640|\U0001f9d9\U0001f3fc\u200d\u2640|\U0001f9d9\U0001f3fd\u200d\u2640|\U0001f9d9\U0001f3fe\u200d\u2640|\U0001f9d9\U0001f3ff\u200d\u2640|\U0001f9da\u200d\u2642\ufe0f|\U0001f9da\U0001f3fb\u200d\u2642|\U0001f9da\U0001f3fc\u200d\u2642|\U0001f9da\U0001f3fd\u200d\u2642|\U0001f9da\U0001f3fe\u200d\u2642|\U0001f9da\U0001f3ff\u200d\u2642|\U0001f9da\u200d\u2640\ufe0f|\U0001f9da\U0001f3fb\u200d\u2640|\U0001f9da\U0001f3fc\u200d\u2640|\U0001f9da\U0001f3fd\u200d\u2640|\U0001f9da\U0001f3fe\u200d\u2640|\U0001f9da\U0001f3ff\u200d\u2640|\U0001f9db\u200d\u2642\ufe0f|\U0001f9db\U0001f3fb\u200d\u2642|\U0001f9db\U0001f3fc\u200d\u2642|\U0001f9db\U0001f3fd\u200d\u2642|\U0001f9db\U0001f3fe\u200d\u2642|\U0001f9db\U0001f3ff\u200d\u2642|\U0001f9db\u200d\u2640\ufe0f|\U0001f9db\U0001f3fb\u200d\u2640|\U0001f9db\U0001f3fc\u200d\u2640|\U0001f9db\U0001f3fd\u200d\u2640|\U0001f9db\U0001f3fe\u200d\u2640|\U0001f9db\U0001f3ff\u200d\u2640|\U0001f9dc\u200d\u2642\ufe0f|\U0001f9dc\U0001f3fb\u200d\u2642|\U0001f9dc\U0001f3fc\u200d\u2642|\U0001f9dc\U0001f3fd\u200d\u2642|\U0001f9dc\U0001f3fe\u200d\u2642|\U0001f9dc\U0001f3ff\u200d\u2642|\U0001f9dc\u200d\u2640\ufe0f|\U0001f9dc\U0001f3fb\u200d\u2640|\U0001f9dc\U0001f3fc\u200d\u2640|\U0001f9dc\U0001f3fd\u200d\u2640|\U0001f9dc\U0001f3fe\u200d\u2640|\U0001f9dc\U0001f3ff\u200d\u2640|\U0001f9dd\u200d\u2642\ufe0f|\U0001f9dd\U0001f3fb\u200d\u2642|\U0001f9dd\U0001f3fc\u200d\u2642|\U0001f9dd\U0001f3fd\u200d\u2642|\U0001f9dd\U0001f3fe\u200d\u2642|\U0001f9dd\U0001f3ff\u200d\u2642|\U0001f9dd\u200d\u2640\ufe0f|\U0001f9dd\U0001f3fb\u200d\u2640|\U0001f9dd\U0001f3fc\u200d\u2640|\U0001f9dd\U0001f3fd\u200d\u2640|\U0001f9dd\U0001f3fe\u200d\u2640|\U0001f9dd\U0001f3ff\u200d\u2640|\U0001f9de\u200d\u2642\ufe0f|\U0001f9de\u200d\u2640\ufe0f|\U0001f9df\u200d\u2642\ufe0f|\U0001f9df\u200d\u2640\ufe0f|\U0001f486\u200d\u2642\ufe0f|\U0001f486\U0001f3fb\u200d\u2642|\U0001f486\U0001f3fc\u200d\u2642|\U0001f486\U0001f3fd\u200d\u2642|\U0001f486\U0001f3fe\u200d\u2642|\U0001f486\U0001f3ff\u200d\u2642|\U0001f486\u200d\u2640\ufe0f|\U0001f486\U0001f3fb\u200d\u2640|\U0001f486\U0001f3fc\u200d\u2640|\U0001f486\U0001f3fd\u200d\u2640|\U0001f486\U0001f3fe\u200d\u2640|\U0001f486\U0001f3ff\u200d\u2640|\U0001f487\u200d\u2642\ufe0f|\U0001f487\U0001f3fb\u200d\u2642|\U0001f487\U0001f3fc\u200d\u2642|\U0001f487\U0001f3fd\u200d\u2642|\U0001f487\U0001f3fe\u200d\u2642|\U0001f487\U0001f3ff\u200d\u2642|\U0001f487\u200d\u2640\ufe0f|\U0001f487\U0001f3fb\u200d\u2640|\U0001f487\U0001f3fc\u200d\u2640|\U0001f487\U0001f3fd\u200d\u2640|\U0001f487\U0001f3fe\u200d\u2640|\U0001f487\U0001f3ff\u200d\u2640|\U0001f6b6\u200d\u2642\ufe0f|\U0001f6b6\U0001f3fb\u200d\u2642|\U0001f6b6\U0001f3fc\u200d\u2642|\U0001f6b6\U0001f3fd\u200d\u2642|\U0001f6b6\U0001f3fe\u200d\u2642|\U0001f6b6\U0001f3ff\u200d\u2642|\U0001f6b6\u200d\u2640\ufe0f|\U0001f6b6\U0001f3fb\u200d\u2640|\U0001f6b6\U0001f3fc\u200d\u2640|\U0001f6b6\U0001f3fd\u200d\u2640|\U0001f6b6\U0001f3fe\u200d\u2640|\U0001f6b6\U0001f3ff\u200d\u2640|\U0001f9cd\u200d\u2642\ufe0f|\U0001f9cd\U0001f3fb\u200d\u2642|\U0001f9cd\U0001f3fc\u200d\u2642|\U0001f9cd\U0001f3fd\u200d\u2642|\U0001f9cd\U0001f3fe\u200d\u2642|\U0001f9cd\U0001f3ff\u200d\u2642|\U0001f9cd\u200d\u2640\ufe0f|\U0001f9cd\U0001f3fb\u200d\u2640|\U0001f9cd\U0001f3fc\u200d\u2640|\U0001f9cd\U0001f3fd\u200d\u2640|\U0001f9cd\U0001f3fe\u200d\u2640|\U0001f9cd\U0001f3ff\u200d\u2640|\U0001f9ce\u200d\u2642\ufe0f|\U0001f9ce\U0001f3fb\u200d\u2642|\U0001f9ce\U0001f3fc\u200d\u2642|\U0001f9ce\U0001f3fd\u200d\u2642|\U0001f9ce\U0001f3fe\u200d\u2642|\U0001f9ce\U0001f3ff\u200d\u2642|\U0001f9ce\u200d\u2640\ufe0f|\U0001f9ce\U0001f3fb\u200d\u2640|\U0001f9ce\U0001f3fc\u200d\u2640|\U0001f9ce\U0001f3fd\u200d\u2640|\U0001f9ce\U0001f3fe\u200d\u2640|\U0001f9ce\U0001f3ff\u200d\u2640|\U0001f468\U0001f3fb\u200d\U0001f9af|\U0001f468\U0001f3fc\u200d\U0001f9af|\U0001f468\U0001f3fd\u200d\U0001f9af|\U0001f468\U0001f3fe\u200d\U0001f9af|\U0001f468\U0001f3ff\u200d\U0001f9af|\U0001f469\U0001f3fb\u200d\U0001f9af|\U0001f469\U0001f3fc\u200d\U0001f9af|\U0001f469\U0001f3fd\u200d\U0001f9af|\U0001f469\U0001f3fe\u200d\U0001f9af|\U0001f469\U0001f3ff\u200d\U0001f9af|\U0001f468\U0001f3fb\u200d\U0001f9bc|\U0001f468\U0001f3fc\u200d\U0001f9bc|\U0001f468\U0001f3fd\u200d\U0001f9bc|\U0001f468\U0001f3fe\u200d\U0001f9bc|\U0001f468\U0001f3ff\u200d\U0001f9bc|\U0001f469\U0001f3fb\u200d\U0001f9bc|\U0001f469\U0001f3fc\u200d\U0001f9bc|\U0001f469\U0001f3fd\u200d\U0001f9bc|\U0001f469\U0001f3fe\u200d\U0001f9bc|\U0001f469\U0001f3ff\u200d\U0001f9bc|\U0001f468\U0001f3fb\u200d\U0001f9bd|\U0001f468\U0001f3fc\u200d\U0001f9bd|\U0001f468\U0001f3fd\u200d\U0001f9bd|\U0001f468\U0001f3fe\u200d\U0001f9bd|\U0001f468\U0001f3ff\u200d\U0001f9bd|\U0001f469\U0001f3fb\u200d\U0001f9bd|\U0001f469\U0001f3fc\u200d\U0001f9bd|\U0001f469\U0001f3fd\u200d\U0001f9bd|\U0001f469\U0001f3fe\u200d\U0001f9bd|\U0001f469\U0001f3ff\u200d\U0001f9bd|\U0001f3c3\u200d\u2642\ufe0f|\U0001f3c3\U0001f3fb\u200d\u2642|\U0001f3c3\U0001f3fc\u200d\u2642|\U0001f3c3\U0001f3fd\u200d\u2642|\U0001f3c3\U0001f3fe\u200d\u2642|\U0001f3c3\U0001f3ff\u200d\u2642|\U0001f3c3\u200d\u2640\ufe0f|\U0001f3c3\U0001f3fb\u200d\u2640|\U0001f3c3\U0001f3fc\u200d\u2640|\U0001f3c3\U0001f3fd\u200d\u2640|\U0001f3c3\U0001f3fe\u200d\u2640|\U0001f3c3\U0001f3ff\u200d\u2640|\U0001f46f\u200d\u2642\ufe0f|\U0001f46f\u200d\u2640\ufe0f|\U0001f9d6\u200d\u2642\ufe0f|\U0001f9d6\U0001f3fb\u200d\u2642|\U0001f9d6\U0001f3fc\u200d\u2642|\U0001f9d6\U0001f3fd\u200d\u2642|\U0001f9d6\U0001f3fe\u200d\u2642|\U0001f9d6\U0001f3ff\u200d\u2642|\U0001f9d6\u200d\u2640\ufe0f|\U0001f9d6\U0001f3fb\u200d\u2640|\U0001f9d6\U0001f3fc\u200d\u2640|\U0001f9d6\U0001f3fd\u200d\u2640|\U0001f9d6\U0001f3fe\u200d\u2640|\U0001f9d6\U0001f3ff\u200d\u2640|\U0001f9d7\u200d\u2642\ufe0f|\U0001f9d7\U0001f3fb\u200d\u2642|\U0001f9d7\U0001f3fc\u200d\u2642|\U0001f9d7\U0001f3fd\u200d\u2642|\U0001f9d7\U0001f3fe\u200d\u2642|\U0001f9d7\U0001f3ff\u200d\u2642|\U0001f9d7\u200d\u2640\ufe0f|\U0001f9d7\U0001f3fb\u200d\u2640|\U0001f9d7\U0001f3fc\u200d\u2640|\U0001f9d7\U0001f3fd\u200d\u2640|\U0001f9d7\U0001f3fe\u200d\u2640|\U0001f9d7\U0001f3ff\u200d\u2640|\U0001f3cc\u200d\u2642\ufe0f|\U0001f3cc\ufe0f\u200d\u2642|\U0001f3cc\U0001f3fb\u200d\u2642|\U0001f3cc\U0001f3fc\u200d\u2642|\U0001f3cc\U0001f3fd\u200d\u2642|\U0001f3cc\U0001f3fe\u200d\u2642|\U0001f3cc\U0001f3ff\u200d\u2642|\U0001f3cc\u200d\u2640\ufe0f|\U0001f3cc\ufe0f\u200d\u2640|\U0001f3cc\U0001f3fb\u200d\u2640|\U0001f3cc\U0001f3fc\u200d\u2640|\U0001f3cc\U0001f3fd\u200d\u2640|\U0001f3cc\U0001f3fe\u200d\u2640|\U0001f3cc\U0001f3ff\u200d\u2640|\U0001f3c4\u200d\u2642\ufe0f|\U0001f3c4\U0001f3fb\u200d\u2642|\U0001f3c4\U0001f3fc\u200d\u2642|\U0001f3c4\U0001f3fd\u200d\u2642|\U0001f3c4\U0001f3fe\u200d\u2642|\U0001f3c4\U0001f3ff\u200d\u2642|\U0001f3c4\u200d\u2640\ufe0f|\U0001f3c4\U0001f3fb\u200d\u2640|\U0001f3c4\U0001f3fc\u200d\u2640|\U0001f3c4\U0001f3fd\u200d\u2640|\U0001f3c4\U0001f3fe\u200d\u2640|\U0001f3c4\U0001f3ff\u200d\u2640|\U0001f6a3\u200d\u2642\ufe0f|\U0001f6a3\U0001f3fb\u200d\u2642|\U0001f6a3\U0001f3fc\u200d\u2642|\U0001f6a3\U0001f3fd\u200d\u2642|\U0001f6a3\U0001f3fe\u200d\u2642|\U0001f6a3\U0001f3ff\u200d\u2642|\U0001f6a3\u200d\u2640\ufe0f|\U0001f6a3\U0001f3fb\u200d\u2640|\U0001f6a3\U0001f3fc\u200d\u2640|\U0001f6a3\U0001f3fd\u200d\u2640|\U0001f6a3\U0001f3fe\u200d\u2640|\U0001f6a3\U0001f3ff\u200d\u2640|\U0001f3ca\u200d\u2642\ufe0f|\U0001f3ca\U0001f3fb\u200d\u2642|\U0001f3ca\U0001f3fc\u200d\u2642|\U0001f3ca\U0001f3fd\u200d\u2642|\U0001f3ca\U0001f3fe\u200d\u2642|\U0001f3ca\U0001f3ff\u200d\u2642|\U0001f3ca\u200d\u2640\ufe0f|\U0001f3ca\U0001f3fb\u200d\u2640|\U0001f3ca\U0001f3fc\u200d\u2640|\U0001f3ca\U0001f3fd\u200d\u2640|\U0001f3ca\U0001f3fe\u200d\u2640|\U0001f3ca\U0001f3ff\u200d\u2640|\u26f9\u200d\u2642\ufe0f|\u26f9\ufe0f\u200d\u2642|\u26f9\U0001f3fb\u200d\u2642|\u26f9\U0001f3fc\u200d\u2642|\u26f9\U0001f3fd\u200d\u2642|\u26f9\U0001f3fe\u200d\u2642|\u26f9\U0001f3ff\u200d\u2642|\u26f9\u200d\u2640\ufe0f|\u26f9\ufe0f\u200d\u2640|\u26f9\U0001f3fb\u200d\u2640|\u26f9\U0001f3fc\u200d\u2640|\u26f9\U0001f3fd\u200d\u2640|\u26f9\U0001f3fe\u200d\u2640|\u26f9\U0001f3ff\u200d\u2640|\U0001f3cb\u200d\u2642\ufe0f|\U0001f3cb\ufe0f\u200d\u2642|\U0001f3cb\U0001f3fb\u200d\u2642|\U0001f3cb\U0001f3fc\u200d\u2642|\U0001f3cb\U0001f3fd\u200d\u2642|\U0001f3cb\U0001f3fe\u200d\u2642|\U0001f3cb\U0001f3ff\u200d\u2642|\U0001f3cb\u200d\u2640\ufe0f|\U0001f3cb\ufe0f\u200d\u2640|\U0001f3cb\U0001f3fb\u200d\u2640|\U0001f3cb\U0001f3fc\u200d\u2640|\U0001f3cb\U0001f3fd\u200d\u2640|\U0001f3cb\U0001f3fe\u200d\u2640|\U0001f3cb\U0001f3ff\u200d\u2640|\U0001f6b4\u200d\u2642\ufe0f|\U0001f6b4\U0001f3fb\u200d\u2642|\U0001f6b4\U0001f3fc\u200d\u2642|\U0001f6b4\U0001f3fd\u200d\u2642|\U0001f6b4\U0001f3fe\u200d\u2642|\U0001f6b4\U0001f3ff\u200d\u2642|\U0001f6b4\u200d\u2640\ufe0f|\U0001f6b4\U0001f3fb\u200d\u2640|\U0001f6b4\U0001f3fc\u200d\u2640|\U0001f6b4\U0001f3fd\u200d\u2640|\U0001f6b4\U0001f3fe\u200d\u2640|\U0001f6b4\U0001f3ff\u200d\u2640|\U0001f6b5\u200d\u2642\ufe0f|\U0001f6b5\U0001f3fb\u200d\u2642|\U0001f6b5\U0001f3fc\u200d\u2642|\U0001f6b5\U0001f3fd\u200d\u2642|\U0001f6b5\U0001f3fe\u200d\u2642|\U0001f6b5\U0001f3ff\u200d\u2642|\U0001f6b5\u200d\u2640\ufe0f|\U0001f6b5\U0001f3fb\u200d\u2640|\U0001f6b5\U0001f3fc\u200d\u2640|\U0001f6b5\U0001f3fd\u200d\u2640|\U0001f6b5\U0001f3fe\u200d\u2640|\U0001f6b5\U0001f3ff\u200d\u2640|\U0001f938\u200d\u2642\ufe0f|\U0001f938\U0001f3fb\u200d\u2642|\U0001f938\U0001f3fc\u200d\u2642|\U0001f938\U0001f3fd\u200d\u2642|\U0001f938\U0001f3fe\u200d\u2642|\U0001f938\U0001f3ff\u200d\u2642|\U0001f938\u200d\u2640\ufe0f|\U0001f938\U0001f3fb\u200d\u2640|\U0001f938\U0001f3fc\u200d\u2640|\U0001f938\U0001f3fd\u200d\u2640|\U0001f938\U0001f3fe\u200d\u2640|\U0001f938\U0001f3ff\u200d\u2640|\U0001f93c\u200d\u2642\ufe0f|\U0001f93c\u200d\u2640\ufe0f|\U0001f93d\u200d\u2642\ufe0f|\U0001f93d\U0001f3fb\u200d\u2642|\U0001f93d\U0001f3fc\u200d\u2642|\U0001f93d\U0001f3fd\u200d\u2642|\U0001f93d\U0001f3fe\u200d\u2642|\U0001f93d\U0001f3ff\u200d\u2642|\U0001f93d\u200d\u2640\ufe0f|\U0001f93d\U0001f3fb\u200d\u2640|\U0001f93d\U0001f3fc\u200d\u2640|\U0001f93d\U0001f3fd\u200d\u2640|\U0001f93d\U0001f3fe\u200d\u2640|\U0001f93d\U0001f3ff\u200d\u2640|\U0001f93e\u200d\u2642\ufe0f|\U0001f93e\U0001f3fb\u200d\u2642|\U0001f93e\U0001f3fc\u200d\u2642|\U0001f93e\U0001f3fd\u200d\u2642|\U0001f93e\U0001f3fe\u200d\u2642|\U0001f93e\U0001f3ff\u200d\u2642|\U0001f93e\u200d\u2640\ufe0f|\U0001f93e\U0001f3fb\u200d\u2640|\U0001f93e\U0001f3fc\u200d\u2640|\U0001f93e\U0001f3fd\u200d\u2640|\U0001f93e\U0001f3fe\u200d\u2640|\U0001f93e\U0001f3ff\u200d\u2640|\U0001f939\u200d\u2642\ufe0f|\U0001f939\U0001f3fb\u200d\u2642|\U0001f939\U0001f3fc\u200d\u2642|\U0001f939\U0001f3fd\u200d\u2642|\U0001f939\U0001f3fe\u200d\u2642|\U0001f939\U0001f3ff\u200d\u2642|\U0001f939\u200d\u2640\ufe0f|\U0001f939\U0001f3fb\u200d\u2640|\U0001f939\U0001f3fc\u200d\u2640|\U0001f939\U0001f3fd\u200d\u2640|\U0001f939\U0001f3fe\u200d\u2640|\U0001f939\U0001f3ff\u200d\u2640|\U0001f9d8\u200d\u2642\ufe0f|\U0001f9d8\U0001f3fb\u200d\u2642|\U0001f9d8\U0001f3fc\u200d\u2642|\U0001f9d8\U0001f3fd\u200d\u2642|\U0001f9d8\U0001f3fe\u200d\u2642|\U0001f9d8\U0001f3ff\u200d\u2642|\U0001f9d8\u200d\u2640\ufe0f|\U0001f9d8\U0001f3fb\u200d\u2640|\U0001f9d8\U0001f3fc\u200d\u2640|\U0001f9d8\U0001f3fd\u200d\u2640|\U0001f9d8\U0001f3fe\u200d\u2640|\U0001f9d8\U0001f3ff\u200d\u2640|\U0001f3f3\ufe0f\u200d\U0001f308|\U0001f3f4\u200d\u2620\ufe0f|\U0001f441\u200d\U0001f5e8|\U0001f471\u200d\u2642|\U0001f468\u200d\U0001f9b0|\U0001f468\u200d\U0001f9b1|\U0001f468\u200d\U0001f9b3|\U0001f468\u200d\U0001f9b2|\U0001f471\u200d\u2640|\U0001f469\u200d\U0001f9b0|\U0001f469\u200d\U0001f9b1|\U0001f469\u200d\U0001f9b3|\U0001f469\u200d\U0001f9b2|\U0001f64d\u200d\u2642|\U0001f64d\u200d\u2640|\U0001f64e\u200d\u2642|\U0001f64e\u200d\u2640|\U0001f645\u200d\u2642|\U0001f645\u200d\u2640|\U0001f646\u200d\u2642|\U0001f646\u200d\u2640|\U0001f481\u200d\u2642|\U0001f481\u200d\u2640|\U0001f64b\u200d\u2642|\U0001f64b\u200d\u2640|\U0001f9cf\u200d\u2642|\U0001f9cf\u200d\u2640|\U0001f647\u200d\u2642|\U0001f647\u200d\u2640|\U0001f926\u200d\u2642|\U0001f926\u200d\u2640|\U0001f937\u200d\u2642|\U0001f937\u200d\u2640|\U0001f468\u200d\u2695|\U0001f469\u200d\u2695|\U0001f468\u200d\U0001f393|\U0001f469\u200d\U0001f393|\U0001f468\u200d\U0001f3eb|\U0001f469\u200d\U0001f3eb|\U0001f468\u200d\u2696|\U0001f469\u200d\u2696|\U0001f468\u200d\U0001f33e|\U0001f469\u200d\U0001f33e|\U0001f468\u200d\U0001f373|\U0001f469\u200d\U0001f373|\U0001f468\u200d\U0001f527|\U0001f469\u200d\U0001f527|\U0001f468\u200d\U0001f3ed|\U0001f469\u200d\U0001f3ed|\U0001f468\u200d\U0001f4bc|\U0001f469\u200d\U0001f4bc|\U0001f468\u200d\U0001f52c|\U0001f469\u200d\U0001f52c|\U0001f468\u200d\U0001f4bb|\U0001f469\u200d\U0001f4bb|\U0001f468\u200d\U0001f3a4|\U0001f469\u200d\U0001f3a4|\U0001f468\u200d\U0001f3a8|\U0001f469\u200d\U0001f3a8|\U0001f468\u200d\u2708|\U0001f469\u200d\u2708|\U0001f468\u200d\U0001f680|\U0001f469\u200d\U0001f680|\U0001f468\u200d\U0001f692|\U0001f469\u200d\U0001f692|\U0001f46e\u200d\u2642|\U0001f46e\u200d\u2640|\U0001f575\u200d\u2642|\U0001f575\u200d\u2640|\U0001f482\u200d\u2642|\U0001f482\u200d\u2640|\U0001f477\u200d\u2642|\U0001f477\u200d\u2640|\U0001f473\u200d\u2642|\U0001f473\u200d\u2640|\U0001f9b8\u200d\u2642|\U0001f9b8\u200d\u2640|\U0001f9b9\u200d\u2642|\U0001f9b9\u200d\u2640|\U0001f9d9\u200d\u2642|\U0001f9d9\u200d\u2640|\U0001f9da\u200d\u2642|\U0001f9da\u200d\u2640|\U0001f9db\u200d\u2642|\U0001f9db\u200d\u2640|\U0001f9dc\u200d\u2642|\U0001f9dc\u200d\u2640|\U0001f9dd\u200d\u2642|\U0001f9dd\u200d\u2640|\U0001f9de\u200d\u2642|\U0001f9de\u200d\u2640|\U0001f9df\u200d\u2642|\U0001f9df\u200d\u2640|\U0001f486\u200d\u2642|\U0001f486\u200d\u2640|\U0001f487\u200d\u2642|\U0001f487\u200d\u2640|\U0001f6b6\u200d\u2642|\U0001f6b6\u200d\u2640|\U0001f9cd\u200d\u2642|\U0001f9cd\u200d\u2640|\U0001f9ce\u200d\u2642|\U0001f9ce\u200d\u2640|\U0001f468\u200d\U0001f9af|\U0001f469\u200d\U0001f9af|\U0001f468\u200d\U0001f9bc|\U0001f469\u200d\U0001f9bc|\U0001f468\u200d\U0001f9bd|\U0001f469\u200d\U0001f9bd|\U0001f3c3\u200d\u2642|\U0001f3c3\u200d\u2640|\U0001f46f\u200d\u2642|\U0001f46f\u200d\u2640|\U0001f9d6\u200d\u2642|\U0001f9d6\u200d\u2640|\U0001f9d7\u200d\u2642|\U0001f9d7\u200d\u2640|\U0001f3cc\u200d\u2642|\U0001f3cc\u200d\u2640|\U0001f3c4\u200d\u2642|\U0001f3c4\u200d\u2640|\U0001f6a3\u200d\u2642|\U0001f6a3\u200d\u2640|\U0001f3ca\u200d\u2642|\U0001f3ca\u200d\u2640|\u26f9\u200d\u2642|\u26f9\u200d\u2640|\U0001f3cb\u200d\u2642|\U0001f3cb\u200d\u2640|\U0001f6b4\u200d\u2642|\U0001f6b4\u200d\u2640|\U0001f6b5\u200d\u2642|\U0001f6b5\u200d\u2640|\U0001f938\u200d\u2642|\U0001f938\u200d\u2640|\U0001f93c\u200d\u2642|\U0001f93c\u200d\u2640|\U0001f93d\u200d\u2642|\U0001f93d\u200d\u2640|\U0001f93e\u200d\u2642|\U0001f93e\u200d\u2640|\U0001f939\u200d\u2642|\U0001f939\u200d\u2640|\U0001f9d8\u200d\u2642|\U0001f9d8\u200d\u2640|\U0001f468\u200d\U0001f466|\U0001f468\u200d\U0001f467|\U0001f469\u200d\U0001f466|\U0001f469\u200d\U0001f467|\U0001f415\u200d\U0001f9ba|\\#\ufe0f\u20e3|\\*\ufe0f\u20e3|0\ufe0f\u20e3|1\ufe0f\u20e3|2\ufe0f\u20e3|3\ufe0f\u20e3|4\ufe0f\u20e3|5\ufe0f\u20e3|6\ufe0f\u20e3|7\ufe0f\u20e3|8\ufe0f\u20e3|9\ufe0f\u20e3|\U0001f3f3\u200d\U0001f308|\U0001f3f4\u200d\u2620|\u263a\ufe0f|\u2639\ufe0f|\u2620\ufe0f|\u2763\ufe0f|\u2764\ufe0f|\U0001f573\ufe0f|\U0001f5e8\ufe0f|\U0001f5ef\ufe0f|\U0001f44b\U0001f3fb|\U0001f44b\U0001f3fc|\U0001f44b\U0001f3fd|\U0001f44b\U0001f3fe|\U0001f44b\U0001f3ff|\U0001f91a\U0001f3fb|\U0001f91a\U0001f3fc|\U0001f91a\U0001f3fd|\U0001f91a\U0001f3fe|\U0001f91a\U0001f3ff|\U0001f590\ufe0f|\U0001f590\U0001f3fb|\U0001f590\U0001f3fc|\U0001f590\U0001f3fd|\U0001f590\U0001f3fe|\U0001f590\U0001f3ff|\u270b\U0001f3fb|\u270b\U0001f3fc|\u270b\U0001f3fd|\u270b\U0001f3fe|\u270b\U0001f3ff|\U0001f596\U0001f3fb|\U0001f596\U0001f3fc|\U0001f596\U0001f3fd|\U0001f596\U0001f3fe|\U0001f596\U0001f3ff|\U0001f44c\U0001f3fb|\U0001f44c\U0001f3fc|\U0001f44c\U0001f3fd|\U0001f44c\U0001f3fe|\U0001f44c\U0001f3ff|\U0001f90f\U0001f3fb|\U0001f90f\U0001f3fc|\U0001f90f\U0001f3fd|\U0001f90f\U0001f3fe|\U0001f90f\U0001f3ff|\u270c\ufe0f|\u270c\U0001f3fb|\u270c\U0001f3fc|\u270c\U0001f3fd|\u270c\U0001f3fe|\u270c\U0001f3ff|\U0001f91e\U0001f3fb|\U0001f91e\U0001f3fc|\U0001f91e\U0001f3fd|\U0001f91e\U0001f3fe|\U0001f91e\U0001f3ff|\U0001f91f\U0001f3fb|\U0001f91f\U0001f3fc|\U0001f91f\U0001f3fd|\U0001f91f\U0001f3fe|\U0001f91f\U0001f3ff|\U0001f918\U0001f3fb|\U0001f918\U0001f3fc|\U0001f918\U0001f3fd|\U0001f918\U0001f3fe|\U0001f918\U0001f3ff|\U0001f919\U0001f3fb|\U0001f919\U0001f3fc|\U0001f919\U0001f3fd|\U0001f919\U0001f3fe|\U0001f919\U0001f3ff|\U0001f448\U0001f3fb|\U0001f448\U0001f3fc|\U0001f448\U0001f3fd|\U0001f448\U0001f3fe|\U0001f448\U0001f3ff|\U0001f449\U0001f3fb|\U0001f449\U0001f3fc|\U0001f449\U0001f3fd|\U0001f449\U0001f3fe|\U0001f449\U0001f3ff|\U0001f446\U0001f3fb|\U0001f446\U0001f3fc|\U0001f446\U0001f3fd|\U0001f446\U0001f3fe|\U0001f446\U0001f3ff|\U0001f595\U0001f3fb|\U0001f595\U0001f3fc|\U0001f595\U0001f3fd|\U0001f595\U0001f3fe|\U0001f595\U0001f3ff|\U0001f447\U0001f3fb|\U0001f447\U0001f3fc|\U0001f447\U0001f3fd|\U0001f447\U0001f3fe|\U0001f447\U0001f3ff|\u261d\ufe0f|\u261d\U0001f3fb|\u261d\U0001f3fc|\u261d\U0001f3fd|\u261d\U0001f3fe|\u261d\U0001f3ff|\U0001f44d\U0001f3fb|\U0001f44d\U0001f3fc|\U0001f44d\U0001f3fd|\U0001f44d\U0001f3fe|\U0001f44d\U0001f3ff|\U0001f44e\U0001f3fb|\U0001f44e\U0001f3fc|\U0001f44e\U0001f3fd|\U0001f44e\U0001f3fe|\U0001f44e\U0001f3ff|\u270a\U0001f3fb|\u270a\U0001f3fc|\u270a\U0001f3fd|\u270a\U0001f3fe|\u270a\U0001f3ff|\U0001f44a\U0001f3fb|\U0001f44a\U0001f3fc|\U0001f44a\U0001f3fd|\U0001f44a\U0001f3fe|\U0001f44a\U0001f3ff|\U0001f91b\U0001f3fb|\U0001f91b\U0001f3fc|\U0001f91b\U0001f3fd|\U0001f91b\U0001f3fe|\U0001f91b\U0001f3ff|\U0001f91c\U0001f3fb|\U0001f91c\U0001f3fc|\U0001f91c\U0001f3fd|\U0001f91c\U0001f3fe|\U0001f91c\U0001f3ff|\U0001f44f\U0001f3fb|\U0001f44f\U0001f3fc|\U0001f44f\U0001f3fd|\U0001f44f\U0001f3fe|\U0001f44f\U0001f3ff|\U0001f64c\U0001f3fb|\U0001f64c\U0001f3fc|\U0001f64c\U0001f3fd|\U0001f64c\U0001f3fe|\U0001f64c\U0001f3ff|\U0001f450\U0001f3fb|\U0001f450\U0001f3fc|\U0001f450\U0001f3fd|\U0001f450\U0001f3fe|\U0001f450\U0001f3ff|\U0001f932\U0001f3fb|\U0001f932\U0001f3fc|\U0001f932\U0001f3fd|\U0001f932\U0001f3fe|\U0001f932\U0001f3ff|\U0001f64f\U0001f3fb|\U0001f64f\U0001f3fc|\U0001f64f\U0001f3fd|\U0001f64f\U0001f3fe|\U0001f64f\U0001f3ff|\u270d\ufe0f|\u270d\U0001f3fb|\u270d\U0001f3fc|\u270d\U0001f3fd|\u270d\U0001f3fe|\u270d\U0001f3ff|\U0001f485\U0001f3fb|\U0001f485\U0001f3fc|\U0001f485\U0001f3fd|\U0001f485\U0001f3fe|\U0001f485\U0001f3ff|\U0001f933\U0001f3fb|\U0001f933\U0001f3fc|\U0001f933\U0001f3fd|\U0001f933\U0001f3fe|\U0001f933\U0001f3ff|\U0001f4aa\U0001f3fb|\U0001f4aa\U0001f3fc|\U0001f4aa\U0001f3fd|\U0001f4aa\U0001f3fe|\U0001f4aa\U0001f3ff|\U0001f9b5\U0001f3fb|\U0001f9b5\U0001f3fc|\U0001f9b5\U0001f3fd|\U0001f9b5\U0001f3fe|\U0001f9b5\U0001f3ff|\U0001f9b6\U0001f3fb|\U0001f9b6\U0001f3fc|\U0001f9b6\U0001f3fd|\U0001f9b6\U0001f3fe|\U0001f9b6\U0001f3ff|\U0001f442\U0001f3fb|\U0001f442\U0001f3fc|\U0001f442\U0001f3fd|\U0001f442\U0001f3fe|\U0001f442\U0001f3ff|\U0001f9bb\U0001f3fb|\U0001f9bb\U0001f3fc|\U0001f9bb\U0001f3fd|\U0001f9bb\U0001f3fe|\U0001f9bb\U0001f3ff|\U0001f443\U0001f3fb|\U0001f443\U0001f3fc|\U0001f443\U0001f3fd|\U0001f443\U0001f3fe|\U0001f443\U0001f3ff|\U0001f441\ufe0f|\U0001f476\U0001f3fb|\U0001f476\U0001f3fc|\U0001f476\U0001f3fd|\U0001f476\U0001f3fe|\U0001f476\U0001f3ff|\U0001f9d2\U0001f3fb|\U0001f9d2\U0001f3fc|\U0001f9d2\U0001f3fd|\U0001f9d2\U0001f3fe|\U0001f9d2\U0001f3ff|\U0001f466\U0001f3fb|\U0001f466\U0001f3fc|\U0001f466\U0001f3fd|\U0001f466\U0001f3fe|\U0001f466\U0001f3ff|\U0001f467\U0001f3fb|\U0001f467\U0001f3fc|\U0001f467\U0001f3fd|\U0001f467\U0001f3fe|\U0001f467\U0001f3ff|\U0001f9d1\U0001f3fb|\U0001f9d1\U0001f3fc|\U0001f9d1\U0001f3fd|\U0001f9d1\U0001f3fe|\U0001f9d1\U0001f3ff|\U0001f471\U0001f3fb|\U0001f471\U0001f3fc|\U0001f471\U0001f3fd|\U0001f471\U0001f3fe|\U0001f471\U0001f3ff|\U0001f468\U0001f3fb|\U0001f468\U0001f3fc|\U0001f468\U0001f3fd|\U0001f468\U0001f3fe|\U0001f468\U0001f3ff|\U0001f9d4\U0001f3fb|\U0001f9d4\U0001f3fc|\U0001f9d4\U0001f3fd|\U0001f9d4\U0001f3fe|\U0001f9d4\U0001f3ff|\U0001f469\U0001f3fb|\U0001f469\U0001f3fc|\U0001f469\U0001f3fd|\U0001f469\U0001f3fe|\U0001f469\U0001f3ff|\U0001f9d3\U0001f3fb|\U0001f9d3\U0001f3fc|\U0001f9d3\U0001f3fd|\U0001f9d3\U0001f3fe|\U0001f9d3\U0001f3ff|\U0001f474\U0001f3fb|\U0001f474\U0001f3fc|\U0001f474\U0001f3fd|\U0001f474\U0001f3fe|\U0001f474\U0001f3ff|\U0001f475\U0001f3fb|\U0001f475\U0001f3fc|\U0001f475\U0001f3fd|\U0001f475\U0001f3fe|\U0001f475\U0001f3ff|\U0001f64d\U0001f3fb|\U0001f64d\U0001f3fc|\U0001f64d\U0001f3fd|\U0001f64d\U0001f3fe|\U0001f64d\U0001f3ff|\U0001f64e\U0001f3fb|\U0001f64e\U0001f3fc|\U0001f64e\U0001f3fd|\U0001f64e\U0001f3fe|\U0001f64e\U0001f3ff|\U0001f645\U0001f3fb|\U0001f645\U0001f3fc|\U0001f645\U0001f3fd|\U0001f645\U0001f3fe|\U0001f645\U0001f3ff|\U0001f646\U0001f3fb|\U0001f646\U0001f3fc|\U0001f646\U0001f3fd|\U0001f646\U0001f3fe|\U0001f646\U0001f3ff|\U0001f481\U0001f3fb|\U0001f481\U0001f3fc|\U0001f481\U0001f3fd|\U0001f481\U0001f3fe|\U0001f481\U0001f3ff|\U0001f64b\U0001f3fb|\U0001f64b\U0001f3fc|\U0001f64b\U0001f3fd|\U0001f64b\U0001f3fe|\U0001f64b\U0001f3ff|\U0001f9cf\U0001f3fb|\U0001f9cf\U0001f3fc|\U0001f9cf\U0001f3fd|\U0001f9cf\U0001f3fe|\U0001f9cf\U0001f3ff|\U0001f647\U0001f3fb|\U0001f647\U0001f3fc|\U0001f647\U0001f3fd|\U0001f647\U0001f3fe|\U0001f647\U0001f3ff|\U0001f926\U0001f3fb|\U0001f926\U0001f3fc|\U0001f926\U0001f3fd|\U0001f926\U0001f3fe|\U0001f926\U0001f3ff|\U0001f937\U0001f3fb|\U0001f937\U0001f3fc|\U0001f937\U0001f3fd|\U0001f937\U0001f3fe|\U0001f937\U0001f3ff|\U0001f46e\U0001f3fb|\U0001f46e\U0001f3fc|\U0001f46e\U0001f3fd|\U0001f46e\U0001f3fe|\U0001f46e\U0001f3ff|\U0001f575\ufe0f|\U0001f575\U0001f3fb|\U0001f575\U0001f3fc|\U0001f575\U0001f3fd|\U0001f575\U0001f3fe|\U0001f575\U0001f3ff|\U0001f482\U0001f3fb|\U0001f482\U0001f3fc|\U0001f482\U0001f3fd|\U0001f482\U0001f3fe|\U0001f482\U0001f3ff|\U0001f477\U0001f3fb|\U0001f477\U0001f3fc|\U0001f477\U0001f3fd|\U0001f477\U0001f3fe|\U0001f477\U0001f3ff|\U0001f934\U0001f3fb|\U0001f934\U0001f3fc|\U0001f934\U0001f3fd|\U0001f934\U0001f3fe|\U0001f934\U0001f3ff|\U0001f478\U0001f3fb|\U0001f478\U0001f3fc|\U0001f478\U0001f3fd|\U0001f478\U0001f3fe|\U0001f478\U0001f3ff|\U0001f473\U0001f3fb|\U0001f473\U0001f3fc|\U0001f473\U0001f3fd|\U0001f473\U0001f3fe|\U0001f473\U0001f3ff|\U0001f472\U0001f3fb|\U0001f472\U0001f3fc|\U0001f472\U0001f3fd|\U0001f472\U0001f3fe|\U0001f472\U0001f3ff|\U0001f9d5\U0001f3fb|\U0001f9d5\U0001f3fc|\U0001f9d5\U0001f3fd|\U0001f9d5\U0001f3fe|\U0001f9d5\U0001f3ff|\U0001f935\U0001f3fb|\U0001f935\U0001f3fc|\U0001f935\U0001f3fd|\U0001f935\U0001f3fe|\U0001f935\U0001f3ff|\U0001f470\U0001f3fb|\U0001f470\U0001f3fc|\U0001f470\U0001f3fd|\U0001f470\U0001f3fe|\U0001f470\U0001f3ff|\U0001f930\U0001f3fb|\U0001f930\U0001f3fc|\U0001f930\U0001f3fd|\U0001f930\U0001f3fe|\U0001f930\U0001f3ff|\U0001f931\U0001f3fb|\U0001f931\U0001f3fc|\U0001f931\U0001f3fd|\U0001f931\U0001f3fe|\U0001f931\U0001f3ff|\U0001f47c\U0001f3fb|\U0001f47c\U0001f3fc|\U0001f47c\U0001f3fd|\U0001f47c\U0001f3fe|\U0001f47c\U0001f3ff|\U0001f385\U0001f3fb|\U0001f385\U0001f3fc|\U0001f385\U0001f3fd|\U0001f385\U0001f3fe|\U0001f385\U0001f3ff|\U0001f936\U0001f3fb|\U0001f936\U0001f3fc|\U0001f936\U0001f3fd|\U0001f936\U0001f3fe|\U0001f936\U0001f3ff|\U0001f9b8\U0001f3fb|\U0001f9b8\U0001f3fc|\U0001f9b8\U0001f3fd|\U0001f9b8\U0001f3fe|\U0001f9b8\U0001f3ff|\U0001f9b9\U0001f3fb|\U0001f9b9\U0001f3fc|\U0001f9b9\U0001f3fd|\U0001f9b9\U0001f3fe|\U0001f9b9\U0001f3ff|\U0001f9d9\U0001f3fb|\U0001f9d9\U0001f3fc|\U0001f9d9\U0001f3fd|\U0001f9d9\U0001f3fe|\U0001f9d9\U0001f3ff|\U0001f9da\U0001f3fb|\U0001f9da\U0001f3fc|\U0001f9da\U0001f3fd|\U0001f9da\U0001f3fe|\U0001f9da\U0001f3ff|\U0001f9db\U0001f3fb|\U0001f9db\U0001f3fc|\U0001f9db\U0001f3fd|\U0001f9db\U0001f3fe|\U0001f9db\U0001f3ff|\U0001f9dc\U0001f3fb|\U0001f9dc\U0001f3fc|\U0001f9dc\U0001f3fd|\U0001f9dc\U0001f3fe|\U0001f9dc\U0001f3ff|\U0001f9dd\U0001f3fb|\U0001f9dd\U0001f3fc|\U0001f9dd\U0001f3fd|\U0001f9dd\U0001f3fe|\U0001f9dd\U0001f3ff|\U0001f486\U0001f3fb|\U0001f486\U0001f3fc|\U0001f486\U0001f3fd|\U0001f486\U0001f3fe|\U0001f486\U0001f3ff|\U0001f487\U0001f3fb|\U0001f487\U0001f3fc|\U0001f487\U0001f3fd|\U0001f487\U0001f3fe|\U0001f487\U0001f3ff|\U0001f6b6\U0001f3fb|\U0001f6b6\U0001f3fc|\U0001f6b6\U0001f3fd|\U0001f6b6\U0001f3fe|\U0001f6b6\U0001f3ff|\U0001f9cd\U0001f3fb|\U0001f9cd\U0001f3fc|\U0001f9cd\U0001f3fd|\U0001f9cd\U0001f3fe|\U0001f9cd\U0001f3ff|\U0001f9ce\U0001f3fb|\U0001f9ce\U0001f3fc|\U0001f9ce\U0001f3fd|\U0001f9ce\U0001f3fe|\U0001f9ce\U0001f3ff|\U0001f3c3\U0001f3fb|\U0001f3c3\U0001f3fc|\U0001f3c3\U0001f3fd|\U0001f3c3\U0001f3fe|\U0001f3c3\U0001f3ff|\U0001f483\U0001f3fb|\U0001f483\U0001f3fc|\U0001f483\U0001f3fd|\U0001f483\U0001f3fe|\U0001f483\U0001f3ff|\U0001f57a\U0001f3fb|\U0001f57a\U0001f3fc|\U0001f57a\U0001f3fd|\U0001f57a\U0001f3fe|\U0001f57a\U0001f3ff|\U0001f574\ufe0f|\U0001f574\U0001f3fb|\U0001f574\U0001f3fc|\U0001f574\U0001f3fd|\U0001f574\U0001f3fe|\U0001f574\U0001f3ff|\U0001f9d6\U0001f3fb|\U0001f9d6\U0001f3fc|\U0001f9d6\U0001f3fd|\U0001f9d6\U0001f3fe|\U0001f9d6\U0001f3ff|\U0001f9d7\U0001f3fb|\U0001f9d7\U0001f3fc|\U0001f9d7\U0001f3fd|\U0001f9d7\U0001f3fe|\U0001f9d7\U0001f3ff|\U0001f3c7\U0001f3fb|\U0001f3c7\U0001f3fc|\U0001f3c7\U0001f3fd|\U0001f3c7\U0001f3fe|\U0001f3c7\U0001f3ff|\u26f7\ufe0f|\U0001f3c2\U0001f3fb|\U0001f3c2\U0001f3fc|\U0001f3c2\U0001f3fd|\U0001f3c2\U0001f3fe|\U0001f3c2\U0001f3ff|\U0001f3cc\ufe0f|\U0001f3cc\U0001f3fb|\U0001f3cc\U0001f3fc|\U0001f3cc\U0001f3fd|\U0001f3cc\U0001f3fe|\U0001f3cc\U0001f3ff|\U0001f3c4\U0001f3fb|\U0001f3c4\U0001f3fc|\U0001f3c4\U0001f3fd|\U0001f3c4\U0001f3fe|\U0001f3c4\U0001f3ff|\U0001f6a3\U0001f3fb|\U0001f6a3\U0001f3fc|\U0001f6a3\U0001f3fd|\U0001f6a3\U0001f3fe|\U0001f6a3\U0001f3ff|\U0001f3ca\U0001f3fb|\U0001f3ca\U0001f3fc|\U0001f3ca\U0001f3fd|\U0001f3ca\U0001f3fe|\U0001f3ca\U0001f3ff|\u26f9\ufe0f|\u26f9\U0001f3fb|\u26f9\U0001f3fc|\u26f9\U0001f3fd|\u26f9\U0001f3fe|\u26f9\U0001f3ff|\U0001f3cb\ufe0f|\U0001f3cb\U0001f3fb|\U0001f3cb\U0001f3fc|\U0001f3cb\U0001f3fd|\U0001f3cb\U0001f3fe|\U0001f3cb\U0001f3ff|\U0001f6b4\U0001f3fb|\U0001f6b4\U0001f3fc|\U0001f6b4\U0001f3fd|\U0001f6b4\U0001f3fe|\U0001f6b4\U0001f3ff|\U0001f6b5\U0001f3fb|\U0001f6b5\U0001f3fc|\U0001f6b5\U0001f3fd|\U0001f6b5\U0001f3fe|\U0001f6b5\U0001f3ff|\U0001f938\U0001f3fb|\U0001f938\U0001f3fc|\U0001f938\U0001f3fd|\U0001f938\U0001f3fe|\U0001f938\U0001f3ff|\U0001f93d\U0001f3fb|\U0001f93d\U0001f3fc|\U0001f93d\U0001f3fd|\U0001f93d\U0001f3fe|\U0001f93d\U0001f3ff|\U0001f93e\U0001f3fb|\U0001f93e\U0001f3fc|\U0001f93e\U0001f3fd|\U0001f93e\U0001f3fe|\U0001f93e\U0001f3ff|\U0001f939\U0001f3fb|\U0001f939\U0001f3fc|\U0001f939\U0001f3fd|\U0001f939\U0001f3fe|\U0001f939\U0001f3ff|\U0001f9d8\U0001f3fb|\U0001f9d8\U0001f3fc|\U0001f9d8\U0001f3fd|\U0001f9d8\U0001f3fe|\U0001f9d8\U0001f3ff|\U0001f6c0\U0001f3fb|\U0001f6c0\U0001f3fc|\U0001f6c0\U0001f3fd|\U0001f6c0\U0001f3fe|\U0001f6c0\U0001f3ff|\U0001f6cc\U0001f3fb|\U0001f6cc\U0001f3fc|\U0001f6cc\U0001f3fd|\U0001f6cc\U0001f3fe|\U0001f6cc\U0001f3ff|\U0001f46d\U0001f3fb|\U0001f46d\U0001f3fc|\U0001f46d\U0001f3fd|\U0001f46d\U0001f3fe|\U0001f46d\U0001f3ff|\U0001f46b\U0001f3fb|\U0001f46b\U0001f3fc|\U0001f46b\U0001f3fd|\U0001f46b\U0001f3fe|\U0001f46b\U0001f3ff|\U0001f46c\U0001f3fb|\U0001f46c\U0001f3fc|\U0001f46c\U0001f3fd|\U0001f46c\U0001f3fe|\U0001f46c\U0001f3ff|\U0001f5e3\ufe0f|\U0001f43f\ufe0f|\U0001f54a\ufe0f|\U0001f577\ufe0f|\U0001f578\ufe0f|\U0001f3f5\ufe0f|\u2618\ufe0f|\U0001f336\ufe0f|\U0001f37d\ufe0f|\U0001f5fa\ufe0f|\U0001f3d4\ufe0f|\u26f0\ufe0f|\U0001f3d5\ufe0f|\U0001f3d6\ufe0f|\U0001f3dc\ufe0f|\U0001f3dd\ufe0f|\U0001f3de\ufe0f|\U0001f3df\ufe0f|\U0001f3db\ufe0f|\U0001f3d7\ufe0f|\U0001f3d8\ufe0f|\U0001f3da\ufe0f|\u26e9\ufe0f|\U0001f3d9\ufe0f|\u2668\ufe0f|\U0001f3ce\ufe0f|\U0001f3cd\ufe0f|\U0001f6e3\ufe0f|\U0001f6e4\ufe0f|\U0001f6e2\ufe0f|\U0001f6f3\ufe0f|\u26f4\ufe0f|\U0001f6e5\ufe0f|\u2708\ufe0f|\U0001f6e9\ufe0f|\U0001f6f0\ufe0f|\U0001f6ce\ufe0f|\u23f1\ufe0f|\u23f2\ufe0f|\U0001f570\ufe0f|\U0001f321\ufe0f|\u2600\ufe0f|\u2601\ufe0f|\u26c8\ufe0f|\U0001f324\ufe0f|\U0001f325\ufe0f|\U0001f326\ufe0f|\U0001f327\ufe0f|\U0001f328\ufe0f|\U0001f329\ufe0f|\U0001f32a\ufe0f|\U0001f32b\ufe0f|\U0001f32c\ufe0f|\u2602\ufe0f|\u26f1\ufe0f|\u2744\ufe0f|\u2603\ufe0f|\u2604\ufe0f|\U0001f397\ufe0f|\U0001f39f\ufe0f|\U0001f396\ufe0f|\u26f8\ufe0f|\U0001f579\ufe0f|\u2660\ufe0f|\u2665\ufe0f|\u2666\ufe0f|\u2663\ufe0f|\u265f\ufe0f|\U0001f5bc\ufe0f|\U0001f576\ufe0f|\U0001f6cd\ufe0f|\u26d1\ufe0f|\U0001f399\ufe0f|\U0001f39a\ufe0f|\U0001f39b\ufe0f|\u260e\ufe0f|\U0001f5a5\ufe0f|\U0001f5a8\ufe0f|\u2328\ufe0f|\U0001f5b1\ufe0f|\U0001f5b2\ufe0f|\U0001f39e\ufe0f|\U0001f4fd\ufe0f|\U0001f56f\ufe0f|\U0001f5de\ufe0f|\U0001f3f7\ufe0f|\u2709\ufe0f|\U0001f5f3\ufe0f|\u270f\ufe0f|\u2712\ufe0f|\U0001f58b\ufe0f|\U0001f58a\ufe0f|\U0001f58c\ufe0f|\U0001f58d\ufe0f|\U0001f5c2\ufe0f|\U0001f5d2\ufe0f|\U0001f5d3\ufe0f|\U0001f587\ufe0f|\u2702\ufe0f|\U0001f5c3\ufe0f|\U0001f5c4\ufe0f|\U0001f5d1\ufe0f|\U0001f5dd\ufe0f|\u26cf\ufe0f|\u2692\ufe0f|\U0001f6e0\ufe0f|\U0001f5e1\ufe0f|\u2694\ufe0f|\U0001f6e1\ufe0f|\u2699\ufe0f|\U0001f5dc\ufe0f|\u2696\ufe0f|\u26d3\ufe0f|\u2697\ufe0f|\U0001f6cf\ufe0f|\U0001f6cb\ufe0f|\u26b0\ufe0f|\u26b1\ufe0f|\u26a0\ufe0f|\u2622\ufe0f|\u2623\ufe0f|\u2b06\ufe0f|\u2197\ufe0f|\u27a1\ufe0f|\u2198\ufe0f|\u2b07\ufe0f|\u2199\ufe0f|\u2b05\ufe0f|\u2196\ufe0f|\u2195\ufe0f|\u2194\ufe0f|\u21a9\ufe0f|\u21aa\ufe0f|\u2934\ufe0f|\u2935\ufe0f|\u269b\ufe0f|\U0001f549\ufe0f|\u2721\ufe0f|\u2638\ufe0f|\u262f\ufe0f|\u271d\ufe0f|\u2626\ufe0f|\u262a\ufe0f|\u262e\ufe0f|\u25b6\ufe0f|\u23ed\ufe0f|\u23ef\ufe0f|\u25c0\ufe0f|\u23ee\ufe0f|\u23f8\ufe0f|\u23f9\ufe0f|\u23fa\ufe0f|\u23cf\ufe0f|\u2640\ufe0f|\u2642\ufe0f|\u2695\ufe0f|\u267e\ufe0f|\u267b\ufe0f|\u269c\ufe0f|\u2611\ufe0f|\u2714\ufe0f|\u2716\ufe0f|\u303d\ufe0f|\u2733\ufe0f|\u2734\ufe0f|\u2747\ufe0f|\u203c\ufe0f|\u2049\ufe0f|\u3030\ufe0f|\xa9\ufe0f|\xae\ufe0f|\u2122\ufe0f|\\#\u20e3|\\*\u20e3|0\u20e3|1\u20e3|2\u20e3|3\u20e3|4\u20e3|5\u20e3|6\u20e3|7\u20e3|8\u20e3|9\u20e3|\U0001f170\ufe0f|\U0001f171\ufe0f|\u2139\ufe0f|\u24c2\ufe0f|\U0001f17e\ufe0f|\U0001f17f\ufe0f|\U0001f202\ufe0f|\U0001f237\ufe0f|\u3297\ufe0f|\u3299\ufe0f|\u25fc\ufe0f|\u25fb\ufe0f|\u25aa\ufe0f|\u25ab\ufe0f|\U0001f3f3\ufe0f|\U0001f1e6\U0001f1e8|\U0001f1e6\U0001f1e9|\U0001f1e6\U0001f1ea|\U0001f1e6\U0001f1eb|\U0001f1e6\U0001f1ec|\U0001f1e6\U0001f1ee|\U0001f1e6\U0001f1f1|\U0001f1e6\U0001f1f2|\U0001f1e6\U0001f1f4|\U0001f1e6\U0001f1f6|\U0001f1e6\U0001f1f7|\U0001f1e6\U0001f1f8|\U0001f1e6\U0001f1f9|\U0001f1e6\U0001f1fa|\U0001f1e6\U0001f1fc|\U0001f1e6\U0001f1fd|\U0001f1e6\U0001f1ff|\U0001f1e7\U0001f1e6|\U0001f1e7\U0001f1e7|\U0001f1e7\U0001f1e9|\U0001f1e7\U0001f1ea|\U0001f1e7\U0001f1eb|\U0001f1e7\U0001f1ec|\U0001f1e7\U0001f1ed|\U0001f1e7\U0001f1ee|\U0001f1e7\U0001f1ef|\U0001f1e7\U0001f1f1|\U0001f1e7\U0001f1f2|\U0001f1e7\U0001f1f3|\U0001f1e7\U0001f1f4|\U0001f1e7\U0001f1f6|\U0001f1e7\U0001f1f7|\U0001f1e7\U0001f1f8|\U0001f1e7\U0001f1f9|\U0001f1e7\U0001f1fb|\U0001f1e7\U0001f1fc|\U0001f1e7\U0001f1fe|\U0001f1e7\U0001f1ff|\U0001f1e8\U0001f1e6|\U0001f1e8\U0001f1e8|\U0001f1e8\U0001f1e9|\U0001f1e8\U0001f1eb|\U0001f1e8\U0001f1ec|\U0001f1e8\U0001f1ed|\U0001f1e8\U0001f1ee|\U0001f1e8\U0001f1f0|\U0001f1e8\U0001f1f1|\U0001f1e8\U0001f1f2|\U0001f1e8\U0001f1f3|\U0001f1e8\U0001f1f4|\U0001f1e8\U0001f1f5|\U0001f1e8\U0001f1f7|\U0001f1e8\U0001f1fa|\U0001f1e8\U0001f1fb|\U0001f1e8\U0001f1fc|\U0001f1e8\U0001f1fd|\U0001f1e8\U0001f1fe|\U0001f1e8\U0001f1ff|\U0001f1e9\U0001f1ea|\U0001f1e9\U0001f1ec|\U0001f1e9\U0001f1ef|\U0001f1e9\U0001f1f0|\U0001f1e9\U0001f1f2|\U0001f1e9\U0001f1f4|\U0001f1e9\U0001f1ff|\U0001f1ea\U0001f1e6|\U0001f1ea\U0001f1e8|\U0001f1ea\U0001f1ea|\U0001f1ea\U0001f1ec|\U0001f1ea\U0001f1ed|\U0001f1ea\U0001f1f7|\U0001f1ea\U0001f1f8|\U0001f1ea\U0001f1f9|\U0001f1ea\U0001f1fa|\U0001f1eb\U0001f1ee|\U0001f1eb\U0001f1ef|\U0001f1eb\U0001f1f0|\U0001f1eb\U0001f1f2|\U0001f1eb\U0001f1f4|\U0001f1eb\U0001f1f7|\U0001f1ec\U0001f1e6|\U0001f1ec\U0001f1e7|\U0001f1ec\U0001f1e9|\U0001f1ec\U0001f1ea|\U0001f1ec\U0001f1eb|\U0001f1ec\U0001f1ec|\U0001f1ec\U0001f1ed|\U0001f1ec\U0001f1ee|\U0001f1ec\U0001f1f1|\U0001f1ec\U0001f1f2|\U0001f1ec\U0001f1f3|\U0001f1ec\U0001f1f5|\U0001f1ec\U0001f1f6|\U0001f1ec\U0001f1f7|\U0001f1ec\U0001f1f8|\U0001f1ec\U0001f1f9|\U0001f1ec\U0001f1fa|\U0001f1ec\U0001f1fc|\U0001f1ec\U0001f1fe|\U0001f1ed\U0001f1f0|\U0001f1ed\U0001f1f2|\U0001f1ed\U0001f1f3|\U0001f1ed\U0001f1f7|\U0001f1ed\U0001f1f9|\U0001f1ed\U0001f1fa|\U0001f1ee\U0001f1e8|\U0001f1ee\U0001f1e9|\U0001f1ee\U0001f1ea|\U0001f1ee\U0001f1f1|\U0001f1ee\U0001f1f2|\U0001f1ee\U0001f1f3|\U0001f1ee\U0001f1f4|\U0001f1ee\U0001f1f6|\U0001f1ee\U0001f1f7|\U0001f1ee\U0001f1f8|\U0001f1ee\U0001f1f9|\U0001f1ef\U0001f1ea|\U0001f1ef\U0001f1f2|\U0001f1ef\U0001f1f4|\U0001f1ef\U0001f1f5|\U0001f1f0\U0001f1ea|\U0001f1f0\U0001f1ec|\U0001f1f0\U0001f1ed|\U0001f1f0\U0001f1ee|\U0001f1f0\U0001f1f2|\U0001f1f0\U0001f1f3|\U0001f1f0\U0001f1f5|\U0001f1f0\U0001f1f7|\U0001f1f0\U0001f1fc|\U0001f1f0\U0001f1fe|\U0001f1f0\U0001f1ff|\U0001f1f1\U0001f1e6|\U0001f1f1\U0001f1e7|\U0001f1f1\U0001f1e8|\U0001f1f1\U0001f1ee|\U0001f1f1\U0001f1f0|\U0001f1f1\U0001f1f7|\U0001f1f1\U0001f1f8|\U0001f1f1\U0001f1f9|\U0001f1f1\U0001f1fa|\U0001f1f1\U0001f1fb|\U0001f1f1\U0001f1fe|\U0001f1f2\U0001f1e6|\U0001f1f2\U0001f1e8|\U0001f1f2\U0001f1e9|\U0001f1f2\U0001f1ea|\U0001f1f2\U0001f1eb|\U0001f1f2\U0001f1ec|\U0001f1f2\U0001f1ed|\U0001f1f2\U0001f1f0|\U0001f1f2\U0001f1f1|\U0001f1f2\U0001f1f2|\U0001f1f2\U0001f1f3|\U0001f1f2\U0001f1f4|\U0001f1f2\U0001f1f5|\U0001f1f2\U0001f1f6|\U0001f1f2\U0001f1f7|\U0001f1f2\U0001f1f8|\U0001f1f2\U0001f1f9|\U0001f1f2\U0001f1fa|\U0001f1f2\U0001f1fb|\U0001f1f2\U0001f1fc|\U0001f1f2\U0001f1fd|\U0001f1f2\U0001f1fe|\U0001f1f2\U0001f1ff|\U0001f1f3\U0001f1e6|\U0001f1f3\U0001f1e8|\U0001f1f3\U0001f1ea|\U0001f1f3\U0001f1eb|\U0001f1f3\U0001f1ec|\U0001f1f3\U0001f1ee|\U0001f1f3\U0001f1f1|\U0001f1f3\U0001f1f4|\U0001f1f3\U0001f1f5|\U0001f1f3\U0001f1f7|\U0001f1f3\U0001f1fa|\U0001f1f3\U0001f1ff|\U0001f1f4\U0001f1f2|\U0001f1f5\U0001f1e6|\U0001f1f5\U0001f1ea|\U0001f1f5\U0001f1eb|\U0001f1f5\U0001f1ec|\U0001f1f5\U0001f1ed|\U0001f1f5\U0001f1f0|\U0001f1f5\U0001f1f1|\U0001f1f5\U0001f1f2|\U0001f1f5\U0001f1f3|\U0001f1f5\U0001f1f7|\U0001f1f5\U0001f1f8|\U0001f1f5\U0001f1f9|\U0001f1f5\U0001f1fc|\U0001f1f5\U0001f1fe|\U0001f1f6\U0001f1e6|\U0001f1f7\U0001f1ea|\U0001f1f7\U0001f1f4|\U0001f1f7\U0001f1f8|\U0001f1f7\U0001f1fa|\U0001f1f7\U0001f1fc|\U0001f1f8\U0001f1e6|\U0001f1f8\U0001f1e7|\U0001f1f8\U0001f1e8|\U0001f1f8\U0001f1e9|\U0001f1f8\U0001f1ea|\U0001f1f8\U0001f1ec|\U0001f1f8\U0001f1ed|\U0001f1f8\U0001f1ee|\U0001f1f8\U0001f1ef|\U0001f1f8\U0001f1f0|\U0001f1f8\U0001f1f1|\U0001f1f8\U0001f1f2|\U0001f1f8\U0001f1f3|\U0001f1f8\U0001f1f4|\U0001f1f8\U0001f1f7|\U0001f1f8\U0001f1f8|\U0001f1f8\U0001f1f9|\U0001f1f8\U0001f1fb|\U0001f1f8\U0001f1fd|\U0001f1f8\U0001f1fe|\U0001f1f8\U0001f1ff|\U0001f1f9\U0001f1e6|\U0001f1f9\U0001f1e8|\U0001f1f9\U0001f1e9|\U0001f1f9\U0001f1eb|\U0001f1f9\U0001f1ec|\U0001f1f9\U0001f1ed|\U0001f1f9\U0001f1ef|\U0001f1f9\U0001f1f0|\U0001f1f9\U0001f1f1|\U0001f1f9\U0001f1f2|\U0001f1f9\U0001f1f3|\U0001f1f9\U0001f1f4|\U0001f1f9\U0001f1f7|\U0001f1f9\U0001f1f9|\U0001f1f9\U0001f1fb|\U0001f1f9\U0001f1fc|\U0001f1f9\U0001f1ff|\U0001f1fa\U0001f1e6|\U0001f1fa\U0001f1ec|\U0001f1fa\U0001f1f2|\U0001f1fa\U0001f1f3|\U0001f1fa\U0001f1f8|\U0001f1fa\U0001f1fe|\U0001f1fa\U0001f1ff|\U0001f1fb\U0001f1e6|\U0001f1fb\U0001f1e8|\U0001f1fb\U0001f1ea|\U0001f1fb\U0001f1ec|\U0001f1fb\U0001f1ee|\U0001f1fb\U0001f1f3|\U0001f1fb\U0001f1fa|\U0001f1fc\U0001f1eb|\U0001f1fc\U0001f1f8|\U0001f1fd\U0001f1f0|\U0001f1fe\U0001f1ea|\U0001f1fe\U0001f1f9|\U0001f1ff\U0001f1e6|\U0001f1ff\U0001f1f2|\U0001f1ff\U0001f1fc|\U0001f600|\U0001f603|\U0001f604|\U0001f601|\U0001f606|\U0001f605|\U0001f923|\U0001f602|\U0001f642|\U0001f643|\U0001f609|\U0001f60a|\U0001f607|\U0001f970|\U0001f60d|\U0001f929|\U0001f618|\U0001f617|\u263a|\U0001f61a|\U0001f619|\U0001f60b|\U0001f61b|\U0001f61c|\U0001f92a|\U0001f61d|\U0001f911|\U0001f917|\U0001f92d|\U0001f92b|\U0001f914|\U0001f910|\U0001f928|\U0001f610|\U0001f611|\U0001f636|\U0001f60f|\U0001f612|\U0001f644|\U0001f62c|\U0001f925|\U0001f60c|\U0001f614|\U0001f62a|\U0001f924|\U0001f634|\U0001f637|\U0001f912|\U0001f915|\U0001f922|\U0001f92e|\U0001f927|\U0001f975|\U0001f976|\U0001f974|\U0001f635|\U0001f92f|\U0001f920|\U0001f973|\U0001f60e|\U0001f913|\U0001f9d0|\U0001f615|\U0001f61f|\U0001f641|\u2639|\U0001f62e|\U0001f62f|\U0001f632|\U0001f633|\U0001f97a|\U0001f626|\U0001f627|\U0001f628|\U0001f630|\U0001f625|\U0001f622|\U0001f62d|\U0001f631|\U0001f616|\U0001f623|\U0001f61e|\U0001f613|\U0001f629|\U0001f62b|\U0001f971|\U0001f624|\U0001f621|\U0001f620|\U0001f92c|\U0001f608|\U0001f47f|\U0001f480|\u2620|\U0001f4a9|\U0001f921|\U0001f479|\U0001f47a|\U0001f47b|\U0001f47d|\U0001f47e|\U0001f916|\U0001f63a|\U0001f638|\U0001f639|\U0001f63b|\U0001f63c|\U0001f63d|\U0001f640|\U0001f63f|\U0001f63e|\U0001f648|\U0001f649|\U0001f64a|\U0001f48b|\U0001f48c|\U0001f498|\U0001f49d|\U0001f496|\U0001f497|\U0001f493|\U0001f49e|\U0001f495|\U0001f49f|\u2763|\U0001f494|\u2764|\U0001f9e1|\U0001f49b|\U0001f49a|\U0001f499|\U0001f49c|\U0001f90e|\U0001f5a4|\U0001f90d|\U0001f4af|\U0001f4a2|\U0001f4a5|\U0001f4ab|\U0001f4a6|\U0001f4a8|\U0001f573|\U0001f4a3|\U0001f4ac|\U0001f5e8|\U0001f5ef|\U0001f4ad|\U0001f4a4|\U0001f44b|\U0001f91a|\U0001f590|\u270b|\U0001f596|\U0001f44c|\U0001f90f|\u270c|\U0001f91e|\U0001f91f|\U0001f918|\U0001f919|\U0001f448|\U0001f449|\U0001f446|\U0001f595|\U0001f447|\u261d|\U0001f44d|\U0001f44e|\u270a|\U0001f44a|\U0001f91b|\U0001f91c|\U0001f44f|\U0001f64c|\U0001f450|\U0001f932|\U0001f91d|\U0001f64f|\u270d|\U0001f485|\U0001f933|\U0001f4aa|\U0001f9be|\U0001f9bf|\U0001f9b5|\U0001f9b6|\U0001f442|\U0001f9bb|\U0001f443|\U0001f9e0|\U0001f9b7|\U0001f9b4|\U0001f440|\U0001f441|\U0001f445|\U0001f444|\U0001f476|\U0001f9d2|\U0001f466|\U0001f467|\U0001f9d1|\U0001f471|\U0001f468|\U0001f9d4|\U0001f469|\U0001f9d3|\U0001f474|\U0001f475|\U0001f64d|\U0001f64e|\U0001f645|\U0001f646|\U0001f481|\U0001f64b|\U0001f9cf|\U0001f647|\U0001f926|\U0001f937|\U0001f46e|\U0001f575|\U0001f482|\U0001f477|\U0001f934|\U0001f478|\U0001f473|\U0001f472|\U0001f9d5|\U0001f935|\U0001f470|\U0001f930|\U0001f931|\U0001f47c|\U0001f385|\U0001f936|\U0001f9b8|\U0001f9b9|\U0001f9d9|\U0001f9da|\U0001f9db|\U0001f9dc|\U0001f9dd|\U0001f9de|\U0001f9df|\U0001f486|\U0001f487|\U0001f6b6|\U0001f9cd|\U0001f9ce|\U0001f3c3|\U0001f483|\U0001f57a|\U0001f574|\U0001f46f|\U0001f9d6|\U0001f9d7|\U0001f93a|\U0001f3c7|\u26f7|\U0001f3c2|\U0001f3cc|\U0001f3c4|\U0001f6a3|\U0001f3ca|\u26f9|\U0001f3cb|\U0001f6b4|\U0001f6b5|\U0001f938|\U0001f93c|\U0001f93d|\U0001f93e|\U0001f939|\U0001f9d8|\U0001f6c0|\U0001f6cc|\U0001f46d|\U0001f46b|\U0001f46c|\U0001f48f|\U0001f491|\U0001f46a|\U0001f5e3|\U0001f464|\U0001f465|\U0001f463|\U0001f3fb|\U0001f3fc|\U0001f3fd|\U0001f3fe|\U0001f3ff|\U0001f9b0|\U0001f9b1|\U0001f9b3|\U0001f9b2|\U0001f435|\U0001f412|\U0001f98d|\U0001f9a7|\U0001f436|\U0001f415|\U0001f9ae|\U0001f429|\U0001f43a|\U0001f98a|\U0001f99d|\U0001f431|\U0001f408|\U0001f981|\U0001f42f|\U0001f405|\U0001f406|\U0001f434|\U0001f40e|\U0001f984|\U0001f993|\U0001f98c|\U0001f42e|\U0001f402|\U0001f403|\U0001f404|\U0001f437|\U0001f416|\U0001f417|\U0001f43d|\U0001f40f|\U0001f411|\U0001f410|\U0001f42a|\U0001f42b|\U0001f999|\U0001f992|\U0001f418|\U0001f98f|\U0001f99b|\U0001f42d|\U0001f401|\U0001f400|\U0001f439|\U0001f430|\U0001f407|\U0001f43f|\U0001f994|\U0001f987|\U0001f43b|\U0001f428|\U0001f43c|\U0001f9a5|\U0001f9a6|\U0001f9a8|\U0001f998|\U0001f9a1|\U0001f43e|\U0001f983|\U0001f414|\U0001f413|\U0001f423|\U0001f424|\U0001f425|\U0001f426|\U0001f427|\U0001f54a|\U0001f985|\U0001f986|\U0001f9a2|\U0001f989|\U0001f9a9|\U0001f99a|\U0001f99c|\U0001f438|\U0001f40a|\U0001f422|\U0001f98e|\U0001f40d|\U0001f432|\U0001f409|\U0001f995|\U0001f996|\U0001f433|\U0001f40b|\U0001f42c|\U0001f41f|\U0001f420|\U0001f421|\U0001f988|\U0001f419|\U0001f41a|\U0001f40c|\U0001f98b|\U0001f41b|\U0001f41c|\U0001f41d|\U0001f41e|\U0001f997|\U0001f577|\U0001f578|\U0001f982|\U0001f99f|\U0001f9a0|\U0001f490|\U0001f338|\U0001f4ae|\U0001f3f5|\U0001f339|\U0001f940|\U0001f33a|\U0001f33b|\U0001f33c|\U0001f337|\U0001f331|\U0001f332|\U0001f333|\U0001f334|\U0001f335|\U0001f33e|\U0001f33f|\u2618|\U0001f340|\U0001f341|\U0001f342|\U0001f343|\U0001f347|\U0001f348|\U0001f349|\U0001f34a|\U0001f34b|\U0001f34c|\U0001f34d|\U0001f96d|\U0001f34e|\U0001f34f|\U0001f350|\U0001f351|\U0001f352|\U0001f353|\U0001f95d|\U0001f345|\U0001f965|\U0001f951|\U0001f346|\U0001f954|\U0001f955|\U0001f33d|\U0001f336|\U0001f952|\U0001f96c|\U0001f966|\U0001f9c4|\U0001f9c5|\U0001f344|\U0001f95c|\U0001f330|\U0001f35e|\U0001f950|\U0001f956|\U0001f968|\U0001f96f|\U0001f95e|\U0001f9c7|\U0001f9c0|\U0001f356|\U0001f357|\U0001f969|\U0001f953|\U0001f354|\U0001f35f|\U0001f355|\U0001f32d|\U0001f96a|\U0001f32e|\U0001f32f|\U0001f959|\U0001f9c6|\U0001f95a|\U0001f373|\U0001f958|\U0001f372|\U0001f963|\U0001f957|\U0001f37f|\U0001f9c8|\U0001f9c2|\U0001f96b|\U0001f371|\U0001f358|\U0001f359|\U0001f35a|\U0001f35b|\U0001f35c|\U0001f35d|\U0001f360|\U0001f362|\U0001f363|\U0001f364|\U0001f365|\U0001f96e|\U0001f361|\U0001f95f|\U0001f960|\U0001f961|\U0001f980|\U0001f99e|\U0001f990|\U0001f991|\U0001f9aa|\U0001f366|\U0001f367|\U0001f368|\U0001f369|\U0001f36a|\U0001f382|\U0001f370|\U0001f9c1|\U0001f967|\U0001f36b|\U0001f36c|\U0001f36d|\U0001f36e|\U0001f36f|\U0001f37c|\U0001f95b|\u2615|\U0001f375|\U0001f376|\U0001f37e|\U0001f377|\U0001f378|\U0001f379|\U0001f37a|\U0001f37b|\U0001f942|\U0001f943|\U0001f964|\U0001f9c3|\U0001f9c9|\U0001f9ca|\U0001f962|\U0001f37d|\U0001f374|\U0001f944|\U0001f52a|\U0001f3fa|\U0001f30d|\U0001f30e|\U0001f30f|\U0001f310|\U0001f5fa|\U0001f5fe|\U0001f9ed|\U0001f3d4|\u26f0|\U0001f30b|\U0001f5fb|\U0001f3d5|\U0001f3d6|\U0001f3dc|\U0001f3dd|\U0001f3de|\U0001f3df|\U0001f3db|\U0001f3d7|\U0001f9f1|\U0001f3d8|\U0001f3da|\U0001f3e0|\U0001f3e1|\U0001f3e2|\U0001f3e3|\U0001f3e4|\U0001f3e5|\U0001f3e6|\U0001f3e8|\U0001f3e9|\U0001f3ea|\U0001f3eb|\U0001f3ec|\U0001f3ed|\U0001f3ef|\U0001f3f0|\U0001f492|\U0001f5fc|\U0001f5fd|\u26ea|\U0001f54c|\U0001f6d5|\U0001f54d|\u26e9|\U0001f54b|\u26f2|\u26fa|\U0001f301|\U0001f303|\U0001f3d9|\U0001f304|\U0001f305|\U0001f306|\U0001f307|\U0001f309|\u2668|\U0001f3a0|\U0001f3a1|\U0001f3a2|\U0001f488|\U0001f3aa|\U0001f682|\U0001f683|\U0001f684|\U0001f685|\U0001f686|\U0001f687|\U0001f688|\U0001f689|\U0001f68a|\U0001f69d|\U0001f69e|\U0001f68b|\U0001f68c|\U0001f68d|\U0001f68e|\U0001f690|\U0001f691|\U0001f692|\U0001f693|\U0001f694|\U0001f695|\U0001f696|\U0001f697|\U0001f698|\U0001f699|\U0001f69a|\U0001f69b|\U0001f69c|\U0001f3ce|\U0001f3cd|\U0001f6f5|\U0001f9bd|\U0001f9bc|\U0001f6fa|\U0001f6b2|\U0001f6f4|\U0001f6f9|\U0001f68f|\U0001f6e3|\U0001f6e4|\U0001f6e2|\u26fd|\U0001f6a8|\U0001f6a5|\U0001f6a6|\U0001f6d1|\U0001f6a7|\u2693|\u26f5|\U0001f6f6|\U0001f6a4|\U0001f6f3|\u26f4|\U0001f6e5|\U0001f6a2|\u2708|\U0001f6e9|\U0001f6eb|\U0001f6ec|\U0001fa82|\U0001f4ba|\U0001f681|\U0001f69f|\U0001f6a0|\U0001f6a1|\U0001f6f0|\U0001f680|\U0001f6f8|\U0001f6ce|\U0001f9f3|\u231b|\u23f3|\u231a|\u23f0|\u23f1|\u23f2|\U0001f570|\U0001f55b|\U0001f567|\U0001f550|\U0001f55c|\U0001f551|\U0001f55d|\U0001f552|\U0001f55e|\U0001f553|\U0001f55f|\U0001f554|\U0001f560|\U0001f555|\U0001f561|\U0001f556|\U0001f562|\U0001f557|\U0001f563|\U0001f558|\U0001f564|\U0001f559|\U0001f565|\U0001f55a|\U0001f566|\U0001f311|\U0001f312|\U0001f313|\U0001f314|\U0001f315|\U0001f316|\U0001f317|\U0001f318|\U0001f319|\U0001f31a|\U0001f31b|\U0001f31c|\U0001f321|\u2600|\U0001f31d|\U0001f31e|\U0001fa90|\u2b50|\U0001f31f|\U0001f320|\U0001f30c|\u2601|\u26c5|\u26c8|\U0001f324|\U0001f325|\U0001f326|\U0001f327|\U0001f328|\U0001f329|\U0001f32a|\U0001f32b|\U0001f32c|\U0001f300|\U0001f308|\U0001f302|\u2602|\u2614|\u26f1|\u26a1|\u2744|\u2603|\u26c4|\u2604|\U0001f525|\U0001f4a7|\U0001f30a|\U0001f383|\U0001f384|\U0001f386|\U0001f387|\U0001f9e8|\u2728|\U0001f388|\U0001f389|\U0001f38a|\U0001f38b|\U0001f38d|\U0001f38e|\U0001f38f|\U0001f390|\U0001f391|\U0001f9e7|\U0001f380|\U0001f381|\U0001f397|\U0001f39f|\U0001f3ab|\U0001f396|\U0001f3c6|\U0001f3c5|\U0001f947|\U0001f948|\U0001f949|\u26bd|\u26be|\U0001f94e|\U0001f3c0|\U0001f3d0|\U0001f3c8|\U0001f3c9|\U0001f3be|\U0001f94f|\U0001f3b3|\U0001f3cf|\U0001f3d1|\U0001f3d2|\U0001f94d|\U0001f3d3|\U0001f3f8|\U0001f94a|\U0001f94b|\U0001f945|\u26f3|\u26f8|\U0001f3a3|\U0001f93f|\U0001f3bd|\U0001f3bf|\U0001f6f7|\U0001f94c|\U0001f3af|\U0001fa80|\U0001fa81|\U0001f3b1|\U0001f52e|\U0001f9ff|\U0001f3ae|\U0001f579|\U0001f3b0|\U0001f3b2|\U0001f9e9|\U0001f9f8|\u2660|\u2665|\u2666|\u2663|\u265f|\U0001f0cf|\U0001f004|\U0001f3b4|\U0001f3ad|\U0001f5bc|\U0001f3a8|\U0001f9f5|\U0001f9f6|\U0001f453|\U0001f576|\U0001f97d|\U0001f97c|\U0001f9ba|\U0001f454|\U0001f455|\U0001f456|\U0001f9e3|\U0001f9e4|\U0001f9e5|\U0001f9e6|\U0001f457|\U0001f458|\U0001f97b|\U0001fa71|\U0001fa72|\U0001fa73|\U0001f459|\U0001f45a|\U0001f45b|\U0001f45c|\U0001f45d|\U0001f6cd|\U0001f392|\U0001f45e|\U0001f45f|\U0001f97e|\U0001f97f|\U0001f460|\U0001f461|\U0001fa70|\U0001f462|\U0001f451|\U0001f452|\U0001f3a9|\U0001f393|\U0001f9e2|\u26d1|\U0001f4ff|\U0001f484|\U0001f48d|\U0001f48e|\U0001f507|\U0001f508|\U0001f509|\U0001f50a|\U0001f4e2|\U0001f4e3|\U0001f4ef|\U0001f514|\U0001f515|\U0001f3bc|\U0001f3b5|\U0001f3b6|\U0001f399|\U0001f39a|\U0001f39b|\U0001f3a4|\U0001f3a7|\U0001f4fb|\U0001f3b7|\U0001f3b8|\U0001f3b9|\U0001f3ba|\U0001f3bb|\U0001fa95|\U0001f941|\U0001f4f1|\U0001f4f2|\u260e|\U0001f4de|\U0001f4df|\U0001f4e0|\U0001f50b|\U0001f50c|\U0001f4bb|\U0001f5a5|\U0001f5a8|\u2328|\U0001f5b1|\U0001f5b2|\U0001f4bd|\U0001f4be|\U0001f4bf|\U0001f4c0|\U0001f9ee|\U0001f3a5|\U0001f39e|\U0001f4fd|\U0001f3ac|\U0001f4fa|\U0001f4f7|\U0001f4f8|\U0001f4f9|\U0001f4fc|\U0001f50d|\U0001f50e|\U0001f56f|\U0001f4a1|\U0001f526|\U0001f3ee|\U0001fa94|\U0001f4d4|\U0001f4d5|\U0001f4d6|\U0001f4d7|\U0001f4d8|\U0001f4d9|\U0001f4da|\U0001f4d3|\U0001f4d2|\U0001f4c3|\U0001f4dc|\U0001f4c4|\U0001f4f0|\U0001f5de|\U0001f4d1|\U0001f516|\U0001f3f7|\U0001f4b0|\U0001f4b4|\U0001f4b5|\U0001f4b6|\U0001f4b7|\U0001f4b8|\U0001f4b3|\U0001f9fe|\U0001f4b9|\U0001f4b1|\U0001f4b2|\u2709|\U0001f4e7|\U0001f4e8|\U0001f4e9|\U0001f4e4|\U0001f4e5|\U0001f4e6|\U0001f4eb|\U0001f4ea|\U0001f4ec|\U0001f4ed|\U0001f4ee|\U0001f5f3|\u270f|\u2712|\U0001f58b|\U0001f58a|\U0001f58c|\U0001f58d|\U0001f4dd|\U0001f4bc|\U0001f4c1|\U0001f4c2|\U0001f5c2|\U0001f4c5|\U0001f4c6|\U0001f5d2|\U0001f5d3|\U0001f4c7|\U0001f4c8|\U0001f4c9|\U0001f4ca|\U0001f4cb|\U0001f4cc|\U0001f4cd|\U0001f4ce|\U0001f587|\U0001f4cf|\U0001f4d0|\u2702|\U0001f5c3|\U0001f5c4|\U0001f5d1|\U0001f512|\U0001f513|\U0001f50f|\U0001f510|\U0001f511|\U0001f5dd|\U0001f528|\U0001fa93|\u26cf|\u2692|\U0001f6e0|\U0001f5e1|\u2694|\U0001f52b|\U0001f3f9|\U0001f6e1|\U0001f527|\U0001f529|\u2699|\U0001f5dc|\u2696|\U0001f9af|\U0001f517|\u26d3|\U0001f9f0|\U0001f9f2|\u2697|\U0001f9ea|\U0001f9eb|\U0001f9ec|\U0001f52c|\U0001f52d|\U0001f4e1|\U0001f489|\U0001fa78|\U0001f48a|\U0001fa79|\U0001fa7a|\U0001f6aa|\U0001f6cf|\U0001f6cb|\U0001fa91|\U0001f6bd|\U0001f6bf|\U0001f6c1|\U0001fa92|\U0001f9f4|\U0001f9f7|\U0001f9f9|\U0001f9fa|\U0001f9fb|\U0001f9fc|\U0001f9fd|\U0001f9ef|\U0001f6d2|\U0001f6ac|\u26b0|\u26b1|\U0001f5ff|\U0001f3e7|\U0001f6ae|\U0001f6b0|\u267f|\U0001f6b9|\U0001f6ba|\U0001f6bb|\U0001f6bc|\U0001f6be|\U0001f6c2|\U0001f6c3|\U0001f6c4|\U0001f6c5|\u26a0|\U0001f6b8|\u26d4|\U0001f6ab|\U0001f6b3|\U0001f6ad|\U0001f6af|\U0001f6b1|\U0001f6b7|\U0001f4f5|\U0001f51e|\u2622|\u2623|\u2b06|\u2197|\u27a1|\u2198|\u2b07|\u2199|\u2b05|\u2196|\u2195|\u2194|\u21a9|\u21aa|\u2934|\u2935|\U0001f503|\U0001f504|\U0001f519|\U0001f51a|\U0001f51b|\U0001f51c|\U0001f51d|\U0001f6d0|\u269b|\U0001f549|\u2721|\u2638|\u262f|\u271d|\u2626|\u262a|\u262e|\U0001f54e|\U0001f52f|\u2648|\u2649|\u264a|\u264b|\u264c|\u264d|\u264e|\u264f|\u2650|\u2651|\u2652|\u2653|\u26ce|\U0001f500|\U0001f501|\U0001f502|\u25b6|\u23e9|\u23ed|\u23ef|\u25c0|\u23ea|\u23ee|\U0001f53c|\u23eb|\U0001f53d|\u23ec|\u23f8|\u23f9|\u23fa|\u23cf|\U0001f3a6|\U0001f505|\U0001f506|\U0001f4f6|\U0001f4f3|\U0001f4f4|\u2640|\u2642|\u2695|\u267e|\u267b|\u269c|\U0001f531|\U0001f4db|\U0001f530|\u2b55|\u2705|\u2611|\u2714|\u2716|\u274c|\u274e|\u2795|\u2796|\u2797|\u27b0|\u27bf|\u303d|\u2733|\u2734|\u2747|\u203c|\u2049|\u2753|\u2754|\u2755|\u2757|\u3030|\xa9|\xae|\u2122|\U0001f51f|\U0001f520|\U0001f521|\U0001f522|\U0001f523|\U0001f524|\U0001f170|\U0001f18e|\U0001f171|\U0001f191|\U0001f192|\U0001f193|\u2139|\U0001f194|\u24c2|\U0001f195|\U0001f196|\U0001f17e|\U0001f197|\U0001f17f|\U0001f198|\U0001f199|\U0001f19a|\U0001f201|\U0001f202|\U0001f237|\U0001f236|\U0001f22f|\U0001f250|\U0001f239|\U0001f21a|\U0001f232|\U0001f251|\U0001f238|\U0001f234|\U0001f233|\u3297|\u3299|\U0001f23a|\U0001f235|\U0001f534|\U0001f7e0|\U0001f7e1|\U0001f7e2|\U0001f535|\U0001f7e3|\U0001f7e4|\u26ab|\u26aa|\U0001f7e5|\U0001f7e7|\U0001f7e8|\U0001f7e9|\U0001f7e6|\U0001f7ea|\U0001f7eb|\u2b1b|\u2b1c|\u25fc|\u25fb|\u25fe|\u25fd|\u25aa|\u25ab|\U0001f536|\U0001f537|\U0001f538|\U0001f539|\U0001f53a|\U0001f53b|\U0001f4a0|\U0001f518|\U0001f533|\U0001f532|\U0001f3c1|\U0001f6a9|\U0001f38c|\U0001f3f4|\U0001f3f3', + 'quotation_mark': r'[\'\"]', + 'special_character': r'[^\w\s]', + 'blank': r'\s', + 'e_mail': r'[\w-]+(?:\.[\w-]+)*@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*', + 'url': r'https?://[a-zA-Z0-9.=?/&%$-_]+|www\.[a-zA-Z0-9.=?/&%$-_]+', + 'html': r'<[^>]*>', + 'rt': r'(?:rt|RT) @[\w]*: |@[a-zA-Z0-9.=?/-_]+', + 'cell_phone_number': r'010-\d{4}-\d{4}', + 'phone_number': r'\d{2,3}-\d{3,4}-\d{4}', + 'zip_code': r'\d{5}', + 'hashtag': r'#[a-zA-Z0-9_ㄱ-ㅣ가-힣]+', + 'ipv4': IPV4_SEG + r'(?:\.' + IPV4_SEG + '){3}', + 'chinese': r'[⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〺〻㐀-䶵一-鿃豈-鶴侮-頻並-龎]+', + 'japanese': r'[、-ヾ㌀-㍰㍻-㍿㋀-㋋㏠-㏾㋐-㋿。-ン]+', + 'date': r'|'.join(DATE_PATTERNS)} diff --git a/function/python/brightics/function/textanalytics/data/word2vec_questions_words.txt b/function/python/brightics/function/textanalytics/data/word2vec_questions_words.txt new file mode 100644 index 000000000..bd2963b2e --- /dev/null +++ b/function/python/brightics/function/textanalytics/data/word2vec_questions_words.txt @@ -0,0 +1,19558 @@ +: capital-common-countries +Athens Greece Baghdad Iraq +Athens Greece Bangkok Thailand +Athens Greece Beijing China +Athens Greece Berlin Germany +Athens Greece Bern Switzerland +Athens Greece Cairo Egypt +Athens Greece Canberra Australia +Athens Greece Hanoi Vietnam +Athens Greece Havana Cuba +Athens Greece Helsinki Finland +Athens Greece Islamabad Pakistan +Athens Greece Kabul Afghanistan +Athens Greece London England +Athens Greece Madrid Spain +Athens Greece Moscow Russia +Athens Greece Oslo Norway +Athens Greece Ottawa Canada +Athens Greece Paris France +Athens Greece Rome Italy +Athens Greece Stockholm Sweden +Athens Greece Tehran Iran +Athens Greece Tokyo Japan +Baghdad Iraq Bangkok Thailand +Baghdad Iraq Beijing China +Baghdad Iraq Berlin Germany +Baghdad Iraq Bern Switzerland +Baghdad Iraq Cairo Egypt +Baghdad Iraq Canberra Australia +Baghdad Iraq Hanoi Vietnam +Baghdad Iraq Havana Cuba +Baghdad Iraq Helsinki Finland +Baghdad Iraq Islamabad Pakistan +Baghdad Iraq Kabul Afghanistan +Baghdad Iraq London England +Baghdad Iraq Madrid Spain +Baghdad Iraq Moscow Russia +Baghdad Iraq Oslo Norway +Baghdad Iraq Ottawa Canada +Baghdad Iraq Paris France +Baghdad Iraq Rome Italy +Baghdad Iraq Stockholm Sweden +Baghdad Iraq Tehran Iran +Baghdad Iraq Tokyo Japan +Baghdad Iraq Athens Greece +Bangkok Thailand Beijing China +Bangkok Thailand Berlin Germany +Bangkok Thailand Bern Switzerland +Bangkok Thailand Cairo Egypt +Bangkok Thailand Canberra Australia +Bangkok Thailand Hanoi Vietnam +Bangkok Thailand Havana Cuba +Bangkok Thailand Helsinki Finland +Bangkok Thailand Islamabad Pakistan +Bangkok Thailand Kabul Afghanistan +Bangkok Thailand London England +Bangkok Thailand Madrid Spain +Bangkok Thailand Moscow Russia +Bangkok Thailand Oslo Norway +Bangkok Thailand Ottawa Canada +Bangkok Thailand Paris France +Bangkok Thailand Rome Italy +Bangkok Thailand Stockholm Sweden +Bangkok Thailand Tehran Iran +Bangkok Thailand Tokyo Japan +Bangkok Thailand Athens Greece +Bangkok Thailand Baghdad Iraq +Beijing China Berlin Germany +Beijing China Bern Switzerland +Beijing China Cairo Egypt +Beijing China Canberra Australia +Beijing China Hanoi Vietnam +Beijing China Havana Cuba +Beijing China Helsinki Finland +Beijing China Islamabad Pakistan +Beijing China Kabul Afghanistan +Beijing China London England +Beijing China Madrid Spain +Beijing China Moscow Russia +Beijing China Oslo Norway +Beijing China Ottawa Canada +Beijing China Paris France +Beijing China Rome Italy +Beijing China Stockholm Sweden +Beijing China Tehran Iran +Beijing China Tokyo Japan +Beijing China Athens Greece +Beijing China Baghdad Iraq +Beijing China Bangkok Thailand +Berlin Germany Bern Switzerland +Berlin Germany Cairo Egypt +Berlin Germany Canberra Australia +Berlin Germany Hanoi Vietnam +Berlin Germany Havana Cuba +Berlin Germany Helsinki Finland +Berlin Germany Islamabad Pakistan +Berlin Germany Kabul Afghanistan +Berlin Germany London England +Berlin Germany Madrid Spain +Berlin Germany Moscow Russia +Berlin Germany Oslo Norway +Berlin Germany Ottawa Canada +Berlin Germany Paris France +Berlin Germany Rome Italy +Berlin Germany Stockholm Sweden +Berlin Germany Tehran Iran +Berlin Germany Tokyo Japan +Berlin Germany Athens Greece +Berlin Germany Baghdad Iraq +Berlin Germany Bangkok Thailand +Berlin Germany Beijing China +Bern Switzerland Cairo Egypt +Bern Switzerland Canberra Australia +Bern Switzerland Hanoi Vietnam +Bern Switzerland Havana Cuba +Bern Switzerland Helsinki Finland +Bern Switzerland Islamabad Pakistan +Bern Switzerland Kabul Afghanistan +Bern Switzerland London England +Bern Switzerland Madrid Spain +Bern Switzerland Moscow Russia +Bern Switzerland Oslo Norway +Bern Switzerland Ottawa Canada +Bern Switzerland Paris France +Bern Switzerland Rome Italy +Bern Switzerland Stockholm Sweden +Bern Switzerland Tehran Iran +Bern Switzerland Tokyo Japan +Bern Switzerland Athens Greece +Bern Switzerland Baghdad Iraq +Bern Switzerland Bangkok Thailand +Bern Switzerland Beijing China +Bern Switzerland Berlin Germany +Cairo Egypt Canberra Australia +Cairo Egypt Hanoi Vietnam +Cairo Egypt Havana Cuba +Cairo Egypt Helsinki Finland +Cairo Egypt Islamabad Pakistan +Cairo Egypt Kabul Afghanistan +Cairo Egypt London England +Cairo Egypt Madrid Spain +Cairo Egypt Moscow Russia +Cairo Egypt Oslo Norway +Cairo Egypt Ottawa Canada +Cairo Egypt Paris France +Cairo Egypt Rome Italy +Cairo Egypt Stockholm Sweden +Cairo Egypt Tehran Iran +Cairo Egypt Tokyo Japan +Cairo Egypt Athens Greece +Cairo Egypt Baghdad Iraq +Cairo Egypt Bangkok Thailand +Cairo Egypt Beijing China +Cairo Egypt Berlin Germany +Cairo Egypt Bern Switzerland +Canberra Australia Hanoi Vietnam +Canberra Australia Havana Cuba +Canberra Australia Helsinki Finland +Canberra Australia Islamabad Pakistan +Canberra Australia Kabul Afghanistan +Canberra Australia London England +Canberra Australia Madrid Spain +Canberra Australia Moscow Russia +Canberra Australia Oslo Norway +Canberra Australia Ottawa Canada +Canberra Australia Paris France +Canberra Australia Rome Italy +Canberra Australia Stockholm Sweden +Canberra Australia Tehran Iran +Canberra Australia Tokyo Japan +Canberra Australia Athens Greece +Canberra Australia Baghdad Iraq +Canberra Australia Bangkok Thailand +Canberra Australia Beijing China +Canberra Australia Berlin Germany +Canberra Australia Bern Switzerland +Canberra Australia Cairo Egypt +Hanoi Vietnam Havana Cuba +Hanoi Vietnam Helsinki Finland +Hanoi Vietnam Islamabad Pakistan +Hanoi Vietnam Kabul Afghanistan +Hanoi Vietnam London England +Hanoi Vietnam Madrid Spain +Hanoi Vietnam Moscow Russia +Hanoi Vietnam Oslo Norway +Hanoi Vietnam Ottawa Canada +Hanoi Vietnam Paris France +Hanoi Vietnam Rome Italy +Hanoi Vietnam Stockholm Sweden +Hanoi Vietnam Tehran Iran +Hanoi Vietnam Tokyo Japan +Hanoi Vietnam Athens Greece +Hanoi Vietnam Baghdad Iraq +Hanoi Vietnam Bangkok Thailand +Hanoi Vietnam Beijing China +Hanoi Vietnam Berlin Germany +Hanoi Vietnam Bern Switzerland +Hanoi Vietnam Cairo Egypt +Hanoi Vietnam Canberra Australia +Havana Cuba Helsinki Finland +Havana Cuba Islamabad Pakistan +Havana Cuba Kabul Afghanistan +Havana Cuba London England +Havana Cuba Madrid Spain +Havana Cuba Moscow Russia +Havana Cuba Oslo Norway +Havana Cuba Ottawa Canada +Havana Cuba Paris France +Havana Cuba Rome Italy +Havana Cuba Stockholm Sweden +Havana Cuba Tehran Iran +Havana Cuba Tokyo Japan +Havana Cuba Athens Greece +Havana Cuba Baghdad Iraq +Havana Cuba Bangkok Thailand +Havana Cuba Beijing China +Havana Cuba Berlin Germany +Havana Cuba Bern Switzerland +Havana Cuba Cairo Egypt +Havana Cuba Canberra Australia +Havana Cuba Hanoi Vietnam +Helsinki Finland Islamabad Pakistan +Helsinki Finland Kabul Afghanistan +Helsinki Finland London England +Helsinki Finland Madrid Spain +Helsinki Finland Moscow Russia +Helsinki Finland Oslo Norway +Helsinki Finland Ottawa Canada +Helsinki Finland Paris France +Helsinki Finland Rome Italy +Helsinki Finland Stockholm Sweden +Helsinki Finland Tehran Iran +Helsinki Finland Tokyo Japan +Helsinki Finland Athens Greece +Helsinki Finland Baghdad Iraq +Helsinki Finland Bangkok Thailand +Helsinki Finland Beijing China +Helsinki Finland Berlin Germany +Helsinki Finland Bern Switzerland +Helsinki Finland Cairo Egypt +Helsinki Finland Canberra Australia +Helsinki Finland Hanoi Vietnam +Helsinki Finland Havana Cuba +Islamabad Pakistan Kabul Afghanistan +Islamabad Pakistan London England +Islamabad Pakistan Madrid Spain +Islamabad Pakistan Moscow Russia +Islamabad Pakistan Oslo Norway +Islamabad Pakistan Ottawa Canada +Islamabad Pakistan Paris France +Islamabad Pakistan Rome Italy +Islamabad Pakistan Stockholm Sweden +Islamabad Pakistan Tehran Iran +Islamabad Pakistan Tokyo Japan +Islamabad Pakistan Athens Greece +Islamabad Pakistan Baghdad Iraq +Islamabad Pakistan Bangkok Thailand +Islamabad Pakistan Beijing China +Islamabad Pakistan Berlin Germany +Islamabad Pakistan Bern Switzerland +Islamabad Pakistan Cairo Egypt +Islamabad Pakistan Canberra Australia +Islamabad Pakistan Hanoi Vietnam +Islamabad Pakistan Havana Cuba +Islamabad Pakistan Helsinki Finland +Kabul Afghanistan London England +Kabul Afghanistan Madrid Spain +Kabul Afghanistan Moscow Russia +Kabul Afghanistan Oslo Norway +Kabul Afghanistan Ottawa Canada +Kabul Afghanistan Paris France +Kabul Afghanistan Rome Italy +Kabul Afghanistan Stockholm Sweden +Kabul Afghanistan Tehran Iran +Kabul Afghanistan Tokyo Japan +Kabul Afghanistan Athens Greece +Kabul Afghanistan Baghdad Iraq +Kabul Afghanistan Bangkok Thailand +Kabul Afghanistan Beijing China +Kabul Afghanistan Berlin Germany +Kabul Afghanistan Bern Switzerland +Kabul Afghanistan Cairo Egypt +Kabul Afghanistan Canberra Australia +Kabul Afghanistan Hanoi Vietnam +Kabul Afghanistan Havana Cuba +Kabul Afghanistan Helsinki Finland +Kabul Afghanistan Islamabad Pakistan +London England Madrid Spain +London England Moscow Russia +London England Oslo Norway +London England Ottawa Canada +London England Paris France +London England Rome Italy +London England Stockholm Sweden +London England Tehran Iran +London England Tokyo Japan +London England Athens Greece +London England Baghdad Iraq +London England Bangkok Thailand +London England Beijing China +London England Berlin Germany +London England Bern Switzerland +London England Cairo Egypt +London England Canberra Australia +London England Hanoi Vietnam +London England Havana Cuba +London England Helsinki Finland +London England Islamabad Pakistan +London England Kabul Afghanistan +Madrid Spain Moscow Russia +Madrid Spain Oslo Norway +Madrid Spain Ottawa Canada +Madrid Spain Paris France +Madrid Spain Rome Italy +Madrid Spain Stockholm Sweden +Madrid Spain Tehran Iran +Madrid Spain Tokyo Japan +Madrid Spain Athens Greece +Madrid Spain Baghdad Iraq +Madrid Spain Bangkok Thailand +Madrid Spain Beijing China +Madrid Spain Berlin Germany +Madrid Spain Bern Switzerland +Madrid Spain Cairo Egypt +Madrid Spain Canberra Australia +Madrid Spain Hanoi Vietnam +Madrid Spain Havana Cuba +Madrid Spain Helsinki Finland +Madrid Spain Islamabad Pakistan +Madrid Spain Kabul Afghanistan +Madrid Spain London England +Moscow Russia Oslo Norway +Moscow Russia Ottawa Canada +Moscow Russia Paris France +Moscow Russia Rome Italy +Moscow Russia Stockholm Sweden +Moscow Russia Tehran Iran +Moscow Russia Tokyo Japan +Moscow Russia Athens Greece +Moscow Russia Baghdad Iraq +Moscow Russia Bangkok Thailand +Moscow Russia Beijing China +Moscow Russia Berlin Germany +Moscow Russia Bern Switzerland +Moscow Russia Cairo Egypt +Moscow Russia Canberra Australia +Moscow Russia Hanoi Vietnam +Moscow Russia Havana Cuba +Moscow Russia Helsinki Finland +Moscow Russia Islamabad Pakistan +Moscow Russia Kabul Afghanistan +Moscow Russia London England +Moscow Russia Madrid Spain +Oslo Norway Ottawa Canada +Oslo Norway Paris France +Oslo Norway Rome Italy +Oslo Norway Stockholm Sweden +Oslo Norway Tehran Iran +Oslo Norway Tokyo Japan +Oslo Norway Athens Greece +Oslo Norway Baghdad Iraq +Oslo Norway Bangkok Thailand +Oslo Norway Beijing China +Oslo Norway Berlin Germany +Oslo Norway Bern Switzerland +Oslo Norway Cairo Egypt +Oslo Norway Canberra Australia +Oslo Norway Hanoi Vietnam +Oslo Norway Havana Cuba +Oslo Norway Helsinki Finland +Oslo Norway Islamabad Pakistan +Oslo Norway Kabul Afghanistan +Oslo Norway London England +Oslo Norway Madrid Spain +Oslo Norway Moscow Russia +Ottawa Canada Paris France +Ottawa Canada Rome Italy +Ottawa Canada Stockholm Sweden +Ottawa Canada Tehran Iran +Ottawa Canada Tokyo Japan +Ottawa Canada Athens Greece +Ottawa Canada Baghdad Iraq +Ottawa Canada Bangkok Thailand +Ottawa Canada Beijing China +Ottawa Canada Berlin Germany +Ottawa Canada Bern Switzerland +Ottawa Canada Cairo Egypt +Ottawa Canada Canberra Australia +Ottawa Canada Hanoi Vietnam +Ottawa Canada Havana Cuba +Ottawa Canada Helsinki Finland +Ottawa Canada Islamabad Pakistan +Ottawa Canada Kabul Afghanistan +Ottawa Canada London England +Ottawa Canada Madrid Spain +Ottawa Canada Moscow Russia +Ottawa Canada Oslo Norway +Paris France Rome Italy +Paris France Stockholm Sweden +Paris France Tehran Iran +Paris France Tokyo Japan +Paris France Athens Greece +Paris France Baghdad Iraq +Paris France Bangkok Thailand +Paris France Beijing China +Paris France Berlin Germany +Paris France Bern Switzerland +Paris France Cairo Egypt +Paris France Canberra Australia +Paris France Hanoi Vietnam +Paris France Havana Cuba +Paris France Helsinki Finland +Paris France Islamabad Pakistan +Paris France Kabul Afghanistan +Paris France London England +Paris France Madrid Spain +Paris France Moscow Russia +Paris France Oslo Norway +Paris France Ottawa Canada +Rome Italy Stockholm Sweden +Rome Italy Tehran Iran +Rome Italy Tokyo Japan +Rome Italy Athens Greece +Rome Italy Baghdad Iraq +Rome Italy Bangkok Thailand +Rome Italy Beijing China +Rome Italy Berlin Germany +Rome Italy Bern Switzerland +Rome Italy Cairo Egypt +Rome Italy Canberra Australia +Rome Italy Hanoi Vietnam +Rome Italy Havana Cuba +Rome Italy Helsinki Finland +Rome Italy Islamabad Pakistan +Rome Italy Kabul Afghanistan +Rome Italy London England +Rome Italy Madrid Spain +Rome Italy Moscow Russia +Rome Italy Oslo Norway +Rome Italy Ottawa Canada +Rome Italy Paris France +Stockholm Sweden Tehran Iran +Stockholm Sweden Tokyo Japan +Stockholm Sweden Athens Greece +Stockholm Sweden Baghdad Iraq +Stockholm Sweden Bangkok Thailand +Stockholm Sweden Beijing China +Stockholm Sweden Berlin Germany +Stockholm Sweden Bern Switzerland +Stockholm Sweden Cairo Egypt +Stockholm Sweden Canberra Australia +Stockholm Sweden Hanoi Vietnam +Stockholm Sweden Havana Cuba +Stockholm Sweden Helsinki Finland +Stockholm Sweden Islamabad Pakistan +Stockholm Sweden Kabul Afghanistan +Stockholm Sweden London England +Stockholm Sweden Madrid Spain +Stockholm Sweden Moscow Russia +Stockholm Sweden Oslo Norway +Stockholm Sweden Ottawa Canada +Stockholm Sweden Paris France +Stockholm Sweden Rome Italy +Tehran Iran Tokyo Japan +Tehran Iran Athens Greece +Tehran Iran Baghdad Iraq +Tehran Iran Bangkok Thailand +Tehran Iran Beijing China +Tehran Iran Berlin Germany +Tehran Iran Bern Switzerland +Tehran Iran Cairo Egypt +Tehran Iran Canberra Australia +Tehran Iran Hanoi Vietnam +Tehran Iran Havana Cuba +Tehran Iran Helsinki Finland +Tehran Iran Islamabad Pakistan +Tehran Iran Kabul Afghanistan +Tehran Iran London England +Tehran Iran Madrid Spain +Tehran Iran Moscow Russia +Tehran Iran Oslo Norway +Tehran Iran Ottawa Canada +Tehran Iran Paris France +Tehran Iran Rome Italy +Tehran Iran Stockholm Sweden +Tokyo Japan Athens Greece +Tokyo Japan Baghdad Iraq +Tokyo Japan Bangkok Thailand +Tokyo Japan Beijing China +Tokyo Japan Berlin Germany +Tokyo Japan Bern Switzerland +Tokyo Japan Cairo Egypt +Tokyo Japan Canberra Australia +Tokyo Japan Hanoi Vietnam +Tokyo Japan Havana Cuba +Tokyo Japan Helsinki Finland +Tokyo Japan Islamabad Pakistan +Tokyo Japan Kabul Afghanistan +Tokyo Japan London England +Tokyo Japan Madrid Spain +Tokyo Japan Moscow Russia +Tokyo Japan Oslo Norway +Tokyo Japan Ottawa Canada +Tokyo Japan Paris France +Tokyo Japan Rome Italy +Tokyo Japan Stockholm Sweden +Tokyo Japan Tehran Iran +: capital-world +Abuja Nigeria Accra Ghana +Abuja Nigeria Algiers Algeria +Abuja Nigeria Amman Jordan +Abuja Nigeria Ankara Turkey +Abuja Nigeria Antananarivo Madagascar +Abuja Nigeria Apia Samoa +Abuja Nigeria Ashgabat Turkmenistan +Abuja Nigeria Asmara Eritrea +Abuja Nigeria Astana Kazakhstan +Abuja Nigeria Athens Greece +Abuja Nigeria Baghdad Iraq +Abuja Nigeria Baku Azerbaijan +Abuja Nigeria Bamako Mali +Abuja Nigeria Bangkok Thailand +Abuja Nigeria Banjul Gambia +Abuja Nigeria Beijing China +Abuja Nigeria Beirut Lebanon +Abuja Nigeria Belgrade Serbia +Abuja Nigeria Belmopan Belize +Abuja Nigeria Berlin Germany +Abuja Nigeria Bern Switzerland +Abuja Nigeria Bishkek Kyrgyzstan +Abuja Nigeria Bratislava Slovakia +Abuja Nigeria Brussels Belgium +Abuja Nigeria Bucharest Romania +Abuja Nigeria Budapest Hungary +Abuja Nigeria Bujumbura Burundi +Abuja Nigeria Cairo Egypt +Abuja Nigeria Canberra Australia +Abuja Nigeria Caracas Venezuela +Abuja Nigeria Chisinau Moldova +Abuja Nigeria Conakry Guinea +Abuja Nigeria Copenhagen Denmark +Abuja Nigeria Dakar Senegal +Abuja Nigeria Damascus Syria +Abuja Nigeria Dhaka Bangladesh +Abuja Nigeria Doha Qatar +Abuja Nigeria Dublin Ireland +Abuja Nigeria Dushanbe Tajikistan +Accra Ghana Algiers Algeria +Accra Ghana Amman Jordan +Accra Ghana Ankara Turkey +Accra Ghana Antananarivo Madagascar +Accra Ghana Apia Samoa +Accra Ghana Ashgabat Turkmenistan +Accra Ghana Asmara Eritrea +Accra Ghana Astana Kazakhstan +Accra Ghana Athens Greece +Accra Ghana Baghdad Iraq +Accra Ghana Baku Azerbaijan +Accra Ghana Bamako Mali +Accra Ghana Bangkok Thailand +Accra Ghana Banjul Gambia +Accra Ghana Beijing China +Accra Ghana Beirut Lebanon +Accra Ghana Belgrade Serbia +Accra Ghana Belmopan Belize +Accra Ghana Berlin Germany +Accra Ghana Bern Switzerland +Accra Ghana Bishkek Kyrgyzstan +Accra Ghana Bratislava Slovakia +Accra Ghana Brussels Belgium +Accra Ghana Bucharest Romania +Accra Ghana Budapest Hungary +Accra Ghana Bujumbura Burundi +Accra Ghana Cairo Egypt +Accra Ghana Canberra Australia +Accra Ghana Caracas Venezuela +Accra Ghana Chisinau Moldova +Accra Ghana Conakry Guinea +Accra Ghana Copenhagen Denmark +Accra Ghana Dakar Senegal +Accra Ghana Damascus Syria +Accra Ghana Dhaka Bangladesh +Accra Ghana Doha Qatar +Accra Ghana Dublin Ireland +Accra Ghana Dushanbe Tajikistan +Accra Ghana Funafuti Tuvalu +Algiers Algeria Amman Jordan +Algiers Algeria Ankara Turkey +Algiers Algeria Antananarivo Madagascar +Algiers Algeria Apia Samoa +Algiers Algeria Ashgabat Turkmenistan +Algiers Algeria Asmara Eritrea +Algiers Algeria Astana Kazakhstan +Algiers Algeria Athens Greece +Algiers Algeria Baghdad Iraq +Algiers Algeria Baku Azerbaijan +Algiers Algeria Bamako Mali +Algiers Algeria Bangkok Thailand +Algiers Algeria Banjul Gambia +Algiers Algeria Beijing China +Algiers Algeria Beirut Lebanon +Algiers Algeria Belgrade Serbia +Algiers Algeria Belmopan Belize +Algiers Algeria Berlin Germany +Algiers Algeria Bern Switzerland +Algiers Algeria Bishkek Kyrgyzstan +Algiers Algeria Bratislava Slovakia +Algiers Algeria Brussels Belgium +Algiers Algeria Bucharest Romania +Algiers Algeria Budapest Hungary +Algiers Algeria Bujumbura Burundi +Algiers Algeria Cairo Egypt +Algiers Algeria Canberra Australia +Algiers Algeria Caracas Venezuela +Algiers Algeria Chisinau Moldova +Algiers Algeria Conakry Guinea +Algiers Algeria Copenhagen Denmark +Algiers Algeria Dakar Senegal +Algiers Algeria Damascus Syria +Algiers Algeria Dhaka Bangladesh +Algiers Algeria Doha Qatar +Algiers Algeria Dublin Ireland +Algiers Algeria Dushanbe Tajikistan +Algiers Algeria Funafuti Tuvalu +Algiers Algeria Gaborone Botswana +Amman Jordan Ankara Turkey +Amman Jordan Antananarivo Madagascar +Amman Jordan Apia Samoa +Amman Jordan Ashgabat Turkmenistan +Amman Jordan Asmara Eritrea +Amman Jordan Astana Kazakhstan +Amman Jordan Athens Greece +Amman Jordan Baghdad Iraq +Amman Jordan Baku Azerbaijan +Amman Jordan Bamako Mali +Amman Jordan Bangkok Thailand +Amman Jordan Banjul Gambia +Amman Jordan Beijing China +Amman Jordan Beirut Lebanon +Amman Jordan Belgrade Serbia +Amman Jordan Belmopan Belize +Amman Jordan Berlin Germany +Amman Jordan Bern Switzerland +Amman Jordan Bishkek Kyrgyzstan +Amman Jordan Bratislava Slovakia +Amman Jordan Brussels Belgium +Amman Jordan Bucharest Romania +Amman Jordan Budapest Hungary +Amman Jordan Bujumbura Burundi +Amman Jordan Cairo Egypt +Amman Jordan Canberra Australia +Amman Jordan Caracas Venezuela +Amman Jordan Chisinau Moldova +Amman Jordan Conakry Guinea +Amman Jordan Copenhagen Denmark +Amman Jordan Dakar Senegal +Amman Jordan Damascus Syria +Amman Jordan Dhaka Bangladesh +Amman Jordan Doha Qatar +Amman Jordan Dublin Ireland +Amman Jordan Dushanbe Tajikistan +Amman Jordan Funafuti Tuvalu +Amman Jordan Gaborone Botswana +Amman Jordan Georgetown Guyana +Ankara Turkey Antananarivo Madagascar +Ankara Turkey Apia Samoa +Ankara Turkey Ashgabat Turkmenistan +Ankara Turkey Asmara Eritrea +Ankara Turkey Astana Kazakhstan +Ankara Turkey Athens Greece +Ankara Turkey Baghdad Iraq +Ankara Turkey Baku Azerbaijan +Ankara Turkey Bamako Mali +Ankara Turkey Bangkok Thailand +Ankara Turkey Banjul Gambia +Ankara Turkey Beijing China +Ankara Turkey Beirut Lebanon +Ankara Turkey Belgrade Serbia +Ankara Turkey Belmopan Belize +Ankara Turkey Berlin Germany +Ankara Turkey Bern Switzerland +Ankara Turkey Bishkek Kyrgyzstan +Ankara Turkey Bratislava Slovakia +Ankara Turkey Brussels Belgium +Ankara Turkey Bucharest Romania +Ankara Turkey Budapest Hungary +Ankara Turkey Bujumbura Burundi +Ankara Turkey Cairo Egypt +Ankara Turkey Canberra Australia +Ankara Turkey Caracas Venezuela +Ankara Turkey Chisinau Moldova +Ankara Turkey Conakry Guinea +Ankara Turkey Copenhagen Denmark +Ankara Turkey Dakar Senegal +Ankara Turkey Damascus Syria +Ankara Turkey Dhaka Bangladesh +Ankara Turkey Doha Qatar +Ankara Turkey Dublin Ireland +Ankara Turkey Dushanbe Tajikistan +Ankara Turkey Funafuti Tuvalu +Ankara Turkey Gaborone Botswana +Ankara Turkey Georgetown Guyana +Ankara Turkey Hanoi Vietnam +Antananarivo Madagascar Apia Samoa +Antananarivo Madagascar Ashgabat Turkmenistan +Antananarivo Madagascar Asmara Eritrea +Antananarivo Madagascar Astana Kazakhstan +Antananarivo Madagascar Athens Greece +Antananarivo Madagascar Baghdad Iraq +Antananarivo Madagascar Baku Azerbaijan +Antananarivo Madagascar Bamako Mali +Antananarivo Madagascar Bangkok Thailand +Antananarivo Madagascar Banjul Gambia +Antananarivo Madagascar Beijing China +Antananarivo Madagascar Beirut Lebanon +Antananarivo Madagascar Belgrade Serbia +Antananarivo Madagascar Belmopan Belize +Antananarivo Madagascar Berlin Germany +Antananarivo Madagascar Bern Switzerland +Antananarivo Madagascar Bishkek Kyrgyzstan +Antananarivo Madagascar Bratislava Slovakia +Antananarivo Madagascar Brussels Belgium +Antananarivo Madagascar Bucharest Romania +Antananarivo Madagascar Budapest Hungary +Antananarivo Madagascar Bujumbura Burundi +Antananarivo Madagascar Cairo Egypt +Antananarivo Madagascar Canberra Australia +Antananarivo Madagascar Caracas Venezuela +Antananarivo Madagascar Chisinau Moldova +Antananarivo Madagascar Conakry Guinea +Antananarivo Madagascar Copenhagen Denmark +Antananarivo Madagascar Dakar Senegal +Antananarivo Madagascar Damascus Syria +Antananarivo Madagascar Dhaka Bangladesh +Antananarivo Madagascar Doha Qatar +Antananarivo Madagascar Dublin Ireland +Antananarivo Madagascar Dushanbe Tajikistan +Antananarivo Madagascar Funafuti Tuvalu +Antananarivo Madagascar Gaborone Botswana +Antananarivo Madagascar Georgetown Guyana +Antananarivo Madagascar Hanoi Vietnam +Antananarivo Madagascar Harare Zimbabwe +Apia Samoa Ashgabat Turkmenistan +Apia Samoa Asmara Eritrea +Apia Samoa Astana Kazakhstan +Apia Samoa Athens Greece +Apia Samoa Baghdad Iraq +Apia Samoa Baku Azerbaijan +Apia Samoa Bamako Mali +Apia Samoa Bangkok Thailand +Apia Samoa Banjul Gambia +Apia Samoa Beijing China +Apia Samoa Beirut Lebanon +Apia Samoa Belgrade Serbia +Apia Samoa Belmopan Belize +Apia Samoa Berlin Germany +Apia Samoa Bern Switzerland +Apia Samoa Bishkek Kyrgyzstan +Apia Samoa Bratislava Slovakia +Apia Samoa Brussels Belgium +Apia Samoa Bucharest Romania +Apia Samoa Budapest Hungary +Apia Samoa Bujumbura Burundi +Apia Samoa Cairo Egypt +Apia Samoa Canberra Australia +Apia Samoa Caracas Venezuela +Apia Samoa Chisinau Moldova +Apia Samoa Conakry Guinea +Apia Samoa Copenhagen Denmark +Apia Samoa Dakar Senegal +Apia Samoa Damascus Syria +Apia Samoa Dhaka Bangladesh +Apia Samoa Doha Qatar +Apia Samoa Dublin Ireland +Apia Samoa Dushanbe Tajikistan +Apia Samoa Funafuti Tuvalu +Apia Samoa Gaborone Botswana +Apia Samoa Georgetown Guyana +Apia Samoa Hanoi Vietnam +Apia Samoa Harare Zimbabwe +Apia Samoa Havana Cuba +Ashgabat Turkmenistan Asmara Eritrea +Ashgabat Turkmenistan Astana Kazakhstan +Ashgabat Turkmenistan Athens Greece +Ashgabat Turkmenistan Baghdad Iraq +Ashgabat Turkmenistan Baku Azerbaijan +Ashgabat Turkmenistan Bamako Mali +Ashgabat Turkmenistan Bangkok Thailand +Ashgabat Turkmenistan Banjul Gambia +Ashgabat Turkmenistan Beijing China +Ashgabat Turkmenistan Beirut Lebanon +Ashgabat Turkmenistan Belgrade Serbia +Ashgabat Turkmenistan Belmopan Belize +Ashgabat Turkmenistan Berlin Germany +Ashgabat Turkmenistan Bern Switzerland +Ashgabat Turkmenistan Bishkek Kyrgyzstan +Ashgabat Turkmenistan Bratislava Slovakia +Ashgabat Turkmenistan Brussels Belgium +Ashgabat Turkmenistan Bucharest Romania +Ashgabat Turkmenistan Budapest Hungary +Ashgabat Turkmenistan Bujumbura Burundi +Ashgabat Turkmenistan Cairo Egypt +Ashgabat Turkmenistan Canberra Australia +Ashgabat Turkmenistan Caracas Venezuela +Ashgabat Turkmenistan Chisinau Moldova +Ashgabat Turkmenistan Conakry Guinea +Ashgabat Turkmenistan Copenhagen Denmark +Ashgabat Turkmenistan Dakar Senegal +Ashgabat Turkmenistan Damascus Syria +Ashgabat Turkmenistan Dhaka Bangladesh +Ashgabat Turkmenistan Doha Qatar +Ashgabat Turkmenistan Dublin Ireland +Ashgabat Turkmenistan Dushanbe Tajikistan +Ashgabat Turkmenistan Funafuti Tuvalu +Ashgabat Turkmenistan Gaborone Botswana +Ashgabat Turkmenistan Georgetown Guyana +Ashgabat Turkmenistan Hanoi Vietnam +Ashgabat Turkmenistan Harare Zimbabwe +Ashgabat Turkmenistan Havana Cuba +Ashgabat Turkmenistan Helsinki Finland +Asmara Eritrea Astana Kazakhstan +Asmara Eritrea Athens Greece +Asmara Eritrea Baghdad Iraq +Asmara Eritrea Baku Azerbaijan +Asmara Eritrea Bamako Mali +Asmara Eritrea Bangkok Thailand +Asmara Eritrea Banjul Gambia +Asmara Eritrea Beijing China +Asmara Eritrea Beirut Lebanon +Asmara Eritrea Belgrade Serbia +Asmara Eritrea Belmopan Belize +Asmara Eritrea Berlin Germany +Asmara Eritrea Bern Switzerland +Asmara Eritrea Bishkek Kyrgyzstan +Asmara Eritrea Bratislava Slovakia +Asmara Eritrea Brussels Belgium +Asmara Eritrea Bucharest Romania +Asmara Eritrea Budapest Hungary +Asmara Eritrea Bujumbura Burundi +Asmara Eritrea Cairo Egypt +Asmara Eritrea Canberra Australia +Asmara Eritrea Caracas Venezuela +Asmara Eritrea Chisinau Moldova +Asmara Eritrea Conakry Guinea +Asmara Eritrea Copenhagen Denmark +Asmara Eritrea Dakar Senegal +Asmara Eritrea Damascus Syria +Asmara Eritrea Dhaka Bangladesh +Asmara Eritrea Doha Qatar +Asmara Eritrea Dublin Ireland +Asmara Eritrea Dushanbe Tajikistan +Asmara Eritrea Funafuti Tuvalu +Asmara Eritrea Gaborone Botswana +Asmara Eritrea Georgetown Guyana +Asmara Eritrea Hanoi Vietnam +Asmara Eritrea Harare Zimbabwe +Asmara Eritrea Havana Cuba +Asmara Eritrea Helsinki Finland +Asmara Eritrea Islamabad Pakistan +Astana Kazakhstan Athens Greece +Astana Kazakhstan Baghdad Iraq +Astana Kazakhstan Baku Azerbaijan +Astana Kazakhstan Bamako Mali +Astana Kazakhstan Bangkok Thailand +Astana Kazakhstan Banjul Gambia +Astana Kazakhstan Beijing China +Astana Kazakhstan Beirut Lebanon +Astana Kazakhstan Belgrade Serbia +Astana Kazakhstan Belmopan Belize +Astana Kazakhstan Berlin Germany +Astana Kazakhstan Bern Switzerland +Astana Kazakhstan Bishkek Kyrgyzstan +Astana Kazakhstan Bratislava Slovakia +Astana Kazakhstan Brussels Belgium +Astana Kazakhstan Bucharest Romania +Astana Kazakhstan Budapest Hungary +Astana Kazakhstan Bujumbura Burundi +Astana Kazakhstan Cairo Egypt +Astana Kazakhstan Canberra Australia +Astana Kazakhstan Caracas Venezuela +Astana Kazakhstan Chisinau Moldova +Astana Kazakhstan Conakry Guinea +Astana Kazakhstan Copenhagen Denmark +Astana Kazakhstan Dakar Senegal +Astana Kazakhstan Damascus Syria +Astana Kazakhstan Dhaka Bangladesh +Astana Kazakhstan Doha Qatar +Astana Kazakhstan Dublin Ireland +Astana Kazakhstan Dushanbe Tajikistan +Astana Kazakhstan Funafuti Tuvalu +Astana Kazakhstan Gaborone Botswana +Astana Kazakhstan Georgetown Guyana +Astana Kazakhstan Hanoi Vietnam +Astana Kazakhstan Harare Zimbabwe +Astana Kazakhstan Havana Cuba +Astana Kazakhstan Helsinki Finland +Astana Kazakhstan Islamabad Pakistan +Astana Kazakhstan Jakarta Indonesia +Athens Greece Baghdad Iraq +Athens Greece Baku Azerbaijan +Athens Greece Bamako Mali +Athens Greece Bangkok Thailand +Athens Greece Banjul Gambia +Athens Greece Beijing China +Athens Greece Beirut Lebanon +Athens Greece Belgrade Serbia +Athens Greece Belmopan Belize +Athens Greece Berlin Germany +Athens Greece Bern Switzerland +Athens Greece Bishkek Kyrgyzstan +Athens Greece Bratislava Slovakia +Athens Greece Brussels Belgium +Athens Greece Bucharest Romania +Athens Greece Budapest Hungary +Athens Greece Bujumbura Burundi +Athens Greece Cairo Egypt +Athens Greece Canberra Australia +Athens Greece Caracas Venezuela +Athens Greece Chisinau Moldova +Athens Greece Conakry Guinea +Athens Greece Copenhagen Denmark +Athens Greece Dakar Senegal +Athens Greece Damascus Syria +Athens Greece Dhaka Bangladesh +Athens Greece Doha Qatar +Athens Greece Dublin Ireland +Athens Greece Dushanbe Tajikistan +Athens Greece Funafuti Tuvalu +Athens Greece Gaborone Botswana +Athens Greece Georgetown Guyana +Athens Greece Hanoi Vietnam +Athens Greece Harare Zimbabwe +Athens Greece Havana Cuba +Athens Greece Helsinki Finland +Athens Greece Islamabad Pakistan +Athens Greece Jakarta Indonesia +Athens Greece Kabul Afghanistan +Baghdad Iraq Baku Azerbaijan +Baghdad Iraq Bamako Mali +Baghdad Iraq Bangkok Thailand +Baghdad Iraq Banjul Gambia +Baghdad Iraq Beijing China +Baghdad Iraq Beirut Lebanon +Baghdad Iraq Belgrade Serbia +Baghdad Iraq Belmopan Belize +Baghdad Iraq Berlin Germany +Baghdad Iraq Bern Switzerland +Baghdad Iraq Bishkek Kyrgyzstan +Baghdad Iraq Bratislava Slovakia +Baghdad Iraq Brussels Belgium +Baghdad Iraq Bucharest Romania +Baghdad Iraq Budapest Hungary +Baghdad Iraq Bujumbura Burundi +Baghdad Iraq Cairo Egypt +Baghdad Iraq Canberra Australia +Baghdad Iraq Caracas Venezuela +Baghdad Iraq Chisinau Moldova +Baghdad Iraq Conakry Guinea +Baghdad Iraq Copenhagen Denmark +Baghdad Iraq Dakar Senegal +Baghdad Iraq Damascus Syria +Baghdad Iraq Dhaka Bangladesh +Baghdad Iraq Doha Qatar +Baghdad Iraq Dublin Ireland +Baghdad Iraq Dushanbe Tajikistan +Baghdad Iraq Funafuti Tuvalu +Baghdad Iraq Gaborone Botswana +Baghdad Iraq Georgetown Guyana +Baghdad Iraq Hanoi Vietnam +Baghdad Iraq Harare Zimbabwe +Baghdad Iraq Havana Cuba +Baghdad Iraq Helsinki Finland +Baghdad Iraq Islamabad Pakistan +Baghdad Iraq Jakarta Indonesia +Baghdad Iraq Kabul Afghanistan +Baghdad Iraq Kampala Uganda +Baku Azerbaijan Bamako Mali +Baku Azerbaijan Bangkok Thailand +Baku Azerbaijan Banjul Gambia +Baku Azerbaijan Beijing China +Baku Azerbaijan Beirut Lebanon +Baku Azerbaijan Belgrade Serbia +Baku Azerbaijan Belmopan Belize +Baku Azerbaijan Berlin Germany +Baku Azerbaijan Bern Switzerland +Baku Azerbaijan Bishkek Kyrgyzstan +Baku Azerbaijan Bratislava Slovakia +Baku Azerbaijan Brussels Belgium +Baku Azerbaijan Bucharest Romania +Baku Azerbaijan Budapest Hungary +Baku Azerbaijan Bujumbura Burundi +Baku Azerbaijan Cairo Egypt +Baku Azerbaijan Canberra Australia +Baku Azerbaijan Caracas Venezuela +Baku Azerbaijan Chisinau Moldova +Baku Azerbaijan Conakry Guinea +Baku Azerbaijan Copenhagen Denmark +Baku Azerbaijan Dakar Senegal +Baku Azerbaijan Damascus Syria +Baku Azerbaijan Dhaka Bangladesh +Baku Azerbaijan Doha Qatar +Baku Azerbaijan Dublin Ireland +Baku Azerbaijan Dushanbe Tajikistan +Baku Azerbaijan Funafuti Tuvalu +Baku Azerbaijan Gaborone Botswana +Baku Azerbaijan Georgetown Guyana +Baku Azerbaijan Hanoi Vietnam +Baku Azerbaijan Harare Zimbabwe +Baku Azerbaijan Havana Cuba +Baku Azerbaijan Helsinki Finland +Baku Azerbaijan Islamabad Pakistan +Baku Azerbaijan Jakarta Indonesia +Baku Azerbaijan Kabul Afghanistan +Baku Azerbaijan Kampala Uganda +Baku Azerbaijan Kathmandu Nepal +Bamako Mali Bangkok Thailand +Bamako Mali Banjul Gambia +Bamako Mali Beijing China +Bamako Mali Beirut Lebanon +Bamako Mali Belgrade Serbia +Bamako Mali Belmopan Belize +Bamako Mali Berlin Germany +Bamako Mali Bern Switzerland +Bamako Mali Bishkek Kyrgyzstan +Bamako Mali Bratislava Slovakia +Bamako Mali Brussels Belgium +Bamako Mali Bucharest Romania +Bamako Mali Budapest Hungary +Bamako Mali Bujumbura Burundi +Bamako Mali Cairo Egypt +Bamako Mali Canberra Australia +Bamako Mali Caracas Venezuela +Bamako Mali Chisinau Moldova +Bamako Mali Conakry Guinea +Bamako Mali Copenhagen Denmark +Bamako Mali Dakar Senegal +Bamako Mali Damascus Syria +Bamako Mali Dhaka Bangladesh +Bamako Mali Doha Qatar +Bamako Mali Dublin Ireland +Bamako Mali Dushanbe Tajikistan +Bamako Mali Funafuti Tuvalu +Bamako Mali Gaborone Botswana +Bamako Mali Georgetown Guyana +Bamako Mali Hanoi Vietnam +Bamako Mali Harare Zimbabwe +Bamako Mali Havana Cuba +Bamako Mali Helsinki Finland +Bamako Mali Islamabad Pakistan +Bamako Mali Jakarta Indonesia +Bamako Mali Kabul Afghanistan +Bamako Mali Kampala Uganda +Bamako Mali Kathmandu Nepal +Bamako Mali Khartoum Sudan +Bangkok Thailand Banjul Gambia +Bangkok Thailand Beijing China +Bangkok Thailand Beirut Lebanon +Bangkok Thailand Belgrade Serbia +Bangkok Thailand Belmopan Belize +Bangkok Thailand Berlin Germany +Bangkok Thailand Bern Switzerland +Bangkok Thailand Bishkek Kyrgyzstan +Bangkok Thailand Bratislava Slovakia +Bangkok Thailand Brussels Belgium +Bangkok Thailand Bucharest Romania +Bangkok Thailand Budapest Hungary +Bangkok Thailand Bujumbura Burundi +Bangkok Thailand Cairo Egypt +Bangkok Thailand Canberra Australia +Bangkok Thailand Caracas Venezuela +Bangkok Thailand Chisinau Moldova +Bangkok Thailand Conakry Guinea +Bangkok Thailand Copenhagen Denmark +Bangkok Thailand Dakar Senegal +Bangkok Thailand Damascus Syria +Bangkok Thailand Dhaka Bangladesh +Bangkok Thailand Doha Qatar +Bangkok Thailand Dublin Ireland +Bangkok Thailand Dushanbe Tajikistan +Bangkok Thailand Funafuti Tuvalu +Bangkok Thailand Gaborone Botswana +Bangkok Thailand Georgetown Guyana +Bangkok Thailand Hanoi Vietnam +Bangkok Thailand Harare Zimbabwe +Bangkok Thailand Havana Cuba +Bangkok Thailand Helsinki Finland +Bangkok Thailand Islamabad Pakistan +Bangkok Thailand Jakarta Indonesia +Bangkok Thailand Kabul Afghanistan +Bangkok Thailand Kampala Uganda +Bangkok Thailand Kathmandu Nepal +Bangkok Thailand Khartoum Sudan +Bangkok Thailand Kiev Ukraine +Banjul Gambia Beijing China +Banjul Gambia Beirut Lebanon +Banjul Gambia Belgrade Serbia +Banjul Gambia Belmopan Belize +Banjul Gambia Berlin Germany +Banjul Gambia Bern Switzerland +Banjul Gambia Bishkek Kyrgyzstan +Banjul Gambia Bratislava Slovakia +Banjul Gambia Brussels Belgium +Banjul Gambia Bucharest Romania +Banjul Gambia Budapest Hungary +Banjul Gambia Bujumbura Burundi +Banjul Gambia Cairo Egypt +Banjul Gambia Canberra Australia +Banjul Gambia Caracas Venezuela +Banjul Gambia Chisinau Moldova +Banjul Gambia Conakry Guinea +Banjul Gambia Copenhagen Denmark +Banjul Gambia Dakar Senegal +Banjul Gambia Damascus Syria +Banjul Gambia Dhaka Bangladesh +Banjul Gambia Doha Qatar +Banjul Gambia Dublin Ireland +Banjul Gambia Dushanbe Tajikistan +Banjul Gambia Funafuti Tuvalu +Banjul Gambia Gaborone Botswana +Banjul Gambia Georgetown Guyana +Banjul Gambia Hanoi Vietnam +Banjul Gambia Harare Zimbabwe +Banjul Gambia Havana Cuba +Banjul Gambia Helsinki Finland +Banjul Gambia Islamabad Pakistan +Banjul Gambia Jakarta Indonesia +Banjul Gambia Kabul Afghanistan +Banjul Gambia Kampala Uganda +Banjul Gambia Kathmandu Nepal +Banjul Gambia Khartoum Sudan +Banjul Gambia Kiev Ukraine +Banjul Gambia Kigali Rwanda +Beijing China Beirut Lebanon +Beijing China Belgrade Serbia +Beijing China Belmopan Belize +Beijing China Berlin Germany +Beijing China Bern Switzerland +Beijing China Bishkek Kyrgyzstan +Beijing China Bratislava Slovakia +Beijing China Brussels Belgium +Beijing China Bucharest Romania +Beijing China Budapest Hungary +Beijing China Bujumbura Burundi +Beijing China Cairo Egypt +Beijing China Canberra Australia +Beijing China Caracas Venezuela +Beijing China Chisinau Moldova +Beijing China Conakry Guinea +Beijing China Copenhagen Denmark +Beijing China Dakar Senegal +Beijing China Damascus Syria +Beijing China Dhaka Bangladesh +Beijing China Doha Qatar +Beijing China Dublin Ireland +Beijing China Dushanbe Tajikistan +Beijing China Funafuti Tuvalu +Beijing China Gaborone Botswana +Beijing China Georgetown Guyana +Beijing China Hanoi Vietnam +Beijing China Harare Zimbabwe +Beijing China Havana Cuba +Beijing China Helsinki Finland +Beijing China Islamabad Pakistan +Beijing China Jakarta Indonesia +Beijing China Kabul Afghanistan +Beijing China Kampala Uganda +Beijing China Kathmandu Nepal +Beijing China Khartoum Sudan +Beijing China Kiev Ukraine +Beijing China Kigali Rwanda +Beijing China Kingston Jamaica +Beirut Lebanon Belgrade Serbia +Beirut Lebanon Belmopan Belize +Beirut Lebanon Berlin Germany +Beirut Lebanon Bern Switzerland +Beirut Lebanon Bishkek Kyrgyzstan +Beirut Lebanon Bratislava Slovakia +Beirut Lebanon Brussels Belgium +Beirut Lebanon Bucharest Romania +Beirut Lebanon Budapest Hungary +Beirut Lebanon Bujumbura Burundi +Beirut Lebanon Cairo Egypt +Beirut Lebanon Canberra Australia +Beirut Lebanon Caracas Venezuela +Beirut Lebanon Chisinau Moldova +Beirut Lebanon Conakry Guinea +Beirut Lebanon Copenhagen Denmark +Beirut Lebanon Dakar Senegal +Beirut Lebanon Damascus Syria +Beirut Lebanon Dhaka Bangladesh +Beirut Lebanon Doha Qatar +Beirut Lebanon Dublin Ireland +Beirut Lebanon Dushanbe Tajikistan +Beirut Lebanon Funafuti Tuvalu +Beirut Lebanon Gaborone Botswana +Beirut Lebanon Georgetown Guyana +Beirut Lebanon Hanoi Vietnam +Beirut Lebanon Harare Zimbabwe +Beirut Lebanon Havana Cuba +Beirut Lebanon Helsinki Finland +Beirut Lebanon Islamabad Pakistan +Beirut Lebanon Jakarta Indonesia +Beirut Lebanon Kabul Afghanistan +Beirut Lebanon Kampala Uganda +Beirut Lebanon Kathmandu Nepal +Beirut Lebanon Khartoum Sudan +Beirut Lebanon Kiev Ukraine +Beirut Lebanon Kigali Rwanda +Beirut Lebanon Kingston Jamaica +Beirut Lebanon Libreville Gabon +Belgrade Serbia Belmopan Belize +Belgrade Serbia Berlin Germany +Belgrade Serbia Bern Switzerland +Belgrade Serbia Bishkek Kyrgyzstan +Belgrade Serbia Bratislava Slovakia +Belgrade Serbia Brussels Belgium +Belgrade Serbia Bucharest Romania +Belgrade Serbia Budapest Hungary +Belgrade Serbia Bujumbura Burundi +Belgrade Serbia Cairo Egypt +Belgrade Serbia Canberra Australia +Belgrade Serbia Caracas Venezuela +Belgrade Serbia Chisinau Moldova +Belgrade Serbia Conakry Guinea +Belgrade Serbia Copenhagen Denmark +Belgrade Serbia Dakar Senegal +Belgrade Serbia Damascus Syria +Belgrade Serbia Dhaka Bangladesh +Belgrade Serbia Doha Qatar +Belgrade Serbia Dublin Ireland +Belgrade Serbia Dushanbe Tajikistan +Belgrade Serbia Funafuti Tuvalu +Belgrade Serbia Gaborone Botswana +Belgrade Serbia Georgetown Guyana +Belgrade Serbia Hanoi Vietnam +Belgrade Serbia Harare Zimbabwe +Belgrade Serbia Havana Cuba +Belgrade Serbia Helsinki Finland +Belgrade Serbia Islamabad Pakistan +Belgrade Serbia Jakarta Indonesia +Belgrade Serbia Kabul Afghanistan +Belgrade Serbia Kampala Uganda +Belgrade Serbia Kathmandu Nepal +Belgrade Serbia Khartoum Sudan +Belgrade Serbia Kiev Ukraine +Belgrade Serbia Kigali Rwanda +Belgrade Serbia Kingston Jamaica +Belgrade Serbia Libreville Gabon +Belgrade Serbia Lilongwe Malawi +Belmopan Belize Berlin Germany +Belmopan Belize Bern Switzerland +Belmopan Belize Bishkek Kyrgyzstan +Belmopan Belize Bratislava Slovakia +Belmopan Belize Brussels Belgium +Belmopan Belize Bucharest Romania +Belmopan Belize Budapest Hungary +Belmopan Belize Bujumbura Burundi +Belmopan Belize Cairo Egypt +Belmopan Belize Canberra Australia +Belmopan Belize Caracas Venezuela +Belmopan Belize Chisinau Moldova +Belmopan Belize Conakry Guinea +Belmopan Belize Copenhagen Denmark +Belmopan Belize Dakar Senegal +Belmopan Belize Damascus Syria +Belmopan Belize Dhaka Bangladesh +Belmopan Belize Doha Qatar +Belmopan Belize Dublin Ireland +Belmopan Belize Dushanbe Tajikistan +Belmopan Belize Funafuti Tuvalu +Belmopan Belize Gaborone Botswana +Belmopan Belize Georgetown Guyana +Belmopan Belize Hanoi Vietnam +Belmopan Belize Harare Zimbabwe +Belmopan Belize Havana Cuba +Belmopan Belize Helsinki Finland +Belmopan Belize Islamabad Pakistan +Belmopan Belize Jakarta Indonesia +Belmopan Belize Kabul Afghanistan +Belmopan Belize Kampala Uganda +Belmopan Belize Kathmandu Nepal +Belmopan Belize Khartoum Sudan +Belmopan Belize Kiev Ukraine +Belmopan Belize Kigali Rwanda +Belmopan Belize Kingston Jamaica +Belmopan Belize Libreville Gabon +Belmopan Belize Lilongwe Malawi +Belmopan Belize Lima Peru +Berlin Germany Bern Switzerland +Berlin Germany Bishkek Kyrgyzstan +Berlin Germany Bratislava Slovakia +Berlin Germany Brussels Belgium +Berlin Germany Bucharest Romania +Berlin Germany Budapest Hungary +Berlin Germany Bujumbura Burundi +Berlin Germany Cairo Egypt +Berlin Germany Canberra Australia +Berlin Germany Caracas Venezuela +Berlin Germany Chisinau Moldova +Berlin Germany Conakry Guinea +Berlin Germany Copenhagen Denmark +Berlin Germany Dakar Senegal +Berlin Germany Damascus Syria +Berlin Germany Dhaka Bangladesh +Berlin Germany Doha Qatar +Berlin Germany Dublin Ireland +Berlin Germany Dushanbe Tajikistan +Berlin Germany Funafuti Tuvalu +Berlin Germany Gaborone Botswana +Berlin Germany Georgetown Guyana +Berlin Germany Hanoi Vietnam +Berlin Germany Harare Zimbabwe +Berlin Germany Havana Cuba +Berlin Germany Helsinki Finland +Berlin Germany Islamabad Pakistan +Berlin Germany Jakarta Indonesia +Berlin Germany Kabul Afghanistan +Berlin Germany Kampala Uganda +Berlin Germany Kathmandu Nepal +Berlin Germany Khartoum Sudan +Berlin Germany Kiev Ukraine +Berlin Germany Kigali Rwanda +Berlin Germany Kingston Jamaica +Berlin Germany Libreville Gabon +Berlin Germany Lilongwe Malawi +Berlin Germany Lima Peru +Berlin Germany Lisbon Portugal +Bern Switzerland Bishkek Kyrgyzstan +Bern Switzerland Bratislava Slovakia +Bern Switzerland Brussels Belgium +Bern Switzerland Bucharest Romania +Bern Switzerland Budapest Hungary +Bern Switzerland Bujumbura Burundi +Bern Switzerland Cairo Egypt +Bern Switzerland Canberra Australia +Bern Switzerland Caracas Venezuela +Bern Switzerland Chisinau Moldova +Bern Switzerland Conakry Guinea +Bern Switzerland Copenhagen Denmark +Bern Switzerland Dakar Senegal +Bern Switzerland Damascus Syria +Bern Switzerland Dhaka Bangladesh +Bern Switzerland Doha Qatar +Bern Switzerland Dublin Ireland +Bern Switzerland Dushanbe Tajikistan +Bern Switzerland Funafuti Tuvalu +Bern Switzerland Gaborone Botswana +Bern Switzerland Georgetown Guyana +Bern Switzerland Hanoi Vietnam +Bern Switzerland Harare Zimbabwe +Bern Switzerland Havana Cuba +Bern Switzerland Helsinki Finland +Bern Switzerland Islamabad Pakistan +Bern Switzerland Jakarta Indonesia +Bern Switzerland Kabul Afghanistan +Bern Switzerland Kampala Uganda +Bern Switzerland Kathmandu Nepal +Bern Switzerland Khartoum Sudan +Bern Switzerland Kiev Ukraine +Bern Switzerland Kigali Rwanda +Bern Switzerland Kingston Jamaica +Bern Switzerland Libreville Gabon +Bern Switzerland Lilongwe Malawi +Bern Switzerland Lima Peru +Bern Switzerland Lisbon Portugal +Bern Switzerland Ljubljana Slovenia +Bishkek Kyrgyzstan Bratislava Slovakia +Bishkek Kyrgyzstan Brussels Belgium +Bishkek Kyrgyzstan Bucharest Romania +Bishkek Kyrgyzstan Budapest Hungary +Bishkek Kyrgyzstan Bujumbura Burundi +Bishkek Kyrgyzstan Cairo Egypt +Bishkek Kyrgyzstan Canberra Australia +Bishkek Kyrgyzstan Caracas Venezuela +Bishkek Kyrgyzstan Chisinau Moldova +Bishkek Kyrgyzstan Conakry Guinea +Bishkek Kyrgyzstan Copenhagen Denmark +Bishkek Kyrgyzstan Dakar Senegal +Bishkek Kyrgyzstan Damascus Syria +Bishkek Kyrgyzstan Dhaka Bangladesh +Bishkek Kyrgyzstan Doha Qatar +Bishkek Kyrgyzstan Dublin Ireland +Bishkek Kyrgyzstan Dushanbe Tajikistan +Bishkek Kyrgyzstan Funafuti Tuvalu +Bishkek Kyrgyzstan Gaborone Botswana +Bishkek Kyrgyzstan Georgetown Guyana +Bishkek Kyrgyzstan Hanoi Vietnam +Bishkek Kyrgyzstan Harare Zimbabwe +Bishkek Kyrgyzstan Havana Cuba +Bishkek Kyrgyzstan Helsinki Finland +Bishkek Kyrgyzstan Islamabad Pakistan +Bishkek Kyrgyzstan Jakarta Indonesia +Bishkek Kyrgyzstan Kabul Afghanistan +Bishkek Kyrgyzstan Kampala Uganda +Bishkek Kyrgyzstan Kathmandu Nepal +Bishkek Kyrgyzstan Khartoum Sudan +Bishkek Kyrgyzstan Kiev Ukraine +Bishkek Kyrgyzstan Kigali Rwanda +Bishkek Kyrgyzstan Kingston Jamaica +Bishkek Kyrgyzstan Libreville Gabon +Bishkek Kyrgyzstan Lilongwe Malawi +Bishkek Kyrgyzstan Lima Peru +Bishkek Kyrgyzstan Lisbon Portugal +Bishkek Kyrgyzstan Ljubljana Slovenia +Bishkek Kyrgyzstan London England +Bratislava Slovakia Brussels Belgium +Bratislava Slovakia Bucharest Romania +Bratislava Slovakia Budapest Hungary +Bratislava Slovakia Bujumbura Burundi +Bratislava Slovakia Cairo Egypt +Bratislava Slovakia Canberra Australia +Bratislava Slovakia Caracas Venezuela +Bratislava Slovakia Chisinau Moldova +Bratislava Slovakia Conakry Guinea +Bratislava Slovakia Copenhagen Denmark +Bratislava Slovakia Dakar Senegal +Bratislava Slovakia Damascus Syria +Bratislava Slovakia Dhaka Bangladesh +Bratislava Slovakia Doha Qatar +Bratislava Slovakia Dublin Ireland +Bratislava Slovakia Dushanbe Tajikistan +Bratislava Slovakia Funafuti Tuvalu +Bratislava Slovakia Gaborone Botswana +Bratislava Slovakia Georgetown Guyana +Bratislava Slovakia Hanoi Vietnam +Bratislava Slovakia Harare Zimbabwe +Bratislava Slovakia Havana Cuba +Bratislava Slovakia Helsinki Finland +Bratislava Slovakia Islamabad Pakistan +Bratislava Slovakia Jakarta Indonesia +Bratislava Slovakia Kabul Afghanistan +Bratislava Slovakia Kampala Uganda +Bratislava Slovakia Kathmandu Nepal +Bratislava Slovakia Khartoum Sudan +Bratislava Slovakia Kiev Ukraine +Bratislava Slovakia Kigali Rwanda +Bratislava Slovakia Kingston Jamaica +Bratislava Slovakia Libreville Gabon +Bratislava Slovakia Lilongwe Malawi +Bratislava Slovakia Lima Peru +Bratislava Slovakia Lisbon Portugal +Bratislava Slovakia Ljubljana Slovenia +Bratislava Slovakia London England +Bratislava Slovakia Luanda Angola +Brussels Belgium Bucharest Romania +Brussels Belgium Budapest Hungary +Brussels Belgium Bujumbura Burundi +Brussels Belgium Cairo Egypt +Brussels Belgium Canberra Australia +Brussels Belgium Caracas Venezuela +Brussels Belgium Chisinau Moldova +Brussels Belgium Conakry Guinea +Brussels Belgium Copenhagen Denmark +Brussels Belgium Dakar Senegal +Brussels Belgium Damascus Syria +Brussels Belgium Dhaka Bangladesh +Brussels Belgium Doha Qatar +Brussels Belgium Dublin Ireland +Brussels Belgium Dushanbe Tajikistan +Brussels Belgium Funafuti Tuvalu +Brussels Belgium Gaborone Botswana +Brussels Belgium Georgetown Guyana +Brussels Belgium Hanoi Vietnam +Brussels Belgium Harare Zimbabwe +Brussels Belgium Havana Cuba +Brussels Belgium Helsinki Finland +Brussels Belgium Islamabad Pakistan +Brussels Belgium Jakarta Indonesia +Brussels Belgium Kabul Afghanistan +Brussels Belgium Kampala Uganda +Brussels Belgium Kathmandu Nepal +Brussels Belgium Khartoum Sudan +Brussels Belgium Kiev Ukraine +Brussels Belgium Kigali Rwanda +Brussels Belgium Kingston Jamaica +Brussels Belgium Libreville Gabon +Brussels Belgium Lilongwe Malawi +Brussels Belgium Lima Peru +Brussels Belgium Lisbon Portugal +Brussels Belgium Ljubljana Slovenia +Brussels Belgium London England +Brussels Belgium Luanda Angola +Brussels Belgium Lusaka Zambia +Bucharest Romania Budapest Hungary +Bucharest Romania Bujumbura Burundi +Bucharest Romania Cairo Egypt +Bucharest Romania Canberra Australia +Bucharest Romania Caracas Venezuela +Bucharest Romania Chisinau Moldova +Bucharest Romania Conakry Guinea +Bucharest Romania Copenhagen Denmark +Bucharest Romania Dakar Senegal +Bucharest Romania Damascus Syria +Bucharest Romania Dhaka Bangladesh +Bucharest Romania Doha Qatar +Bucharest Romania Dublin Ireland +Bucharest Romania Dushanbe Tajikistan +Bucharest Romania Funafuti Tuvalu +Bucharest Romania Gaborone Botswana +Bucharest Romania Georgetown Guyana +Bucharest Romania Hanoi Vietnam +Bucharest Romania Harare Zimbabwe +Bucharest Romania Havana Cuba +Bucharest Romania Helsinki Finland +Bucharest Romania Islamabad Pakistan +Bucharest Romania Jakarta Indonesia +Bucharest Romania Kabul Afghanistan +Bucharest Romania Kampala Uganda +Bucharest Romania Kathmandu Nepal +Bucharest Romania Khartoum Sudan +Bucharest Romania Kiev Ukraine +Bucharest Romania Kigali Rwanda +Bucharest Romania Kingston Jamaica +Bucharest Romania Libreville Gabon +Bucharest Romania Lilongwe Malawi +Bucharest Romania Lima Peru +Bucharest Romania Lisbon Portugal +Bucharest Romania Ljubljana Slovenia +Bucharest Romania London England +Bucharest Romania Luanda Angola +Bucharest Romania Lusaka Zambia +Bucharest Romania Madrid Spain +Budapest Hungary Bujumbura Burundi +Budapest Hungary Cairo Egypt +Budapest Hungary Canberra Australia +Budapest Hungary Caracas Venezuela +Budapest Hungary Chisinau Moldova +Budapest Hungary Conakry Guinea +Budapest Hungary Copenhagen Denmark +Budapest Hungary Dakar Senegal +Budapest Hungary Damascus Syria +Budapest Hungary Dhaka Bangladesh +Budapest Hungary Doha Qatar +Budapest Hungary Dublin Ireland +Budapest Hungary Dushanbe Tajikistan +Budapest Hungary Funafuti Tuvalu +Budapest Hungary Gaborone Botswana +Budapest Hungary Georgetown Guyana +Budapest Hungary Hanoi Vietnam +Budapest Hungary Harare Zimbabwe +Budapest Hungary Havana Cuba +Budapest Hungary Helsinki Finland +Budapest Hungary Islamabad Pakistan +Budapest Hungary Jakarta Indonesia +Budapest Hungary Kabul Afghanistan +Budapest Hungary Kampala Uganda +Budapest Hungary Kathmandu Nepal +Budapest Hungary Khartoum Sudan +Budapest Hungary Kiev Ukraine +Budapest Hungary Kigali Rwanda +Budapest Hungary Kingston Jamaica +Budapest Hungary Libreville Gabon +Budapest Hungary Lilongwe Malawi +Budapest Hungary Lima Peru +Budapest Hungary Lisbon Portugal +Budapest Hungary Ljubljana Slovenia +Budapest Hungary London England +Budapest Hungary Luanda Angola +Budapest Hungary Lusaka Zambia +Budapest Hungary Madrid Spain +Budapest Hungary Managua Nicaragua +Bujumbura Burundi Cairo Egypt +Bujumbura Burundi Canberra Australia +Bujumbura Burundi Caracas Venezuela +Bujumbura Burundi Chisinau Moldova +Bujumbura Burundi Conakry Guinea +Bujumbura Burundi Copenhagen Denmark +Bujumbura Burundi Dakar Senegal +Bujumbura Burundi Damascus Syria +Bujumbura Burundi Dhaka Bangladesh +Bujumbura Burundi Doha Qatar +Bujumbura Burundi Dublin Ireland +Bujumbura Burundi Dushanbe Tajikistan +Bujumbura Burundi Funafuti Tuvalu +Bujumbura Burundi Gaborone Botswana +Bujumbura Burundi Georgetown Guyana +Bujumbura Burundi Hanoi Vietnam +Bujumbura Burundi Harare Zimbabwe +Bujumbura Burundi Havana Cuba +Bujumbura Burundi Helsinki Finland +Bujumbura Burundi Islamabad Pakistan +Bujumbura Burundi Jakarta Indonesia +Bujumbura Burundi Kabul Afghanistan +Bujumbura Burundi Kampala Uganda +Bujumbura Burundi Kathmandu Nepal +Bujumbura Burundi Khartoum Sudan +Bujumbura Burundi Kiev Ukraine +Bujumbura Burundi Kigali Rwanda +Bujumbura Burundi Kingston Jamaica +Bujumbura Burundi Libreville Gabon +Bujumbura Burundi Lilongwe Malawi +Bujumbura Burundi Lima Peru +Bujumbura Burundi Lisbon Portugal +Bujumbura Burundi Ljubljana Slovenia +Bujumbura Burundi London England +Bujumbura Burundi Luanda Angola +Bujumbura Burundi Lusaka Zambia +Bujumbura Burundi Madrid Spain +Bujumbura Burundi Managua Nicaragua +Bujumbura Burundi Manama Bahrain +Cairo Egypt Canberra Australia +Cairo Egypt Caracas Venezuela +Cairo Egypt Chisinau Moldova +Cairo Egypt Conakry Guinea +Cairo Egypt Copenhagen Denmark +Cairo Egypt Dakar Senegal +Cairo Egypt Damascus Syria +Cairo Egypt Dhaka Bangladesh +Cairo Egypt Doha Qatar +Cairo Egypt Dublin Ireland +Cairo Egypt Dushanbe Tajikistan +Cairo Egypt Funafuti Tuvalu +Cairo Egypt Gaborone Botswana +Cairo Egypt Georgetown Guyana +Cairo Egypt Hanoi Vietnam +Cairo Egypt Harare Zimbabwe +Cairo Egypt Havana Cuba +Cairo Egypt Helsinki Finland +Cairo Egypt Islamabad Pakistan +Cairo Egypt Jakarta Indonesia +Cairo Egypt Kabul Afghanistan +Cairo Egypt Kampala Uganda +Cairo Egypt Kathmandu Nepal +Cairo Egypt Khartoum Sudan +Cairo Egypt Kiev Ukraine +Cairo Egypt Kigali Rwanda +Cairo Egypt Kingston Jamaica +Cairo Egypt Libreville Gabon +Cairo Egypt Lilongwe Malawi +Cairo Egypt Lima Peru +Cairo Egypt Lisbon Portugal +Cairo Egypt Ljubljana Slovenia +Cairo Egypt London England +Cairo Egypt Luanda Angola +Cairo Egypt Lusaka Zambia +Cairo Egypt Madrid Spain +Cairo Egypt Managua Nicaragua +Cairo Egypt Manama Bahrain +Cairo Egypt Manila Philippines +Canberra Australia Caracas Venezuela +Canberra Australia Chisinau Moldova +Canberra Australia Conakry Guinea +Canberra Australia Copenhagen Denmark +Canberra Australia Dakar Senegal +Canberra Australia Damascus Syria +Canberra Australia Dhaka Bangladesh +Canberra Australia Doha Qatar +Canberra Australia Dublin Ireland +Canberra Australia Dushanbe Tajikistan +Canberra Australia Funafuti Tuvalu +Canberra Australia Gaborone Botswana +Canberra Australia Georgetown Guyana +Canberra Australia Hanoi Vietnam +Canberra Australia Harare Zimbabwe +Canberra Australia Havana Cuba +Canberra Australia Helsinki Finland +Canberra Australia Islamabad Pakistan +Canberra Australia Jakarta Indonesia +Canberra Australia Kabul Afghanistan +Canberra Australia Kampala Uganda +Canberra Australia Kathmandu Nepal +Canberra Australia Khartoum Sudan +Canberra Australia Kiev Ukraine +Canberra Australia Kigali Rwanda +Canberra Australia Kingston Jamaica +Canberra Australia Libreville Gabon +Canberra Australia Lilongwe Malawi +Canberra Australia Lima Peru +Canberra Australia Lisbon Portugal +Canberra Australia Ljubljana Slovenia +Canberra Australia London England +Canberra Australia Luanda Angola +Canberra Australia Lusaka Zambia +Canberra Australia Madrid Spain +Canberra Australia Managua Nicaragua +Canberra Australia Manama Bahrain +Canberra Australia Manila Philippines +Canberra Australia Maputo Mozambique +Caracas Venezuela Chisinau Moldova +Caracas Venezuela Conakry Guinea +Caracas Venezuela Copenhagen Denmark +Caracas Venezuela Dakar Senegal +Caracas Venezuela Damascus Syria +Caracas Venezuela Dhaka Bangladesh +Caracas Venezuela Doha Qatar +Caracas Venezuela Dublin Ireland +Caracas Venezuela Dushanbe Tajikistan +Caracas Venezuela Funafuti Tuvalu +Caracas Venezuela Gaborone Botswana +Caracas Venezuela Georgetown Guyana +Caracas Venezuela Hanoi Vietnam +Caracas Venezuela Harare Zimbabwe +Caracas Venezuela Havana Cuba +Caracas Venezuela Helsinki Finland +Caracas Venezuela Islamabad Pakistan +Caracas Venezuela Jakarta Indonesia +Caracas Venezuela Kabul Afghanistan +Caracas Venezuela Kampala Uganda +Caracas Venezuela Kathmandu Nepal +Caracas Venezuela Khartoum Sudan +Caracas Venezuela Kiev Ukraine +Caracas Venezuela Kigali Rwanda +Caracas Venezuela Kingston Jamaica +Caracas Venezuela Libreville Gabon +Caracas Venezuela Lilongwe Malawi +Caracas Venezuela Lima Peru +Caracas Venezuela Lisbon Portugal +Caracas Venezuela Ljubljana Slovenia +Caracas Venezuela London England +Caracas Venezuela Luanda Angola +Caracas Venezuela Lusaka Zambia +Caracas Venezuela Madrid Spain +Caracas Venezuela Managua Nicaragua +Caracas Venezuela Manama Bahrain +Caracas Venezuela Manila Philippines +Caracas Venezuela Maputo Mozambique +Caracas Venezuela Minsk Belarus +Chisinau Moldova Conakry Guinea +Chisinau Moldova Copenhagen Denmark +Chisinau Moldova Dakar Senegal +Chisinau Moldova Damascus Syria +Chisinau Moldova Dhaka Bangladesh +Chisinau Moldova Doha Qatar +Chisinau Moldova Dublin Ireland +Chisinau Moldova Dushanbe Tajikistan +Chisinau Moldova Funafuti Tuvalu +Chisinau Moldova Gaborone Botswana +Chisinau Moldova Georgetown Guyana +Chisinau Moldova Hanoi Vietnam +Chisinau Moldova Harare Zimbabwe +Chisinau Moldova Havana Cuba +Chisinau Moldova Helsinki Finland +Chisinau Moldova Islamabad Pakistan +Chisinau Moldova Jakarta Indonesia +Chisinau Moldova Kabul Afghanistan +Chisinau Moldova Kampala Uganda +Chisinau Moldova Kathmandu Nepal +Chisinau Moldova Khartoum Sudan +Chisinau Moldova Kiev Ukraine +Chisinau Moldova Kigali Rwanda +Chisinau Moldova Kingston Jamaica +Chisinau Moldova Libreville Gabon +Chisinau Moldova Lilongwe Malawi +Chisinau Moldova Lima Peru +Chisinau Moldova Lisbon Portugal +Chisinau Moldova Ljubljana Slovenia +Chisinau Moldova London England +Chisinau Moldova Luanda Angola +Chisinau Moldova Lusaka Zambia +Chisinau Moldova Madrid Spain +Chisinau Moldova Managua Nicaragua +Chisinau Moldova Manama Bahrain +Chisinau Moldova Manila Philippines +Chisinau Moldova Maputo Mozambique +Chisinau Moldova Minsk Belarus +Chisinau Moldova Mogadishu Somalia +Conakry Guinea Copenhagen Denmark +Conakry Guinea Dakar Senegal +Conakry Guinea Damascus Syria +Conakry Guinea Dhaka Bangladesh +Conakry Guinea Doha Qatar +Conakry Guinea Dublin Ireland +Conakry Guinea Dushanbe Tajikistan +Conakry Guinea Funafuti Tuvalu +Conakry Guinea Gaborone Botswana +Conakry Guinea Georgetown Guyana +Conakry Guinea Hanoi Vietnam +Conakry Guinea Harare Zimbabwe +Conakry Guinea Havana Cuba +Conakry Guinea Helsinki Finland +Conakry Guinea Islamabad Pakistan +Conakry Guinea Jakarta Indonesia +Conakry Guinea Kabul Afghanistan +Conakry Guinea Kampala Uganda +Conakry Guinea Kathmandu Nepal +Conakry Guinea Khartoum Sudan +Conakry Guinea Kiev Ukraine +Conakry Guinea Kigali Rwanda +Conakry Guinea Kingston Jamaica +Conakry Guinea Libreville Gabon +Conakry Guinea Lilongwe Malawi +Conakry Guinea Lima Peru +Conakry Guinea Lisbon Portugal +Conakry Guinea Ljubljana Slovenia +Conakry Guinea London England +Conakry Guinea Luanda Angola +Conakry Guinea Lusaka Zambia +Conakry Guinea Madrid Spain +Conakry Guinea Managua Nicaragua +Conakry Guinea Manama Bahrain +Conakry Guinea Manila Philippines +Conakry Guinea Maputo Mozambique +Conakry Guinea Minsk Belarus +Conakry Guinea Mogadishu Somalia +Conakry Guinea Monrovia Liberia +Copenhagen Denmark Dakar Senegal +Copenhagen Denmark Damascus Syria +Copenhagen Denmark Dhaka Bangladesh +Copenhagen Denmark Doha Qatar +Copenhagen Denmark Dublin Ireland +Copenhagen Denmark Dushanbe Tajikistan +Copenhagen Denmark Funafuti Tuvalu +Copenhagen Denmark Gaborone Botswana +Copenhagen Denmark Georgetown Guyana +Copenhagen Denmark Hanoi Vietnam +Copenhagen Denmark Harare Zimbabwe +Copenhagen Denmark Havana Cuba +Copenhagen Denmark Helsinki Finland +Copenhagen Denmark Islamabad Pakistan +Copenhagen Denmark Jakarta Indonesia +Copenhagen Denmark Kabul Afghanistan +Copenhagen Denmark Kampala Uganda +Copenhagen Denmark Kathmandu Nepal +Copenhagen Denmark Khartoum Sudan +Copenhagen Denmark Kiev Ukraine +Copenhagen Denmark Kigali Rwanda +Copenhagen Denmark Kingston Jamaica +Copenhagen Denmark Libreville Gabon +Copenhagen Denmark Lilongwe Malawi +Copenhagen Denmark Lima Peru +Copenhagen Denmark Lisbon Portugal +Copenhagen Denmark Ljubljana Slovenia +Copenhagen Denmark London England +Copenhagen Denmark Luanda Angola +Copenhagen Denmark Lusaka Zambia +Copenhagen Denmark Madrid Spain +Copenhagen Denmark Managua Nicaragua +Copenhagen Denmark Manama Bahrain +Copenhagen Denmark Manila Philippines +Copenhagen Denmark Maputo Mozambique +Copenhagen Denmark Minsk Belarus +Copenhagen Denmark Mogadishu Somalia +Copenhagen Denmark Monrovia Liberia +Copenhagen Denmark Montevideo Uruguay +Dakar Senegal Damascus Syria +Dakar Senegal Dhaka Bangladesh +Dakar Senegal Doha Qatar +Dakar Senegal Dublin Ireland +Dakar Senegal Dushanbe Tajikistan +Dakar Senegal Funafuti Tuvalu +Dakar Senegal Gaborone Botswana +Dakar Senegal Georgetown Guyana +Dakar Senegal Hanoi Vietnam +Dakar Senegal Harare Zimbabwe +Dakar Senegal Havana Cuba +Dakar Senegal Helsinki Finland +Dakar Senegal Islamabad Pakistan +Dakar Senegal Jakarta Indonesia +Dakar Senegal Kabul Afghanistan +Dakar Senegal Kampala Uganda +Dakar Senegal Kathmandu Nepal +Dakar Senegal Khartoum Sudan +Dakar Senegal Kiev Ukraine +Dakar Senegal Kigali Rwanda +Dakar Senegal Kingston Jamaica +Dakar Senegal Libreville Gabon +Dakar Senegal Lilongwe Malawi +Dakar Senegal Lima Peru +Dakar Senegal Lisbon Portugal +Dakar Senegal Ljubljana Slovenia +Dakar Senegal London England +Dakar Senegal Luanda Angola +Dakar Senegal Lusaka Zambia +Dakar Senegal Madrid Spain +Dakar Senegal Managua Nicaragua +Dakar Senegal Manama Bahrain +Dakar Senegal Manila Philippines +Dakar Senegal Maputo Mozambique +Dakar Senegal Minsk Belarus +Dakar Senegal Mogadishu Somalia +Dakar Senegal Monrovia Liberia +Dakar Senegal Montevideo Uruguay +Dakar Senegal Moscow Russia +Damascus Syria Dhaka Bangladesh +Damascus Syria Doha Qatar +Damascus Syria Dublin Ireland +Damascus Syria Dushanbe Tajikistan +Damascus Syria Funafuti Tuvalu +Damascus Syria Gaborone Botswana +Damascus Syria Georgetown Guyana +Damascus Syria Hanoi Vietnam +Damascus Syria Harare Zimbabwe +Damascus Syria Havana Cuba +Damascus Syria Helsinki Finland +Damascus Syria Islamabad Pakistan +Damascus Syria Jakarta Indonesia +Damascus Syria Kabul Afghanistan +Damascus Syria Kampala Uganda +Damascus Syria Kathmandu Nepal +Damascus Syria Khartoum Sudan +Damascus Syria Kiev Ukraine +Damascus Syria Kigali Rwanda +Damascus Syria Kingston Jamaica +Damascus Syria Libreville Gabon +Damascus Syria Lilongwe Malawi +Damascus Syria Lima Peru +Damascus Syria Lisbon Portugal +Damascus Syria Ljubljana Slovenia +Damascus Syria London England +Damascus Syria Luanda Angola +Damascus Syria Lusaka Zambia +Damascus Syria Madrid Spain +Damascus Syria Managua Nicaragua +Damascus Syria Manama Bahrain +Damascus Syria Manila Philippines +Damascus Syria Maputo Mozambique +Damascus Syria Minsk Belarus +Damascus Syria Mogadishu Somalia +Damascus Syria Monrovia Liberia +Damascus Syria Montevideo Uruguay +Damascus Syria Moscow Russia +Damascus Syria Muscat Oman +Dhaka Bangladesh Doha Qatar +Dhaka Bangladesh Dublin Ireland +Dhaka Bangladesh Dushanbe Tajikistan +Dhaka Bangladesh Funafuti Tuvalu +Dhaka Bangladesh Gaborone Botswana +Dhaka Bangladesh Georgetown Guyana +Dhaka Bangladesh Hanoi Vietnam +Dhaka Bangladesh Harare Zimbabwe +Dhaka Bangladesh Havana Cuba +Dhaka Bangladesh Helsinki Finland +Dhaka Bangladesh Islamabad Pakistan +Dhaka Bangladesh Jakarta Indonesia +Dhaka Bangladesh Kabul Afghanistan +Dhaka Bangladesh Kampala Uganda +Dhaka Bangladesh Kathmandu Nepal +Dhaka Bangladesh Khartoum Sudan +Dhaka Bangladesh Kiev Ukraine +Dhaka Bangladesh Kigali Rwanda +Dhaka Bangladesh Kingston Jamaica +Dhaka Bangladesh Libreville Gabon +Dhaka Bangladesh Lilongwe Malawi +Dhaka Bangladesh Lima Peru +Dhaka Bangladesh Lisbon Portugal +Dhaka Bangladesh Ljubljana Slovenia +Dhaka Bangladesh London England +Dhaka Bangladesh Luanda Angola +Dhaka Bangladesh Lusaka Zambia +Dhaka Bangladesh Madrid Spain +Dhaka Bangladesh Managua Nicaragua +Dhaka Bangladesh Manama Bahrain +Dhaka Bangladesh Manila Philippines +Dhaka Bangladesh Maputo Mozambique +Dhaka Bangladesh Minsk Belarus +Dhaka Bangladesh Mogadishu Somalia +Dhaka Bangladesh Monrovia Liberia +Dhaka Bangladesh Montevideo Uruguay +Dhaka Bangladesh Moscow Russia +Dhaka Bangladesh Muscat Oman +Dhaka Bangladesh Nairobi Kenya +Doha Qatar Dublin Ireland +Doha Qatar Dushanbe Tajikistan +Doha Qatar Funafuti Tuvalu +Doha Qatar Gaborone Botswana +Doha Qatar Georgetown Guyana +Doha Qatar Hanoi Vietnam +Doha Qatar Harare Zimbabwe +Doha Qatar Havana Cuba +Doha Qatar Helsinki Finland +Doha Qatar Islamabad Pakistan +Doha Qatar Jakarta Indonesia +Doha Qatar Kabul Afghanistan +Doha Qatar Kampala Uganda +Doha Qatar Kathmandu Nepal +Doha Qatar Khartoum Sudan +Doha Qatar Kiev Ukraine +Doha Qatar Kigali Rwanda +Doha Qatar Kingston Jamaica +Doha Qatar Libreville Gabon +Doha Qatar Lilongwe Malawi +Doha Qatar Lima Peru +Doha Qatar Lisbon Portugal +Doha Qatar Ljubljana Slovenia +Doha Qatar London England +Doha Qatar Luanda Angola +Doha Qatar Lusaka Zambia +Doha Qatar Madrid Spain +Doha Qatar Managua Nicaragua +Doha Qatar Manama Bahrain +Doha Qatar Manila Philippines +Doha Qatar Maputo Mozambique +Doha Qatar Minsk Belarus +Doha Qatar Mogadishu Somalia +Doha Qatar Monrovia Liberia +Doha Qatar Montevideo Uruguay +Doha Qatar Moscow Russia +Doha Qatar Muscat Oman +Doha Qatar Nairobi Kenya +Doha Qatar Nassau Bahamas +Dublin Ireland Dushanbe Tajikistan +Dublin Ireland Funafuti Tuvalu +Dublin Ireland Gaborone Botswana +Dublin Ireland Georgetown Guyana +Dublin Ireland Hanoi Vietnam +Dublin Ireland Harare Zimbabwe +Dublin Ireland Havana Cuba +Dublin Ireland Helsinki Finland +Dublin Ireland Islamabad Pakistan +Dublin Ireland Jakarta Indonesia +Dublin Ireland Kabul Afghanistan +Dublin Ireland Kampala Uganda +Dublin Ireland Kathmandu Nepal +Dublin Ireland Khartoum Sudan +Dublin Ireland Kiev Ukraine +Dublin Ireland Kigali Rwanda +Dublin Ireland Kingston Jamaica +Dublin Ireland Libreville Gabon +Dublin Ireland Lilongwe Malawi +Dublin Ireland Lima Peru +Dublin Ireland Lisbon Portugal +Dublin Ireland Ljubljana Slovenia +Dublin Ireland London England +Dublin Ireland Luanda Angola +Dublin Ireland Lusaka Zambia +Dublin Ireland Madrid Spain +Dublin Ireland Managua Nicaragua +Dublin Ireland Manama Bahrain +Dublin Ireland Manila Philippines +Dublin Ireland Maputo Mozambique +Dublin Ireland Minsk Belarus +Dublin Ireland Mogadishu Somalia +Dublin Ireland Monrovia Liberia +Dublin Ireland Montevideo Uruguay +Dublin Ireland Moscow Russia +Dublin Ireland Muscat Oman +Dublin Ireland Nairobi Kenya +Dublin Ireland Nassau Bahamas +Dublin Ireland Niamey Niger +Dushanbe Tajikistan Funafuti Tuvalu +Dushanbe Tajikistan Gaborone Botswana +Dushanbe Tajikistan Georgetown Guyana +Dushanbe Tajikistan Hanoi Vietnam +Dushanbe Tajikistan Harare Zimbabwe +Dushanbe Tajikistan Havana Cuba +Dushanbe Tajikistan Helsinki Finland +Dushanbe Tajikistan Islamabad Pakistan +Dushanbe Tajikistan Jakarta Indonesia +Dushanbe Tajikistan Kabul Afghanistan +Dushanbe Tajikistan Kampala Uganda +Dushanbe Tajikistan Kathmandu Nepal +Dushanbe Tajikistan Khartoum Sudan +Dushanbe Tajikistan Kiev Ukraine +Dushanbe Tajikistan Kigali Rwanda +Dushanbe Tajikistan Kingston Jamaica +Dushanbe Tajikistan Libreville Gabon +Dushanbe Tajikistan Lilongwe Malawi +Dushanbe Tajikistan Lima Peru +Dushanbe Tajikistan Lisbon Portugal +Dushanbe Tajikistan Ljubljana Slovenia +Dushanbe Tajikistan London England +Dushanbe Tajikistan Luanda Angola +Dushanbe Tajikistan Lusaka Zambia +Dushanbe Tajikistan Madrid Spain +Dushanbe Tajikistan Managua Nicaragua +Dushanbe Tajikistan Manama Bahrain +Dushanbe Tajikistan Manila Philippines +Dushanbe Tajikistan Maputo Mozambique +Dushanbe Tajikistan Minsk Belarus +Dushanbe Tajikistan Mogadishu Somalia +Dushanbe Tajikistan Monrovia Liberia +Dushanbe Tajikistan Montevideo Uruguay +Dushanbe Tajikistan Moscow Russia +Dushanbe Tajikistan Muscat Oman +Dushanbe Tajikistan Nairobi Kenya +Dushanbe Tajikistan Nassau Bahamas +Dushanbe Tajikistan Niamey Niger +Dushanbe Tajikistan Nicosia Cyprus +Funafuti Tuvalu Gaborone Botswana +Funafuti Tuvalu Georgetown Guyana +Funafuti Tuvalu Hanoi Vietnam +Funafuti Tuvalu Harare Zimbabwe +Funafuti Tuvalu Havana Cuba +Funafuti Tuvalu Helsinki Finland +Funafuti Tuvalu Islamabad Pakistan +Funafuti Tuvalu Jakarta Indonesia +Funafuti Tuvalu Kabul Afghanistan +Funafuti Tuvalu Kampala Uganda +Funafuti Tuvalu Kathmandu Nepal +Funafuti Tuvalu Khartoum Sudan +Funafuti Tuvalu Kiev Ukraine +Funafuti Tuvalu Kigali Rwanda +Funafuti Tuvalu Kingston Jamaica +Funafuti Tuvalu Libreville Gabon +Funafuti Tuvalu Lilongwe Malawi +Funafuti Tuvalu Lima Peru +Funafuti Tuvalu Lisbon Portugal +Funafuti Tuvalu Ljubljana Slovenia +Funafuti Tuvalu London England +Funafuti Tuvalu Luanda Angola +Funafuti Tuvalu Lusaka Zambia +Funafuti Tuvalu Madrid Spain +Funafuti Tuvalu Managua Nicaragua +Funafuti Tuvalu Manama Bahrain +Funafuti Tuvalu Manila Philippines +Funafuti Tuvalu Maputo Mozambique +Funafuti Tuvalu Minsk Belarus +Funafuti Tuvalu Mogadishu Somalia +Funafuti Tuvalu Monrovia Liberia +Funafuti Tuvalu Montevideo Uruguay +Funafuti Tuvalu Moscow Russia +Funafuti Tuvalu Muscat Oman +Funafuti Tuvalu Nairobi Kenya +Funafuti Tuvalu Nassau Bahamas +Funafuti Tuvalu Niamey Niger +Funafuti Tuvalu Nicosia Cyprus +Funafuti Tuvalu Nouakchott Mauritania +Gaborone Botswana Georgetown Guyana +Gaborone Botswana Hanoi Vietnam +Gaborone Botswana Harare Zimbabwe +Gaborone Botswana Havana Cuba +Gaborone Botswana Helsinki Finland +Gaborone Botswana Islamabad Pakistan +Gaborone Botswana Jakarta Indonesia +Gaborone Botswana Kabul Afghanistan +Gaborone Botswana Kampala Uganda +Gaborone Botswana Kathmandu Nepal +Gaborone Botswana Khartoum Sudan +Gaborone Botswana Kiev Ukraine +Gaborone Botswana Kigali Rwanda +Gaborone Botswana Kingston Jamaica +Gaborone Botswana Libreville Gabon +Gaborone Botswana Lilongwe Malawi +Gaborone Botswana Lima Peru +Gaborone Botswana Lisbon Portugal +Gaborone Botswana Ljubljana Slovenia +Gaborone Botswana London England +Gaborone Botswana Luanda Angola +Gaborone Botswana Lusaka Zambia +Gaborone Botswana Madrid Spain +Gaborone Botswana Managua Nicaragua +Gaborone Botswana Manama Bahrain +Gaborone Botswana Manila Philippines +Gaborone Botswana Maputo Mozambique +Gaborone Botswana Minsk Belarus +Gaborone Botswana Mogadishu Somalia +Gaborone Botswana Monrovia Liberia +Gaborone Botswana Montevideo Uruguay +Gaborone Botswana Moscow Russia +Gaborone Botswana Muscat Oman +Gaborone Botswana Nairobi Kenya +Gaborone Botswana Nassau Bahamas +Gaborone Botswana Niamey Niger +Gaborone Botswana Nicosia Cyprus +Gaborone Botswana Nouakchott Mauritania +Gaborone Botswana Nuuk Greenland +Georgetown Guyana Hanoi Vietnam +Georgetown Guyana Harare Zimbabwe +Georgetown Guyana Havana Cuba +Georgetown Guyana Helsinki Finland +Georgetown Guyana Islamabad Pakistan +Georgetown Guyana Jakarta Indonesia +Georgetown Guyana Kabul Afghanistan +Georgetown Guyana Kampala Uganda +Georgetown Guyana Kathmandu Nepal +Georgetown Guyana Khartoum Sudan +Georgetown Guyana Kiev Ukraine +Georgetown Guyana Kigali Rwanda +Georgetown Guyana Kingston Jamaica +Georgetown Guyana Libreville Gabon +Georgetown Guyana Lilongwe Malawi +Georgetown Guyana Lima Peru +Georgetown Guyana Lisbon Portugal +Georgetown Guyana Ljubljana Slovenia +Georgetown Guyana London England +Georgetown Guyana Luanda Angola +Georgetown Guyana Lusaka Zambia +Georgetown Guyana Madrid Spain +Georgetown Guyana Managua Nicaragua +Georgetown Guyana Manama Bahrain +Georgetown Guyana Manila Philippines +Georgetown Guyana Maputo Mozambique +Georgetown Guyana Minsk Belarus +Georgetown Guyana Mogadishu Somalia +Georgetown Guyana Monrovia Liberia +Georgetown Guyana Montevideo Uruguay +Georgetown Guyana Moscow Russia +Georgetown Guyana Muscat Oman +Georgetown Guyana Nairobi Kenya +Georgetown Guyana Nassau Bahamas +Georgetown Guyana Niamey Niger +Georgetown Guyana Nicosia Cyprus +Georgetown Guyana Nouakchott Mauritania +Georgetown Guyana Nuuk Greenland +Georgetown Guyana Oslo Norway +Hanoi Vietnam Harare Zimbabwe +Hanoi Vietnam Havana Cuba +Hanoi Vietnam Helsinki Finland +Hanoi Vietnam Islamabad Pakistan +Hanoi Vietnam Jakarta Indonesia +Hanoi Vietnam Kabul Afghanistan +Hanoi Vietnam Kampala Uganda +Hanoi Vietnam Kathmandu Nepal +Hanoi Vietnam Khartoum Sudan +Hanoi Vietnam Kiev Ukraine +Hanoi Vietnam Kigali Rwanda +Hanoi Vietnam Kingston Jamaica +Hanoi Vietnam Libreville Gabon +Hanoi Vietnam Lilongwe Malawi +Hanoi Vietnam Lima Peru +Hanoi Vietnam Lisbon Portugal +Hanoi Vietnam Ljubljana Slovenia +Hanoi Vietnam London England +Hanoi Vietnam Luanda Angola +Hanoi Vietnam Lusaka Zambia +Hanoi Vietnam Madrid Spain +Hanoi Vietnam Managua Nicaragua +Hanoi Vietnam Manama Bahrain +Hanoi Vietnam Manila Philippines +Hanoi Vietnam Maputo Mozambique +Hanoi Vietnam Minsk Belarus +Hanoi Vietnam Mogadishu Somalia +Hanoi Vietnam Monrovia Liberia +Hanoi Vietnam Montevideo Uruguay +Hanoi Vietnam Moscow Russia +Hanoi Vietnam Muscat Oman +Hanoi Vietnam Nairobi Kenya +Hanoi Vietnam Nassau Bahamas +Hanoi Vietnam Niamey Niger +Hanoi Vietnam Nicosia Cyprus +Hanoi Vietnam Nouakchott Mauritania +Hanoi Vietnam Nuuk Greenland +Hanoi Vietnam Oslo Norway +Hanoi Vietnam Ottawa Canada +Harare Zimbabwe Havana Cuba +Harare Zimbabwe Helsinki Finland +Harare Zimbabwe Islamabad Pakistan +Harare Zimbabwe Jakarta Indonesia +Harare Zimbabwe Kabul Afghanistan +Harare Zimbabwe Kampala Uganda +Harare Zimbabwe Kathmandu Nepal +Harare Zimbabwe Khartoum Sudan +Harare Zimbabwe Kiev Ukraine +Harare Zimbabwe Kigali Rwanda +Harare Zimbabwe Kingston Jamaica +Harare Zimbabwe Libreville Gabon +Harare Zimbabwe Lilongwe Malawi +Harare Zimbabwe Lima Peru +Harare Zimbabwe Lisbon Portugal +Harare Zimbabwe Ljubljana Slovenia +Harare Zimbabwe London England +Harare Zimbabwe Luanda Angola +Harare Zimbabwe Lusaka Zambia +Harare Zimbabwe Madrid Spain +Harare Zimbabwe Managua Nicaragua +Harare Zimbabwe Manama Bahrain +Harare Zimbabwe Manila Philippines +Harare Zimbabwe Maputo Mozambique +Harare Zimbabwe Minsk Belarus +Harare Zimbabwe Mogadishu Somalia +Harare Zimbabwe Monrovia Liberia +Harare Zimbabwe Montevideo Uruguay +Harare Zimbabwe Moscow Russia +Harare Zimbabwe Muscat Oman +Harare Zimbabwe Nairobi Kenya +Harare Zimbabwe Nassau Bahamas +Harare Zimbabwe Niamey Niger +Harare Zimbabwe Nicosia Cyprus +Harare Zimbabwe Nouakchott Mauritania +Harare Zimbabwe Nuuk Greenland +Harare Zimbabwe Oslo Norway +Harare Zimbabwe Ottawa Canada +Harare Zimbabwe Paramaribo Suriname +Havana Cuba Helsinki Finland +Havana Cuba Islamabad Pakistan +Havana Cuba Jakarta Indonesia +Havana Cuba Kabul Afghanistan +Havana Cuba Kampala Uganda +Havana Cuba Kathmandu Nepal +Havana Cuba Khartoum Sudan +Havana Cuba Kiev Ukraine +Havana Cuba Kigali Rwanda +Havana Cuba Kingston Jamaica +Havana Cuba Libreville Gabon +Havana Cuba Lilongwe Malawi +Havana Cuba Lima Peru +Havana Cuba Lisbon Portugal +Havana Cuba Ljubljana Slovenia +Havana Cuba London England +Havana Cuba Luanda Angola +Havana Cuba Lusaka Zambia +Havana Cuba Madrid Spain +Havana Cuba Managua Nicaragua +Havana Cuba Manama Bahrain +Havana Cuba Manila Philippines +Havana Cuba Maputo Mozambique +Havana Cuba Minsk Belarus +Havana Cuba Mogadishu Somalia +Havana Cuba Monrovia Liberia +Havana Cuba Montevideo Uruguay +Havana Cuba Moscow Russia +Havana Cuba Muscat Oman +Havana Cuba Nairobi Kenya +Havana Cuba Nassau Bahamas +Havana Cuba Niamey Niger +Havana Cuba Nicosia Cyprus +Havana Cuba Nouakchott Mauritania +Havana Cuba Nuuk Greenland +Havana Cuba Oslo Norway +Havana Cuba Ottawa Canada +Havana Cuba Paramaribo Suriname +Havana Cuba Paris France +Helsinki Finland Islamabad Pakistan +Helsinki Finland Jakarta Indonesia +Helsinki Finland Kabul Afghanistan +Helsinki Finland Kampala Uganda +Helsinki Finland Kathmandu Nepal +Helsinki Finland Khartoum Sudan +Helsinki Finland Kiev Ukraine +Helsinki Finland Kigali Rwanda +Helsinki Finland Kingston Jamaica +Helsinki Finland Libreville Gabon +Helsinki Finland Lilongwe Malawi +Helsinki Finland Lima Peru +Helsinki Finland Lisbon Portugal +Helsinki Finland Ljubljana Slovenia +Helsinki Finland London England +Helsinki Finland Luanda Angola +Helsinki Finland Lusaka Zambia +Helsinki Finland Madrid Spain +Helsinki Finland Managua Nicaragua +Helsinki Finland Manama Bahrain +Helsinki Finland Manila Philippines +Helsinki Finland Maputo Mozambique +Helsinki Finland Minsk Belarus +Helsinki Finland Mogadishu Somalia +Helsinki Finland Monrovia Liberia +Helsinki Finland Montevideo Uruguay +Helsinki Finland Moscow Russia +Helsinki Finland Muscat Oman +Helsinki Finland Nairobi Kenya +Helsinki Finland Nassau Bahamas +Helsinki Finland Niamey Niger +Helsinki Finland Nicosia Cyprus +Helsinki Finland Nouakchott Mauritania +Helsinki Finland Nuuk Greenland +Helsinki Finland Oslo Norway +Helsinki Finland Ottawa Canada +Helsinki Finland Paramaribo Suriname +Helsinki Finland Paris France +Helsinki Finland Podgorica Montenegro +Islamabad Pakistan Jakarta Indonesia +Islamabad Pakistan Kabul Afghanistan +Islamabad Pakistan Kampala Uganda +Islamabad Pakistan Kathmandu Nepal +Islamabad Pakistan Khartoum Sudan +Islamabad Pakistan Kiev Ukraine +Islamabad Pakistan Kigali Rwanda +Islamabad Pakistan Kingston Jamaica +Islamabad Pakistan Libreville Gabon +Islamabad Pakistan Lilongwe Malawi +Islamabad Pakistan Lima Peru +Islamabad Pakistan Lisbon Portugal +Islamabad Pakistan Ljubljana Slovenia +Islamabad Pakistan London England +Islamabad Pakistan Luanda Angola +Islamabad Pakistan Lusaka Zambia +Islamabad Pakistan Madrid Spain +Islamabad Pakistan Managua Nicaragua +Islamabad Pakistan Manama Bahrain +Islamabad Pakistan Manila Philippines +Islamabad Pakistan Maputo Mozambique +Islamabad Pakistan Minsk Belarus +Islamabad Pakistan Mogadishu Somalia +Islamabad Pakistan Monrovia Liberia +Islamabad Pakistan Montevideo Uruguay +Islamabad Pakistan Moscow Russia +Islamabad Pakistan Muscat Oman +Islamabad Pakistan Nairobi Kenya +Islamabad Pakistan Nassau Bahamas +Islamabad Pakistan Niamey Niger +Islamabad Pakistan Nicosia Cyprus +Islamabad Pakistan Nouakchott Mauritania +Islamabad Pakistan Nuuk Greenland +Islamabad Pakistan Oslo Norway +Islamabad Pakistan Ottawa Canada +Islamabad Pakistan Paramaribo Suriname +Islamabad Pakistan Paris France +Islamabad Pakistan Podgorica Montenegro +Islamabad Pakistan Quito Ecuador +Jakarta Indonesia Kabul Afghanistan +Jakarta Indonesia Kampala Uganda +Jakarta Indonesia Kathmandu Nepal +Jakarta Indonesia Khartoum Sudan +Jakarta Indonesia Kiev Ukraine +Jakarta Indonesia Kigali Rwanda +Jakarta Indonesia Kingston Jamaica +Jakarta Indonesia Libreville Gabon +Jakarta Indonesia Lilongwe Malawi +Jakarta Indonesia Lima Peru +Jakarta Indonesia Lisbon Portugal +Jakarta Indonesia Ljubljana Slovenia +Jakarta Indonesia London England +Jakarta Indonesia Luanda Angola +Jakarta Indonesia Lusaka Zambia +Jakarta Indonesia Madrid Spain +Jakarta Indonesia Managua Nicaragua +Jakarta Indonesia Manama Bahrain +Jakarta Indonesia Manila Philippines +Jakarta Indonesia Maputo Mozambique +Jakarta Indonesia Minsk Belarus +Jakarta Indonesia Mogadishu Somalia +Jakarta Indonesia Monrovia Liberia +Jakarta Indonesia Montevideo Uruguay +Jakarta Indonesia Moscow Russia +Jakarta Indonesia Muscat Oman +Jakarta Indonesia Nairobi Kenya +Jakarta Indonesia Nassau Bahamas +Jakarta Indonesia Niamey Niger +Jakarta Indonesia Nicosia Cyprus +Jakarta Indonesia Nouakchott Mauritania +Jakarta Indonesia Nuuk Greenland +Jakarta Indonesia Oslo Norway +Jakarta Indonesia Ottawa Canada +Jakarta Indonesia Paramaribo Suriname +Jakarta Indonesia Paris France +Jakarta Indonesia Podgorica Montenegro +Jakarta Indonesia Quito Ecuador +Jakarta Indonesia Rabat Morocco +Kabul Afghanistan Kampala Uganda +Kabul Afghanistan Kathmandu Nepal +Kabul Afghanistan Khartoum Sudan +Kabul Afghanistan Kiev Ukraine +Kabul Afghanistan Kigali Rwanda +Kabul Afghanistan Kingston Jamaica +Kabul Afghanistan Libreville Gabon +Kabul Afghanistan Lilongwe Malawi +Kabul Afghanistan Lima Peru +Kabul Afghanistan Lisbon Portugal +Kabul Afghanistan Ljubljana Slovenia +Kabul Afghanistan London England +Kabul Afghanistan Luanda Angola +Kabul Afghanistan Lusaka Zambia +Kabul Afghanistan Madrid Spain +Kabul Afghanistan Managua Nicaragua +Kabul Afghanistan Manama Bahrain +Kabul Afghanistan Manila Philippines +Kabul Afghanistan Maputo Mozambique +Kabul Afghanistan Minsk Belarus +Kabul Afghanistan Mogadishu Somalia +Kabul Afghanistan Monrovia Liberia +Kabul Afghanistan Montevideo Uruguay +Kabul Afghanistan Moscow Russia +Kabul Afghanistan Muscat Oman +Kabul Afghanistan Nairobi Kenya +Kabul Afghanistan Nassau Bahamas +Kabul Afghanistan Niamey Niger +Kabul Afghanistan Nicosia Cyprus +Kabul Afghanistan Nouakchott Mauritania +Kabul Afghanistan Nuuk Greenland +Kabul Afghanistan Oslo Norway +Kabul Afghanistan Ottawa Canada +Kabul Afghanistan Paramaribo Suriname +Kabul Afghanistan Paris France +Kabul Afghanistan Podgorica Montenegro +Kabul Afghanistan Quito Ecuador +Kabul Afghanistan Rabat Morocco +Kabul Afghanistan Riga Latvia +Kampala Uganda Kathmandu Nepal +Kampala Uganda Khartoum Sudan +Kampala Uganda Kiev Ukraine +Kampala Uganda Kigali Rwanda +Kampala Uganda Kingston Jamaica +Kampala Uganda Libreville Gabon +Kampala Uganda Lilongwe Malawi +Kampala Uganda Lima Peru +Kampala Uganda Lisbon Portugal +Kampala Uganda Ljubljana Slovenia +Kampala Uganda London England +Kampala Uganda Luanda Angola +Kampala Uganda Lusaka Zambia +Kampala Uganda Madrid Spain +Kampala Uganda Managua Nicaragua +Kampala Uganda Manama Bahrain +Kampala Uganda Manila Philippines +Kampala Uganda Maputo Mozambique +Kampala Uganda Minsk Belarus +Kampala Uganda Mogadishu Somalia +Kampala Uganda Monrovia Liberia +Kampala Uganda Montevideo Uruguay +Kampala Uganda Moscow Russia +Kampala Uganda Muscat Oman +Kampala Uganda Nairobi Kenya +Kampala Uganda Nassau Bahamas +Kampala Uganda Niamey Niger +Kampala Uganda Nicosia Cyprus +Kampala Uganda Nouakchott Mauritania +Kampala Uganda Nuuk Greenland +Kampala Uganda Oslo Norway +Kampala Uganda Ottawa Canada +Kampala Uganda Paramaribo Suriname +Kampala Uganda Paris France +Kampala Uganda Podgorica Montenegro +Kampala Uganda Quito Ecuador +Kampala Uganda Rabat Morocco +Kampala Uganda Riga Latvia +Kampala Uganda Rome Italy +Kathmandu Nepal Khartoum Sudan +Kathmandu Nepal Kiev Ukraine +Kathmandu Nepal Kigali Rwanda +Kathmandu Nepal Kingston Jamaica +Kathmandu Nepal Libreville Gabon +Kathmandu Nepal Lilongwe Malawi +Kathmandu Nepal Lima Peru +Kathmandu Nepal Lisbon Portugal +Kathmandu Nepal Ljubljana Slovenia +Kathmandu Nepal London England +Kathmandu Nepal Luanda Angola +Kathmandu Nepal Lusaka Zambia +Kathmandu Nepal Madrid Spain +Kathmandu Nepal Managua Nicaragua +Kathmandu Nepal Manama Bahrain +Kathmandu Nepal Manila Philippines +Kathmandu Nepal Maputo Mozambique +Kathmandu Nepal Minsk Belarus +Kathmandu Nepal Mogadishu Somalia +Kathmandu Nepal Monrovia Liberia +Kathmandu Nepal Montevideo Uruguay +Kathmandu Nepal Moscow Russia +Kathmandu Nepal Muscat Oman +Kathmandu Nepal Nairobi Kenya +Kathmandu Nepal Nassau Bahamas +Kathmandu Nepal Niamey Niger +Kathmandu Nepal Nicosia Cyprus +Kathmandu Nepal Nouakchott Mauritania +Kathmandu Nepal Nuuk Greenland +Kathmandu Nepal Oslo Norway +Kathmandu Nepal Ottawa Canada +Kathmandu Nepal Paramaribo Suriname +Kathmandu Nepal Paris France +Kathmandu Nepal Podgorica Montenegro +Kathmandu Nepal Quito Ecuador +Kathmandu Nepal Rabat Morocco +Kathmandu Nepal Riga Latvia +Kathmandu Nepal Rome Italy +Kathmandu Nepal Roseau Dominica +Khartoum Sudan Kiev Ukraine +Khartoum Sudan Kigali Rwanda +Khartoum Sudan Kingston Jamaica +Khartoum Sudan Libreville Gabon +Khartoum Sudan Lilongwe Malawi +Khartoum Sudan Lima Peru +Khartoum Sudan Lisbon Portugal +Khartoum Sudan Ljubljana Slovenia +Khartoum Sudan London England +Khartoum Sudan Luanda Angola +Khartoum Sudan Lusaka Zambia +Khartoum Sudan Madrid Spain +Khartoum Sudan Managua Nicaragua +Khartoum Sudan Manama Bahrain +Khartoum Sudan Manila Philippines +Khartoum Sudan Maputo Mozambique +Khartoum Sudan Minsk Belarus +Khartoum Sudan Mogadishu Somalia +Khartoum Sudan Monrovia Liberia +Khartoum Sudan Montevideo Uruguay +Khartoum Sudan Moscow Russia +Khartoum Sudan Muscat Oman +Khartoum Sudan Nairobi Kenya +Khartoum Sudan Nassau Bahamas +Khartoum Sudan Niamey Niger +Khartoum Sudan Nicosia Cyprus +Khartoum Sudan Nouakchott Mauritania +Khartoum Sudan Nuuk Greenland +Khartoum Sudan Oslo Norway +Khartoum Sudan Ottawa Canada +Khartoum Sudan Paramaribo Suriname +Khartoum Sudan Paris France +Khartoum Sudan Podgorica Montenegro +Khartoum Sudan Quito Ecuador +Khartoum Sudan Rabat Morocco +Khartoum Sudan Riga Latvia +Khartoum Sudan Rome Italy +Khartoum Sudan Roseau Dominica +Khartoum Sudan Santiago Chile +Kiev Ukraine Kigali Rwanda +Kiev Ukraine Kingston Jamaica +Kiev Ukraine Libreville Gabon +Kiev Ukraine Lilongwe Malawi +Kiev Ukraine Lima Peru +Kiev Ukraine Lisbon Portugal +Kiev Ukraine Ljubljana Slovenia +Kiev Ukraine London England +Kiev Ukraine Luanda Angola +Kiev Ukraine Lusaka Zambia +Kiev Ukraine Madrid Spain +Kiev Ukraine Managua Nicaragua +Kiev Ukraine Manama Bahrain +Kiev Ukraine Manila Philippines +Kiev Ukraine Maputo Mozambique +Kiev Ukraine Minsk Belarus +Kiev Ukraine Mogadishu Somalia +Kiev Ukraine Monrovia Liberia +Kiev Ukraine Montevideo Uruguay +Kiev Ukraine Moscow Russia +Kiev Ukraine Muscat Oman +Kiev Ukraine Nairobi Kenya +Kiev Ukraine Nassau Bahamas +Kiev Ukraine Niamey Niger +Kiev Ukraine Nicosia Cyprus +Kiev Ukraine Nouakchott Mauritania +Kiev Ukraine Nuuk Greenland +Kiev Ukraine Oslo Norway +Kiev Ukraine Ottawa Canada +Kiev Ukraine Paramaribo Suriname +Kiev Ukraine Paris France +Kiev Ukraine Podgorica Montenegro +Kiev Ukraine Quito Ecuador +Kiev Ukraine Rabat Morocco +Kiev Ukraine Riga Latvia +Kiev Ukraine Rome Italy +Kiev Ukraine Roseau Dominica +Kiev Ukraine Santiago Chile +Kiev Ukraine Skopje Macedonia +Kigali Rwanda Kingston Jamaica +Kigali Rwanda Libreville Gabon +Kigali Rwanda Lilongwe Malawi +Kigali Rwanda Lima Peru +Kigali Rwanda Lisbon Portugal +Kigali Rwanda Ljubljana Slovenia +Kigali Rwanda London England +Kigali Rwanda Luanda Angola +Kigali Rwanda Lusaka Zambia +Kigali Rwanda Madrid Spain +Kigali Rwanda Managua Nicaragua +Kigali Rwanda Manama Bahrain +Kigali Rwanda Manila Philippines +Kigali Rwanda Maputo Mozambique +Kigali Rwanda Minsk Belarus +Kigali Rwanda Mogadishu Somalia +Kigali Rwanda Monrovia Liberia +Kigali Rwanda Montevideo Uruguay +Kigali Rwanda Moscow Russia +Kigali Rwanda Muscat Oman +Kigali Rwanda Nairobi Kenya +Kigali Rwanda Nassau Bahamas +Kigali Rwanda Niamey Niger +Kigali Rwanda Nicosia Cyprus +Kigali Rwanda Nouakchott Mauritania +Kigali Rwanda Nuuk Greenland +Kigali Rwanda Oslo Norway +Kigali Rwanda Ottawa Canada +Kigali Rwanda Paramaribo Suriname +Kigali Rwanda Paris France +Kigali Rwanda Podgorica Montenegro +Kigali Rwanda Quito Ecuador +Kigali Rwanda Rabat Morocco +Kigali Rwanda Riga Latvia +Kigali Rwanda Rome Italy +Kigali Rwanda Roseau Dominica +Kigali Rwanda Santiago Chile +Kigali Rwanda Skopje Macedonia +Kigali Rwanda Sofia Bulgaria +Kingston Jamaica Libreville Gabon +Kingston Jamaica Lilongwe Malawi +Kingston Jamaica Lima Peru +Kingston Jamaica Lisbon Portugal +Kingston Jamaica Ljubljana Slovenia +Kingston Jamaica London England +Kingston Jamaica Luanda Angola +Kingston Jamaica Lusaka Zambia +Kingston Jamaica Madrid Spain +Kingston Jamaica Managua Nicaragua +Kingston Jamaica Manama Bahrain +Kingston Jamaica Manila Philippines +Kingston Jamaica Maputo Mozambique +Kingston Jamaica Minsk Belarus +Kingston Jamaica Mogadishu Somalia +Kingston Jamaica Monrovia Liberia +Kingston Jamaica Montevideo Uruguay +Kingston Jamaica Moscow Russia +Kingston Jamaica Muscat Oman +Kingston Jamaica Nairobi Kenya +Kingston Jamaica Nassau Bahamas +Kingston Jamaica Niamey Niger +Kingston Jamaica Nicosia Cyprus +Kingston Jamaica Nouakchott Mauritania +Kingston Jamaica Nuuk Greenland +Kingston Jamaica Oslo Norway +Kingston Jamaica Ottawa Canada +Kingston Jamaica Paramaribo Suriname +Kingston Jamaica Paris France +Kingston Jamaica Podgorica Montenegro +Kingston Jamaica Quito Ecuador +Kingston Jamaica Rabat Morocco +Kingston Jamaica Riga Latvia +Kingston Jamaica Rome Italy +Kingston Jamaica Roseau Dominica +Kingston Jamaica Santiago Chile +Kingston Jamaica Skopje Macedonia +Kingston Jamaica Sofia Bulgaria +Kingston Jamaica Stockholm Sweden +Libreville Gabon Lilongwe Malawi +Libreville Gabon Lima Peru +Libreville Gabon Lisbon Portugal +Libreville Gabon Ljubljana Slovenia +Libreville Gabon London England +Libreville Gabon Luanda Angola +Libreville Gabon Lusaka Zambia +Libreville Gabon Madrid Spain +Libreville Gabon Managua Nicaragua +Libreville Gabon Manama Bahrain +Libreville Gabon Manila Philippines +Libreville Gabon Maputo Mozambique +Libreville Gabon Minsk Belarus +Libreville Gabon Mogadishu Somalia +Libreville Gabon Monrovia Liberia +Libreville Gabon Montevideo Uruguay +Libreville Gabon Moscow Russia +Libreville Gabon Muscat Oman +Libreville Gabon Nairobi Kenya +Libreville Gabon Nassau Bahamas +Libreville Gabon Niamey Niger +Libreville Gabon Nicosia Cyprus +Libreville Gabon Nouakchott Mauritania +Libreville Gabon Nuuk Greenland +Libreville Gabon Oslo Norway +Libreville Gabon Ottawa Canada +Libreville Gabon Paramaribo Suriname +Libreville Gabon Paris France +Libreville Gabon Podgorica Montenegro +Libreville Gabon Quito Ecuador +Libreville Gabon Rabat Morocco +Libreville Gabon Riga Latvia +Libreville Gabon Rome Italy +Libreville Gabon Roseau Dominica +Libreville Gabon Santiago Chile +Libreville Gabon Skopje Macedonia +Libreville Gabon Sofia Bulgaria +Libreville Gabon Stockholm Sweden +Libreville Gabon Suva Fiji +Lilongwe Malawi Lima Peru +Lilongwe Malawi Lisbon Portugal +Lilongwe Malawi Ljubljana Slovenia +Lilongwe Malawi London England +Lilongwe Malawi Luanda Angola +Lilongwe Malawi Lusaka Zambia +Lilongwe Malawi Madrid Spain +Lilongwe Malawi Managua Nicaragua +Lilongwe Malawi Manama Bahrain +Lilongwe Malawi Manila Philippines +Lilongwe Malawi Maputo Mozambique +Lilongwe Malawi Minsk Belarus +Lilongwe Malawi Mogadishu Somalia +Lilongwe Malawi Monrovia Liberia +Lilongwe Malawi Montevideo Uruguay +Lilongwe Malawi Moscow Russia +Lilongwe Malawi Muscat Oman +Lilongwe Malawi Nairobi Kenya +Lilongwe Malawi Nassau Bahamas +Lilongwe Malawi Niamey Niger +Lilongwe Malawi Nicosia Cyprus +Lilongwe Malawi Nouakchott Mauritania +Lilongwe Malawi Nuuk Greenland +Lilongwe Malawi Oslo Norway +Lilongwe Malawi Ottawa Canada +Lilongwe Malawi Paramaribo Suriname +Lilongwe Malawi Paris France +Lilongwe Malawi Podgorica Montenegro +Lilongwe Malawi Quito Ecuador +Lilongwe Malawi Rabat Morocco +Lilongwe Malawi Riga Latvia +Lilongwe Malawi Rome Italy +Lilongwe Malawi Roseau Dominica +Lilongwe Malawi Santiago Chile +Lilongwe Malawi Skopje Macedonia +Lilongwe Malawi Sofia Bulgaria +Lilongwe Malawi Stockholm Sweden +Lilongwe Malawi Suva Fiji +Lilongwe Malawi Taipei Taiwan +Lima Peru Lisbon Portugal +Lima Peru Ljubljana Slovenia +Lima Peru London England +Lima Peru Luanda Angola +Lima Peru Lusaka Zambia +Lima Peru Madrid Spain +Lima Peru Managua Nicaragua +Lima Peru Manama Bahrain +Lima Peru Manila Philippines +Lima Peru Maputo Mozambique +Lima Peru Minsk Belarus +Lima Peru Mogadishu Somalia +Lima Peru Monrovia Liberia +Lima Peru Montevideo Uruguay +Lima Peru Moscow Russia +Lima Peru Muscat Oman +Lima Peru Nairobi Kenya +Lima Peru Nassau Bahamas +Lima Peru Niamey Niger +Lima Peru Nicosia Cyprus +Lima Peru Nouakchott Mauritania +Lima Peru Nuuk Greenland +Lima Peru Oslo Norway +Lima Peru Ottawa Canada +Lima Peru Paramaribo Suriname +Lima Peru Paris France +Lima Peru Podgorica Montenegro +Lima Peru Quito Ecuador +Lima Peru Rabat Morocco +Lima Peru Riga Latvia +Lima Peru Rome Italy +Lima Peru Roseau Dominica +Lima Peru Santiago Chile +Lima Peru Skopje Macedonia +Lima Peru Sofia Bulgaria +Lima Peru Stockholm Sweden +Lima Peru Suva Fiji +Lima Peru Taipei Taiwan +Lima Peru Tallinn Estonia +Lisbon Portugal Ljubljana Slovenia +Lisbon Portugal London England +Lisbon Portugal Luanda Angola +Lisbon Portugal Lusaka Zambia +Lisbon Portugal Madrid Spain +Lisbon Portugal Managua Nicaragua +Lisbon Portugal Manama Bahrain +Lisbon Portugal Manila Philippines +Lisbon Portugal Maputo Mozambique +Lisbon Portugal Minsk Belarus +Lisbon Portugal Mogadishu Somalia +Lisbon Portugal Monrovia Liberia +Lisbon Portugal Montevideo Uruguay +Lisbon Portugal Moscow Russia +Lisbon Portugal Muscat Oman +Lisbon Portugal Nairobi Kenya +Lisbon Portugal Nassau Bahamas +Lisbon Portugal Niamey Niger +Lisbon Portugal Nicosia Cyprus +Lisbon Portugal Nouakchott Mauritania +Lisbon Portugal Nuuk Greenland +Lisbon Portugal Oslo Norway +Lisbon Portugal Ottawa Canada +Lisbon Portugal Paramaribo Suriname +Lisbon Portugal Paris France +Lisbon Portugal Podgorica Montenegro +Lisbon Portugal Quito Ecuador +Lisbon Portugal Rabat Morocco +Lisbon Portugal Riga Latvia +Lisbon Portugal Rome Italy +Lisbon Portugal Roseau Dominica +Lisbon Portugal Santiago Chile +Lisbon Portugal Skopje Macedonia +Lisbon Portugal Sofia Bulgaria +Lisbon Portugal Stockholm Sweden +Lisbon Portugal Suva Fiji +Lisbon Portugal Taipei Taiwan +Lisbon Portugal Tallinn Estonia +Lisbon Portugal Tashkent Uzbekistan +Ljubljana Slovenia London England +Ljubljana Slovenia Luanda Angola +Ljubljana Slovenia Lusaka Zambia +Ljubljana Slovenia Madrid Spain +Ljubljana Slovenia Managua Nicaragua +Ljubljana Slovenia Manama Bahrain +Ljubljana Slovenia Manila Philippines +Ljubljana Slovenia Maputo Mozambique +Ljubljana Slovenia Minsk Belarus +Ljubljana Slovenia Mogadishu Somalia +Ljubljana Slovenia Monrovia Liberia +Ljubljana Slovenia Montevideo Uruguay +Ljubljana Slovenia Moscow Russia +Ljubljana Slovenia Muscat Oman +Ljubljana Slovenia Nairobi Kenya +Ljubljana Slovenia Nassau Bahamas +Ljubljana Slovenia Niamey Niger +Ljubljana Slovenia Nicosia Cyprus +Ljubljana Slovenia Nouakchott Mauritania +Ljubljana Slovenia Nuuk Greenland +Ljubljana Slovenia Oslo Norway +Ljubljana Slovenia Ottawa Canada +Ljubljana Slovenia Paramaribo Suriname +Ljubljana Slovenia Paris France +Ljubljana Slovenia Podgorica Montenegro +Ljubljana Slovenia Quito Ecuador +Ljubljana Slovenia Rabat Morocco +Ljubljana Slovenia Riga Latvia +Ljubljana Slovenia Rome Italy +Ljubljana Slovenia Roseau Dominica +Ljubljana Slovenia Santiago Chile +Ljubljana Slovenia Skopje Macedonia +Ljubljana Slovenia Sofia Bulgaria +Ljubljana Slovenia Stockholm Sweden +Ljubljana Slovenia Suva Fiji +Ljubljana Slovenia Taipei Taiwan +Ljubljana Slovenia Tallinn Estonia +Ljubljana Slovenia Tashkent Uzbekistan +Ljubljana Slovenia Tbilisi Georgia +London England Luanda Angola +London England Lusaka Zambia +London England Madrid Spain +London England Managua Nicaragua +London England Manama Bahrain +London England Manila Philippines +London England Maputo Mozambique +London England Minsk Belarus +London England Mogadishu Somalia +London England Monrovia Liberia +London England Montevideo Uruguay +London England Moscow Russia +London England Muscat Oman +London England Nairobi Kenya +London England Nassau Bahamas +London England Niamey Niger +London England Nicosia Cyprus +London England Nouakchott Mauritania +London England Nuuk Greenland +London England Oslo Norway +London England Ottawa Canada +London England Paramaribo Suriname +London England Paris France +London England Podgorica Montenegro +London England Quito Ecuador +London England Rabat Morocco +London England Riga Latvia +London England Rome Italy +London England Roseau Dominica +London England Santiago Chile +London England Skopje Macedonia +London England Sofia Bulgaria +London England Stockholm Sweden +London England Suva Fiji +London England Taipei Taiwan +London England Tallinn Estonia +London England Tashkent Uzbekistan +London England Tbilisi Georgia +London England Tegucigalpa Honduras +Luanda Angola Lusaka Zambia +Luanda Angola Madrid Spain +Luanda Angola Managua Nicaragua +Luanda Angola Manama Bahrain +Luanda Angola Manila Philippines +Luanda Angola Maputo Mozambique +Luanda Angola Minsk Belarus +Luanda Angola Mogadishu Somalia +Luanda Angola Monrovia Liberia +Luanda Angola Montevideo Uruguay +Luanda Angola Moscow Russia +Luanda Angola Muscat Oman +Luanda Angola Nairobi Kenya +Luanda Angola Nassau Bahamas +Luanda Angola Niamey Niger +Luanda Angola Nicosia Cyprus +Luanda Angola Nouakchott Mauritania +Luanda Angola Nuuk Greenland +Luanda Angola Oslo Norway +Luanda Angola Ottawa Canada +Luanda Angola Paramaribo Suriname +Luanda Angola Paris France +Luanda Angola Podgorica Montenegro +Luanda Angola Quito Ecuador +Luanda Angola Rabat Morocco +Luanda Angola Riga Latvia +Luanda Angola Rome Italy +Luanda Angola Roseau Dominica +Luanda Angola Santiago Chile +Luanda Angola Skopje Macedonia +Luanda Angola Sofia Bulgaria +Luanda Angola Stockholm Sweden +Luanda Angola Suva Fiji +Luanda Angola Taipei Taiwan +Luanda Angola Tallinn Estonia +Luanda Angola Tashkent Uzbekistan +Luanda Angola Tbilisi Georgia +Luanda Angola Tegucigalpa Honduras +Luanda Angola Tehran Iran +Lusaka Zambia Madrid Spain +Lusaka Zambia Managua Nicaragua +Lusaka Zambia Manama Bahrain +Lusaka Zambia Manila Philippines +Lusaka Zambia Maputo Mozambique +Lusaka Zambia Minsk Belarus +Lusaka Zambia Mogadishu Somalia +Lusaka Zambia Monrovia Liberia +Lusaka Zambia Montevideo Uruguay +Lusaka Zambia Moscow Russia +Lusaka Zambia Muscat Oman +Lusaka Zambia Nairobi Kenya +Lusaka Zambia Nassau Bahamas +Lusaka Zambia Niamey Niger +Lusaka Zambia Nicosia Cyprus +Lusaka Zambia Nouakchott Mauritania +Lusaka Zambia Nuuk Greenland +Lusaka Zambia Oslo Norway +Lusaka Zambia Ottawa Canada +Lusaka Zambia Paramaribo Suriname +Lusaka Zambia Paris France +Lusaka Zambia Podgorica Montenegro +Lusaka Zambia Quito Ecuador +Lusaka Zambia Rabat Morocco +Lusaka Zambia Riga Latvia +Lusaka Zambia Rome Italy +Lusaka Zambia Roseau Dominica +Lusaka Zambia Santiago Chile +Lusaka Zambia Skopje Macedonia +Lusaka Zambia Sofia Bulgaria +Lusaka Zambia Stockholm Sweden +Lusaka Zambia Suva Fiji +Lusaka Zambia Taipei Taiwan +Lusaka Zambia Tallinn Estonia +Lusaka Zambia Tashkent Uzbekistan +Lusaka Zambia Tbilisi Georgia +Lusaka Zambia Tegucigalpa Honduras +Lusaka Zambia Tehran Iran +Lusaka Zambia Thimphu Bhutan +Madrid Spain Managua Nicaragua +Madrid Spain Manama Bahrain +Madrid Spain Manila Philippines +Madrid Spain Maputo Mozambique +Madrid Spain Minsk Belarus +Madrid Spain Mogadishu Somalia +Madrid Spain Monrovia Liberia +Madrid Spain Montevideo Uruguay +Madrid Spain Moscow Russia +Madrid Spain Muscat Oman +Madrid Spain Nairobi Kenya +Madrid Spain Nassau Bahamas +Madrid Spain Niamey Niger +Madrid Spain Nicosia Cyprus +Madrid Spain Nouakchott Mauritania +Madrid Spain Nuuk Greenland +Madrid Spain Oslo Norway +Madrid Spain Ottawa Canada +Madrid Spain Paramaribo Suriname +Madrid Spain Paris France +Madrid Spain Podgorica Montenegro +Madrid Spain Quito Ecuador +Madrid Spain Rabat Morocco +Madrid Spain Riga Latvia +Madrid Spain Rome Italy +Madrid Spain Roseau Dominica +Madrid Spain Santiago Chile +Madrid Spain Skopje Macedonia +Madrid Spain Sofia Bulgaria +Madrid Spain Stockholm Sweden +Madrid Spain Suva Fiji +Madrid Spain Taipei Taiwan +Madrid Spain Tallinn Estonia +Madrid Spain Tashkent Uzbekistan +Madrid Spain Tbilisi Georgia +Madrid Spain Tegucigalpa Honduras +Madrid Spain Tehran Iran +Madrid Spain Thimphu Bhutan +Madrid Spain Tirana Albania +Managua Nicaragua Manama Bahrain +Managua Nicaragua Manila Philippines +Managua Nicaragua Maputo Mozambique +Managua Nicaragua Minsk Belarus +Managua Nicaragua Mogadishu Somalia +Managua Nicaragua Monrovia Liberia +Managua Nicaragua Montevideo Uruguay +Managua Nicaragua Moscow Russia +Managua Nicaragua Muscat Oman +Managua Nicaragua Nairobi Kenya +Managua Nicaragua Nassau Bahamas +Managua Nicaragua Niamey Niger +Managua Nicaragua Nicosia Cyprus +Managua Nicaragua Nouakchott Mauritania +Managua Nicaragua Nuuk Greenland +Managua Nicaragua Oslo Norway +Managua Nicaragua Ottawa Canada +Managua Nicaragua Paramaribo Suriname +Managua Nicaragua Paris France +Managua Nicaragua Podgorica Montenegro +Managua Nicaragua Quito Ecuador +Managua Nicaragua Rabat Morocco +Managua Nicaragua Riga Latvia +Managua Nicaragua Rome Italy +Managua Nicaragua Roseau Dominica +Managua Nicaragua Santiago Chile +Managua Nicaragua Skopje Macedonia +Managua Nicaragua Sofia Bulgaria +Managua Nicaragua Stockholm Sweden +Managua Nicaragua Suva Fiji +Managua Nicaragua Taipei Taiwan +Managua Nicaragua Tallinn Estonia +Managua Nicaragua Tashkent Uzbekistan +Managua Nicaragua Tbilisi Georgia +Managua Nicaragua Tegucigalpa Honduras +Managua Nicaragua Tehran Iran +Managua Nicaragua Thimphu Bhutan +Managua Nicaragua Tirana Albania +Managua Nicaragua Tokyo Japan +Manama Bahrain Manila Philippines +Manama Bahrain Maputo Mozambique +Manama Bahrain Minsk Belarus +Manama Bahrain Mogadishu Somalia +Manama Bahrain Monrovia Liberia +Manama Bahrain Montevideo Uruguay +Manama Bahrain Moscow Russia +Manama Bahrain Muscat Oman +Manama Bahrain Nairobi Kenya +Manama Bahrain Nassau Bahamas +Manama Bahrain Niamey Niger +Manama Bahrain Nicosia Cyprus +Manama Bahrain Nouakchott Mauritania +Manama Bahrain Nuuk Greenland +Manama Bahrain Oslo Norway +Manama Bahrain Ottawa Canada +Manama Bahrain Paramaribo Suriname +Manama Bahrain Paris France +Manama Bahrain Podgorica Montenegro +Manama Bahrain Quito Ecuador +Manama Bahrain Rabat Morocco +Manama Bahrain Riga Latvia +Manama Bahrain Rome Italy +Manama Bahrain Roseau Dominica +Manama Bahrain Santiago Chile +Manama Bahrain Skopje Macedonia +Manama Bahrain Sofia Bulgaria +Manama Bahrain Stockholm Sweden +Manama Bahrain Suva Fiji +Manama Bahrain Taipei Taiwan +Manama Bahrain Tallinn Estonia +Manama Bahrain Tashkent Uzbekistan +Manama Bahrain Tbilisi Georgia +Manama Bahrain Tegucigalpa Honduras +Manama Bahrain Tehran Iran +Manama Bahrain Thimphu Bhutan +Manama Bahrain Tirana Albania +Manama Bahrain Tokyo Japan +Manama Bahrain Tripoli Libya +Manila Philippines Maputo Mozambique +Manila Philippines Minsk Belarus +Manila Philippines Mogadishu Somalia +Manila Philippines Monrovia Liberia +Manila Philippines Montevideo Uruguay +Manila Philippines Moscow Russia +Manila Philippines Muscat Oman +Manila Philippines Nairobi Kenya +Manila Philippines Nassau Bahamas +Manila Philippines Niamey Niger +Manila Philippines Nicosia Cyprus +Manila Philippines Nouakchott Mauritania +Manila Philippines Nuuk Greenland +Manila Philippines Oslo Norway +Manila Philippines Ottawa Canada +Manila Philippines Paramaribo Suriname +Manila Philippines Paris France +Manila Philippines Podgorica Montenegro +Manila Philippines Quito Ecuador +Manila Philippines Rabat Morocco +Manila Philippines Riga Latvia +Manila Philippines Rome Italy +Manila Philippines Roseau Dominica +Manila Philippines Santiago Chile +Manila Philippines Skopje Macedonia +Manila Philippines Sofia Bulgaria +Manila Philippines Stockholm Sweden +Manila Philippines Suva Fiji +Manila Philippines Taipei Taiwan +Manila Philippines Tallinn Estonia +Manila Philippines Tashkent Uzbekistan +Manila Philippines Tbilisi Georgia +Manila Philippines Tegucigalpa Honduras +Manila Philippines Tehran Iran +Manila Philippines Thimphu Bhutan +Manila Philippines Tirana Albania +Manila Philippines Tokyo Japan +Manila Philippines Tripoli Libya +Manila Philippines Tunis Tunisia +Maputo Mozambique Minsk Belarus +Maputo Mozambique Mogadishu Somalia +Maputo Mozambique Monrovia Liberia +Maputo Mozambique Montevideo Uruguay +Maputo Mozambique Moscow Russia +Maputo Mozambique Muscat Oman +Maputo Mozambique Nairobi Kenya +Maputo Mozambique Nassau Bahamas +Maputo Mozambique Niamey Niger +Maputo Mozambique Nicosia Cyprus +Maputo Mozambique Nouakchott Mauritania +Maputo Mozambique Nuuk Greenland +Maputo Mozambique Oslo Norway +Maputo Mozambique Ottawa Canada +Maputo Mozambique Paramaribo Suriname +Maputo Mozambique Paris France +Maputo Mozambique Podgorica Montenegro +Maputo Mozambique Quito Ecuador +Maputo Mozambique Rabat Morocco +Maputo Mozambique Riga Latvia +Maputo Mozambique Rome Italy +Maputo Mozambique Roseau Dominica +Maputo Mozambique Santiago Chile +Maputo Mozambique Skopje Macedonia +Maputo Mozambique Sofia Bulgaria +Maputo Mozambique Stockholm Sweden +Maputo Mozambique Suva Fiji +Maputo Mozambique Taipei Taiwan +Maputo Mozambique Tallinn Estonia +Maputo Mozambique Tashkent Uzbekistan +Maputo Mozambique Tbilisi Georgia +Maputo Mozambique Tegucigalpa Honduras +Maputo Mozambique Tehran Iran +Maputo Mozambique Thimphu Bhutan +Maputo Mozambique Tirana Albania +Maputo Mozambique Tokyo Japan +Maputo Mozambique Tripoli Libya +Maputo Mozambique Tunis Tunisia +Maputo Mozambique Vaduz Liechtenstein +Minsk Belarus Mogadishu Somalia +Minsk Belarus Monrovia Liberia +Minsk Belarus Montevideo Uruguay +Minsk Belarus Moscow Russia +Minsk Belarus Muscat Oman +Minsk Belarus Nairobi Kenya +Minsk Belarus Nassau Bahamas +Minsk Belarus Niamey Niger +Minsk Belarus Nicosia Cyprus +Minsk Belarus Nouakchott Mauritania +Minsk Belarus Nuuk Greenland +Minsk Belarus Oslo Norway +Minsk Belarus Ottawa Canada +Minsk Belarus Paramaribo Suriname +Minsk Belarus Paris France +Minsk Belarus Podgorica Montenegro +Minsk Belarus Quito Ecuador +Minsk Belarus Rabat Morocco +Minsk Belarus Riga Latvia +Minsk Belarus Rome Italy +Minsk Belarus Roseau Dominica +Minsk Belarus Santiago Chile +Minsk Belarus Skopje Macedonia +Minsk Belarus Sofia Bulgaria +Minsk Belarus Stockholm Sweden +Minsk Belarus Suva Fiji +Minsk Belarus Taipei Taiwan +Minsk Belarus Tallinn Estonia +Minsk Belarus Tashkent Uzbekistan +Minsk Belarus Tbilisi Georgia +Minsk Belarus Tegucigalpa Honduras +Minsk Belarus Tehran Iran +Minsk Belarus Thimphu Bhutan +Minsk Belarus Tirana Albania +Minsk Belarus Tokyo Japan +Minsk Belarus Tripoli Libya +Minsk Belarus Tunis Tunisia +Minsk Belarus Vaduz Liechtenstein +Minsk Belarus Valletta Malta +Mogadishu Somalia Monrovia Liberia +Mogadishu Somalia Montevideo Uruguay +Mogadishu Somalia Moscow Russia +Mogadishu Somalia Muscat Oman +Mogadishu Somalia Nairobi Kenya +Mogadishu Somalia Nassau Bahamas +Mogadishu Somalia Niamey Niger +Mogadishu Somalia Nicosia Cyprus +Mogadishu Somalia Nouakchott Mauritania +Mogadishu Somalia Nuuk Greenland +Mogadishu Somalia Oslo Norway +Mogadishu Somalia Ottawa Canada +Mogadishu Somalia Paramaribo Suriname +Mogadishu Somalia Paris France +Mogadishu Somalia Podgorica Montenegro +Mogadishu Somalia Quito Ecuador +Mogadishu Somalia Rabat Morocco +Mogadishu Somalia Riga Latvia +Mogadishu Somalia Rome Italy +Mogadishu Somalia Roseau Dominica +Mogadishu Somalia Santiago Chile +Mogadishu Somalia Skopje Macedonia +Mogadishu Somalia Sofia Bulgaria +Mogadishu Somalia Stockholm Sweden +Mogadishu Somalia Suva Fiji +Mogadishu Somalia Taipei Taiwan +Mogadishu Somalia Tallinn Estonia +Mogadishu Somalia Tashkent Uzbekistan +Mogadishu Somalia Tbilisi Georgia +Mogadishu Somalia Tegucigalpa Honduras +Mogadishu Somalia Tehran Iran +Mogadishu Somalia Thimphu Bhutan +Mogadishu Somalia Tirana Albania +Mogadishu Somalia Tokyo Japan +Mogadishu Somalia Tripoli Libya +Mogadishu Somalia Tunis Tunisia +Mogadishu Somalia Vaduz Liechtenstein +Mogadishu Somalia Valletta Malta +Mogadishu Somalia Vienna Austria +Monrovia Liberia Montevideo Uruguay +Monrovia Liberia Moscow Russia +Monrovia Liberia Muscat Oman +Monrovia Liberia Nairobi Kenya +Monrovia Liberia Nassau Bahamas +Monrovia Liberia Niamey Niger +Monrovia Liberia Nicosia Cyprus +Monrovia Liberia Nouakchott Mauritania +Monrovia Liberia Nuuk Greenland +Monrovia Liberia Oslo Norway +Monrovia Liberia Ottawa Canada +Monrovia Liberia Paramaribo Suriname +Monrovia Liberia Paris France +Monrovia Liberia Podgorica Montenegro +Monrovia Liberia Quito Ecuador +Monrovia Liberia Rabat Morocco +Monrovia Liberia Riga Latvia +Monrovia Liberia Rome Italy +Monrovia Liberia Roseau Dominica +Monrovia Liberia Santiago Chile +Monrovia Liberia Skopje Macedonia +Monrovia Liberia Sofia Bulgaria +Monrovia Liberia Stockholm Sweden +Monrovia Liberia Suva Fiji +Monrovia Liberia Taipei Taiwan +Monrovia Liberia Tallinn Estonia +Monrovia Liberia Tashkent Uzbekistan +Monrovia Liberia Tbilisi Georgia +Monrovia Liberia Tegucigalpa Honduras +Monrovia Liberia Tehran Iran +Monrovia Liberia Thimphu Bhutan +Monrovia Liberia Tirana Albania +Monrovia Liberia Tokyo Japan +Monrovia Liberia Tripoli Libya +Monrovia Liberia Tunis Tunisia +Monrovia Liberia Vaduz Liechtenstein +Monrovia Liberia Valletta Malta +Monrovia Liberia Vienna Austria +Monrovia Liberia Vientiane Laos +Montevideo Uruguay Moscow Russia +Montevideo Uruguay Muscat Oman +Montevideo Uruguay Nairobi Kenya +Montevideo Uruguay Nassau Bahamas +Montevideo Uruguay Niamey Niger +Montevideo Uruguay Nicosia Cyprus +Montevideo Uruguay Nouakchott Mauritania +Montevideo Uruguay Nuuk Greenland +Montevideo Uruguay Oslo Norway +Montevideo Uruguay Ottawa Canada +Montevideo Uruguay Paramaribo Suriname +Montevideo Uruguay Paris France +Montevideo Uruguay Podgorica Montenegro +Montevideo Uruguay Quito Ecuador +Montevideo Uruguay Rabat Morocco +Montevideo Uruguay Riga Latvia +Montevideo Uruguay Rome Italy +Montevideo Uruguay Roseau Dominica +Montevideo Uruguay Santiago Chile +Montevideo Uruguay Skopje Macedonia +Montevideo Uruguay Sofia Bulgaria +Montevideo Uruguay Stockholm Sweden +Montevideo Uruguay Suva Fiji +Montevideo Uruguay Taipei Taiwan +Montevideo Uruguay Tallinn Estonia +Montevideo Uruguay Tashkent Uzbekistan +Montevideo Uruguay Tbilisi Georgia +Montevideo Uruguay Tegucigalpa Honduras +Montevideo Uruguay Tehran Iran +Montevideo Uruguay Thimphu Bhutan +Montevideo Uruguay Tirana Albania +Montevideo Uruguay Tokyo Japan +Montevideo Uruguay Tripoli Libya +Montevideo Uruguay Tunis Tunisia +Montevideo Uruguay Vaduz Liechtenstein +Montevideo Uruguay Valletta Malta +Montevideo Uruguay Vienna Austria +Montevideo Uruguay Vientiane Laos +Montevideo Uruguay Vilnius Lithuania +Moscow Russia Muscat Oman +Moscow Russia Nairobi Kenya +Moscow Russia Nassau Bahamas +Moscow Russia Niamey Niger +Moscow Russia Nicosia Cyprus +Moscow Russia Nouakchott Mauritania +Moscow Russia Nuuk Greenland +Moscow Russia Oslo Norway +Moscow Russia Ottawa Canada +Moscow Russia Paramaribo Suriname +Moscow Russia Paris France +Moscow Russia Podgorica Montenegro +Moscow Russia Quito Ecuador +Moscow Russia Rabat Morocco +Moscow Russia Riga Latvia +Moscow Russia Rome Italy +Moscow Russia Roseau Dominica +Moscow Russia Santiago Chile +Moscow Russia Skopje Macedonia +Moscow Russia Sofia Bulgaria +Moscow Russia Stockholm Sweden +Moscow Russia Suva Fiji +Moscow Russia Taipei Taiwan +Moscow Russia Tallinn Estonia +Moscow Russia Tashkent Uzbekistan +Moscow Russia Tbilisi Georgia +Moscow Russia Tegucigalpa Honduras +Moscow Russia Tehran Iran +Moscow Russia Thimphu Bhutan +Moscow Russia Tirana Albania +Moscow Russia Tokyo Japan +Moscow Russia Tripoli Libya +Moscow Russia Tunis Tunisia +Moscow Russia Vaduz Liechtenstein +Moscow Russia Valletta Malta +Moscow Russia Vienna Austria +Moscow Russia Vientiane Laos +Moscow Russia Vilnius Lithuania +Moscow Russia Warsaw Poland +Muscat Oman Nairobi Kenya +Muscat Oman Nassau Bahamas +Muscat Oman Niamey Niger +Muscat Oman Nicosia Cyprus +Muscat Oman Nouakchott Mauritania +Muscat Oman Nuuk Greenland +Muscat Oman Oslo Norway +Muscat Oman Ottawa Canada +Muscat Oman Paramaribo Suriname +Muscat Oman Paris France +Muscat Oman Podgorica Montenegro +Muscat Oman Quito Ecuador +Muscat Oman Rabat Morocco +Muscat Oman Riga Latvia +Muscat Oman Rome Italy +Muscat Oman Roseau Dominica +Muscat Oman Santiago Chile +Muscat Oman Skopje Macedonia +Muscat Oman Sofia Bulgaria +Muscat Oman Stockholm Sweden +Muscat Oman Suva Fiji +Muscat Oman Taipei Taiwan +Muscat Oman Tallinn Estonia +Muscat Oman Tashkent Uzbekistan +Muscat Oman Tbilisi Georgia +Muscat Oman Tegucigalpa Honduras +Muscat Oman Tehran Iran +Muscat Oman Thimphu Bhutan +Muscat Oman Tirana Albania +Muscat Oman Tokyo Japan +Muscat Oman Tripoli Libya +Muscat Oman Tunis Tunisia +Muscat Oman Vaduz Liechtenstein +Muscat Oman Valletta Malta +Muscat Oman Vienna Austria +Muscat Oman Vientiane Laos +Muscat Oman Vilnius Lithuania +Muscat Oman Warsaw Poland +Muscat Oman Windhoek Namibia +Nairobi Kenya Nassau Bahamas +Nairobi Kenya Niamey Niger +Nairobi Kenya Nicosia Cyprus +Nairobi Kenya Nouakchott Mauritania +Nairobi Kenya Nuuk Greenland +Nairobi Kenya Oslo Norway +Nairobi Kenya Ottawa Canada +Nairobi Kenya Paramaribo Suriname +Nairobi Kenya Paris France +Nairobi Kenya Podgorica Montenegro +Nairobi Kenya Quito Ecuador +Nairobi Kenya Rabat Morocco +Nairobi Kenya Riga Latvia +Nairobi Kenya Rome Italy +Nairobi Kenya Roseau Dominica +Nairobi Kenya Santiago Chile +Nairobi Kenya Skopje Macedonia +Nairobi Kenya Sofia Bulgaria +Nairobi Kenya Stockholm Sweden +Nairobi Kenya Suva Fiji +Nairobi Kenya Taipei Taiwan +Nairobi Kenya Tallinn Estonia +Nairobi Kenya Tashkent Uzbekistan +Nairobi Kenya Tbilisi Georgia +Nairobi Kenya Tegucigalpa Honduras +Nairobi Kenya Tehran Iran +Nairobi Kenya Thimphu Bhutan +Nairobi Kenya Tirana Albania +Nairobi Kenya Tokyo Japan +Nairobi Kenya Tripoli Libya +Nairobi Kenya Tunis Tunisia +Nairobi Kenya Vaduz Liechtenstein +Nairobi Kenya Valletta Malta +Nairobi Kenya Vienna Austria +Nairobi Kenya Vientiane Laos +Nairobi Kenya Vilnius Lithuania +Nairobi Kenya Warsaw Poland +Nairobi Kenya Windhoek Namibia +Nairobi Kenya Yerevan Armenia +Nassau Bahamas Niamey Niger +Nassau Bahamas Nicosia Cyprus +Nassau Bahamas Nouakchott Mauritania +Nassau Bahamas Nuuk Greenland +Nassau Bahamas Oslo Norway +Nassau Bahamas Ottawa Canada +Nassau Bahamas Paramaribo Suriname +Nassau Bahamas Paris France +Nassau Bahamas Podgorica Montenegro +Nassau Bahamas Quito Ecuador +Nassau Bahamas Rabat Morocco +Nassau Bahamas Riga Latvia +Nassau Bahamas Rome Italy +Nassau Bahamas Roseau Dominica +Nassau Bahamas Santiago Chile +Nassau Bahamas Skopje Macedonia +Nassau Bahamas Sofia Bulgaria +Nassau Bahamas Stockholm Sweden +Nassau Bahamas Suva Fiji +Nassau Bahamas Taipei Taiwan +Nassau Bahamas Tallinn Estonia +Nassau Bahamas Tashkent Uzbekistan +Nassau Bahamas Tbilisi Georgia +Nassau Bahamas Tegucigalpa Honduras +Nassau Bahamas Tehran Iran +Nassau Bahamas Thimphu Bhutan +Nassau Bahamas Tirana Albania +Nassau Bahamas Tokyo Japan +Nassau Bahamas Tripoli Libya +Nassau Bahamas Tunis Tunisia +Nassau Bahamas Vaduz Liechtenstein +Nassau Bahamas Valletta Malta +Nassau Bahamas Vienna Austria +Nassau Bahamas Vientiane Laos +Nassau Bahamas Vilnius Lithuania +Nassau Bahamas Warsaw Poland +Nassau Bahamas Windhoek Namibia +Nassau Bahamas Yerevan Armenia +Nassau Bahamas Zagreb Croatia +Niamey Niger Nicosia Cyprus +Niamey Niger Nouakchott Mauritania +Niamey Niger Nuuk Greenland +Niamey Niger Oslo Norway +Niamey Niger Ottawa Canada +Niamey Niger Paramaribo Suriname +Niamey Niger Paris France +Niamey Niger Podgorica Montenegro +Niamey Niger Quito Ecuador +Niamey Niger Rabat Morocco +Niamey Niger Riga Latvia +Niamey Niger Rome Italy +Niamey Niger Roseau Dominica +Niamey Niger Santiago Chile +Niamey Niger Skopje Macedonia +Niamey Niger Sofia Bulgaria +Niamey Niger Stockholm Sweden +Niamey Niger Suva Fiji +Niamey Niger Taipei Taiwan +Niamey Niger Tallinn Estonia +Niamey Niger Tashkent Uzbekistan +Niamey Niger Tbilisi Georgia +Niamey Niger Tegucigalpa Honduras +Niamey Niger Tehran Iran +Niamey Niger Thimphu Bhutan +Niamey Niger Tirana Albania +Niamey Niger Tokyo Japan +Niamey Niger Tripoli Libya +Niamey Niger Tunis Tunisia +Niamey Niger Vaduz Liechtenstein +Niamey Niger Valletta Malta +Niamey Niger Vienna Austria +Niamey Niger Vientiane Laos +Niamey Niger Vilnius Lithuania +Niamey Niger Warsaw Poland +Niamey Niger Windhoek Namibia +Niamey Niger Yerevan Armenia +Niamey Niger Zagreb Croatia +Niamey Niger Abuja Nigeria +Nicosia Cyprus Nouakchott Mauritania +Nicosia Cyprus Nuuk Greenland +Nicosia Cyprus Oslo Norway +Nicosia Cyprus Ottawa Canada +Nicosia Cyprus Paramaribo Suriname +Nicosia Cyprus Paris France +Nicosia Cyprus Podgorica Montenegro +Nicosia Cyprus Quito Ecuador +Nicosia Cyprus Rabat Morocco +Nicosia Cyprus Riga Latvia +Nicosia Cyprus Rome Italy +Nicosia Cyprus Roseau Dominica +Nicosia Cyprus Santiago Chile +Nicosia Cyprus Skopje Macedonia +Nicosia Cyprus Sofia Bulgaria +Nicosia Cyprus Stockholm Sweden +Nicosia Cyprus Suva Fiji +Nicosia Cyprus Taipei Taiwan +Nicosia Cyprus Tallinn Estonia +Nicosia Cyprus Tashkent Uzbekistan +Nicosia Cyprus Tbilisi Georgia +Nicosia Cyprus Tegucigalpa Honduras +Nicosia Cyprus Tehran Iran +Nicosia Cyprus Thimphu Bhutan +Nicosia Cyprus Tirana Albania +Nicosia Cyprus Tokyo Japan +Nicosia Cyprus Tripoli Libya +Nicosia Cyprus Tunis Tunisia +Nicosia Cyprus Vaduz Liechtenstein +Nicosia Cyprus Valletta Malta +Nicosia Cyprus Vienna Austria +Nicosia Cyprus Vientiane Laos +Nicosia Cyprus Vilnius Lithuania +Nicosia Cyprus Warsaw Poland +Nicosia Cyprus Windhoek Namibia +Nicosia Cyprus Yerevan Armenia +Nicosia Cyprus Zagreb Croatia +Nicosia Cyprus Abuja Nigeria +Nicosia Cyprus Accra Ghana +Nouakchott Mauritania Nuuk Greenland +Nouakchott Mauritania Oslo Norway +Nouakchott Mauritania Ottawa Canada +Nouakchott Mauritania Paramaribo Suriname +Nouakchott Mauritania Paris France +Nouakchott Mauritania Podgorica Montenegro +Nouakchott Mauritania Quito Ecuador +Nouakchott Mauritania Rabat Morocco +Nouakchott Mauritania Riga Latvia +Nouakchott Mauritania Rome Italy +Nouakchott Mauritania Roseau Dominica +Nouakchott Mauritania Santiago Chile +Nouakchott Mauritania Skopje Macedonia +Nouakchott Mauritania Sofia Bulgaria +Nouakchott Mauritania Stockholm Sweden +Nouakchott Mauritania Suva Fiji +Nouakchott Mauritania Taipei Taiwan +Nouakchott Mauritania Tallinn Estonia +Nouakchott Mauritania Tashkent Uzbekistan +Nouakchott Mauritania Tbilisi Georgia +Nouakchott Mauritania Tegucigalpa Honduras +Nouakchott Mauritania Tehran Iran +Nouakchott Mauritania Thimphu Bhutan +Nouakchott Mauritania Tirana Albania +Nouakchott Mauritania Tokyo Japan +Nouakchott Mauritania Tripoli Libya +Nouakchott Mauritania Tunis Tunisia +Nouakchott Mauritania Vaduz Liechtenstein +Nouakchott Mauritania Valletta Malta +Nouakchott Mauritania Vienna Austria +Nouakchott Mauritania Vientiane Laos +Nouakchott Mauritania Vilnius Lithuania +Nouakchott Mauritania Warsaw Poland +Nouakchott Mauritania Windhoek Namibia +Nouakchott Mauritania Yerevan Armenia +Nouakchott Mauritania Zagreb Croatia +Nouakchott Mauritania Abuja Nigeria +Nouakchott Mauritania Accra Ghana +Nouakchott Mauritania Algiers Algeria +Nuuk Greenland Oslo Norway +Nuuk Greenland Ottawa Canada +Nuuk Greenland Paramaribo Suriname +Nuuk Greenland Paris France +Nuuk Greenland Podgorica Montenegro +Nuuk Greenland Quito Ecuador +Nuuk Greenland Rabat Morocco +Nuuk Greenland Riga Latvia +Nuuk Greenland Rome Italy +Nuuk Greenland Roseau Dominica +Nuuk Greenland Santiago Chile +Nuuk Greenland Skopje Macedonia +Nuuk Greenland Sofia Bulgaria +Nuuk Greenland Stockholm Sweden +Nuuk Greenland Suva Fiji +Nuuk Greenland Taipei Taiwan +Nuuk Greenland Tallinn Estonia +Nuuk Greenland Tashkent Uzbekistan +Nuuk Greenland Tbilisi Georgia +Nuuk Greenland Tegucigalpa Honduras +Nuuk Greenland Tehran Iran +Nuuk Greenland Thimphu Bhutan +Nuuk Greenland Tirana Albania +Nuuk Greenland Tokyo Japan +Nuuk Greenland Tripoli Libya +Nuuk Greenland Tunis Tunisia +Nuuk Greenland Vaduz Liechtenstein +Nuuk Greenland Valletta Malta +Nuuk Greenland Vienna Austria +Nuuk Greenland Vientiane Laos +Nuuk Greenland Vilnius Lithuania +Nuuk Greenland Warsaw Poland +Nuuk Greenland Windhoek Namibia +Nuuk Greenland Yerevan Armenia +Nuuk Greenland Zagreb Croatia +Nuuk Greenland Abuja Nigeria +Nuuk Greenland Accra Ghana +Nuuk Greenland Algiers Algeria +Nuuk Greenland Amman Jordan +Oslo Norway Ottawa Canada +Oslo Norway Paramaribo Suriname +Oslo Norway Paris France +Oslo Norway Podgorica Montenegro +Oslo Norway Quito Ecuador +Oslo Norway Rabat Morocco +Oslo Norway Riga Latvia +Oslo Norway Rome Italy +Oslo Norway Roseau Dominica +Oslo Norway Santiago Chile +Oslo Norway Skopje Macedonia +Oslo Norway Sofia Bulgaria +Oslo Norway Stockholm Sweden +Oslo Norway Suva Fiji +Oslo Norway Taipei Taiwan +Oslo Norway Tallinn Estonia +Oslo Norway Tashkent Uzbekistan +Oslo Norway Tbilisi Georgia +Oslo Norway Tegucigalpa Honduras +Oslo Norway Tehran Iran +Oslo Norway Thimphu Bhutan +Oslo Norway Tirana Albania +Oslo Norway Tokyo Japan +Oslo Norway Tripoli Libya +Oslo Norway Tunis Tunisia +Oslo Norway Vaduz Liechtenstein +Oslo Norway Valletta Malta +Oslo Norway Vienna Austria +Oslo Norway Vientiane Laos +Oslo Norway Vilnius Lithuania +Oslo Norway Warsaw Poland +Oslo Norway Windhoek Namibia +Oslo Norway Yerevan Armenia +Oslo Norway Zagreb Croatia +Oslo Norway Abuja Nigeria +Oslo Norway Accra Ghana +Oslo Norway Algiers Algeria +Oslo Norway Amman Jordan +Oslo Norway Ankara Turkey +Ottawa Canada Paramaribo Suriname +Ottawa Canada Paris France +Ottawa Canada Podgorica Montenegro +Ottawa Canada Quito Ecuador +Ottawa Canada Rabat Morocco +Ottawa Canada Riga Latvia +Ottawa Canada Rome Italy +Ottawa Canada Roseau Dominica +Ottawa Canada Santiago Chile +Ottawa Canada Skopje Macedonia +Ottawa Canada Sofia Bulgaria +Ottawa Canada Stockholm Sweden +Ottawa Canada Suva Fiji +Ottawa Canada Taipei Taiwan +Ottawa Canada Tallinn Estonia +Ottawa Canada Tashkent Uzbekistan +Ottawa Canada Tbilisi Georgia +Ottawa Canada Tegucigalpa Honduras +Ottawa Canada Tehran Iran +Ottawa Canada Thimphu Bhutan +Ottawa Canada Tirana Albania +Ottawa Canada Tokyo Japan +Ottawa Canada Tripoli Libya +Ottawa Canada Tunis Tunisia +Ottawa Canada Vaduz Liechtenstein +Ottawa Canada Valletta Malta +Ottawa Canada Vienna Austria +Ottawa Canada Vientiane Laos +Ottawa Canada Vilnius Lithuania +Ottawa Canada Warsaw Poland +Ottawa Canada Windhoek Namibia +Ottawa Canada Yerevan Armenia +Ottawa Canada Zagreb Croatia +Ottawa Canada Abuja Nigeria +Ottawa Canada Accra Ghana +Ottawa Canada Algiers Algeria +Ottawa Canada Amman Jordan +Ottawa Canada Ankara Turkey +Ottawa Canada Antananarivo Madagascar +Paramaribo Suriname Paris France +Paramaribo Suriname Podgorica Montenegro +Paramaribo Suriname Quito Ecuador +Paramaribo Suriname Rabat Morocco +Paramaribo Suriname Riga Latvia +Paramaribo Suriname Rome Italy +Paramaribo Suriname Roseau Dominica +Paramaribo Suriname Santiago Chile +Paramaribo Suriname Skopje Macedonia +Paramaribo Suriname Sofia Bulgaria +Paramaribo Suriname Stockholm Sweden +Paramaribo Suriname Suva Fiji +Paramaribo Suriname Taipei Taiwan +Paramaribo Suriname Tallinn Estonia +Paramaribo Suriname Tashkent Uzbekistan +Paramaribo Suriname Tbilisi Georgia +Paramaribo Suriname Tegucigalpa Honduras +Paramaribo Suriname Tehran Iran +Paramaribo Suriname Thimphu Bhutan +Paramaribo Suriname Tirana Albania +Paramaribo Suriname Tokyo Japan +Paramaribo Suriname Tripoli Libya +Paramaribo Suriname Tunis Tunisia +Paramaribo Suriname Vaduz Liechtenstein +Paramaribo Suriname Valletta Malta +Paramaribo Suriname Vienna Austria +Paramaribo Suriname Vientiane Laos +Paramaribo Suriname Vilnius Lithuania +Paramaribo Suriname Warsaw Poland +Paramaribo Suriname Windhoek Namibia +Paramaribo Suriname Yerevan Armenia +Paramaribo Suriname Zagreb Croatia +Paramaribo Suriname Abuja Nigeria +Paramaribo Suriname Accra Ghana +Paramaribo Suriname Algiers Algeria +Paramaribo Suriname Amman Jordan +Paramaribo Suriname Ankara Turkey +Paramaribo Suriname Antananarivo Madagascar +Paramaribo Suriname Apia Samoa +Paris France Podgorica Montenegro +Paris France Quito Ecuador +Paris France Rabat Morocco +Paris France Riga Latvia +Paris France Rome Italy +Paris France Roseau Dominica +Paris France Santiago Chile +Paris France Skopje Macedonia +Paris France Sofia Bulgaria +Paris France Stockholm Sweden +Paris France Suva Fiji +Paris France Taipei Taiwan +Paris France Tallinn Estonia +Paris France Tashkent Uzbekistan +Paris France Tbilisi Georgia +Paris France Tegucigalpa Honduras +Paris France Tehran Iran +Paris France Thimphu Bhutan +Paris France Tirana Albania +Paris France Tokyo Japan +Paris France Tripoli Libya +Paris France Tunis Tunisia +Paris France Vaduz Liechtenstein +Paris France Valletta Malta +Paris France Vienna Austria +Paris France Vientiane Laos +Paris France Vilnius Lithuania +Paris France Warsaw Poland +Paris France Windhoek Namibia +Paris France Yerevan Armenia +Paris France Zagreb Croatia +Paris France Abuja Nigeria +Paris France Accra Ghana +Paris France Algiers Algeria +Paris France Amman Jordan +Paris France Ankara Turkey +Paris France Antananarivo Madagascar +Paris France Apia Samoa +Paris France Ashgabat Turkmenistan +Podgorica Montenegro Quito Ecuador +Podgorica Montenegro Rabat Morocco +Podgorica Montenegro Riga Latvia +Podgorica Montenegro Rome Italy +Podgorica Montenegro Roseau Dominica +Podgorica Montenegro Santiago Chile +Podgorica Montenegro Skopje Macedonia +Podgorica Montenegro Sofia Bulgaria +Podgorica Montenegro Stockholm Sweden +Podgorica Montenegro Suva Fiji +Podgorica Montenegro Taipei Taiwan +Podgorica Montenegro Tallinn Estonia +Podgorica Montenegro Tashkent Uzbekistan +Podgorica Montenegro Tbilisi Georgia +Podgorica Montenegro Tegucigalpa Honduras +Podgorica Montenegro Tehran Iran +Podgorica Montenegro Thimphu Bhutan +Podgorica Montenegro Tirana Albania +Podgorica Montenegro Tokyo Japan +Podgorica Montenegro Tripoli Libya +Podgorica Montenegro Tunis Tunisia +Podgorica Montenegro Vaduz Liechtenstein +Podgorica Montenegro Valletta Malta +Podgorica Montenegro Vienna Austria +Podgorica Montenegro Vientiane Laos +Podgorica Montenegro Vilnius Lithuania +Podgorica Montenegro Warsaw Poland +Podgorica Montenegro Windhoek Namibia +Podgorica Montenegro Yerevan Armenia +Podgorica Montenegro Zagreb Croatia +Podgorica Montenegro Abuja Nigeria +Podgorica Montenegro Accra Ghana +Podgorica Montenegro Algiers Algeria +Podgorica Montenegro Amman Jordan +Podgorica Montenegro Ankara Turkey +Podgorica Montenegro Antananarivo Madagascar +Podgorica Montenegro Apia Samoa +Podgorica Montenegro Ashgabat Turkmenistan +Podgorica Montenegro Asmara Eritrea +Quito Ecuador Rabat Morocco +Quito Ecuador Riga Latvia +Quito Ecuador Rome Italy +Quito Ecuador Roseau Dominica +Quito Ecuador Santiago Chile +Quito Ecuador Skopje Macedonia +Quito Ecuador Sofia Bulgaria +Quito Ecuador Stockholm Sweden +Quito Ecuador Suva Fiji +Quito Ecuador Taipei Taiwan +Quito Ecuador Tallinn Estonia +Quito Ecuador Tashkent Uzbekistan +Quito Ecuador Tbilisi Georgia +Quito Ecuador Tegucigalpa Honduras +Quito Ecuador Tehran Iran +Quito Ecuador Thimphu Bhutan +Quito Ecuador Tirana Albania +Quito Ecuador Tokyo Japan +Quito Ecuador Tripoli Libya +Quito Ecuador Tunis Tunisia +Quito Ecuador Vaduz Liechtenstein +Quito Ecuador Valletta Malta +Quito Ecuador Vienna Austria +Quito Ecuador Vientiane Laos +Quito Ecuador Vilnius Lithuania +Quito Ecuador Warsaw Poland +Quito Ecuador Windhoek Namibia +Quito Ecuador Yerevan Armenia +Quito Ecuador Zagreb Croatia +Quito Ecuador Abuja Nigeria +Quito Ecuador Accra Ghana +Quito Ecuador Algiers Algeria +Quito Ecuador Amman Jordan +Quito Ecuador Ankara Turkey +Quito Ecuador Antananarivo Madagascar +Quito Ecuador Apia Samoa +Quito Ecuador Ashgabat Turkmenistan +Quito Ecuador Asmara Eritrea +Quito Ecuador Astana Kazakhstan +Rabat Morocco Riga Latvia +Rabat Morocco Rome Italy +Rabat Morocco Roseau Dominica +Rabat Morocco Santiago Chile +Rabat Morocco Skopje Macedonia +Rabat Morocco Sofia Bulgaria +Rabat Morocco Stockholm Sweden +Rabat Morocco Suva Fiji +Rabat Morocco Taipei Taiwan +Rabat Morocco Tallinn Estonia +Rabat Morocco Tashkent Uzbekistan +Rabat Morocco Tbilisi Georgia +Rabat Morocco Tegucigalpa Honduras +Rabat Morocco Tehran Iran +Rabat Morocco Thimphu Bhutan +Rabat Morocco Tirana Albania +Rabat Morocco Tokyo Japan +Rabat Morocco Tripoli Libya +Rabat Morocco Tunis Tunisia +Rabat Morocco Vaduz Liechtenstein +Rabat Morocco Valletta Malta +Rabat Morocco Vienna Austria +Rabat Morocco Vientiane Laos +Rabat Morocco Vilnius Lithuania +Rabat Morocco Warsaw Poland +Rabat Morocco Windhoek Namibia +Rabat Morocco Yerevan Armenia +Rabat Morocco Zagreb Croatia +Rabat Morocco Abuja Nigeria +Rabat Morocco Accra Ghana +Rabat Morocco Algiers Algeria +Rabat Morocco Amman Jordan +Rabat Morocco Ankara Turkey +Rabat Morocco Antananarivo Madagascar +Rabat Morocco Apia Samoa +Rabat Morocco Ashgabat Turkmenistan +Rabat Morocco Asmara Eritrea +Rabat Morocco Astana Kazakhstan +Rabat Morocco Athens Greece +Riga Latvia Rome Italy +Riga Latvia Roseau Dominica +Riga Latvia Santiago Chile +Riga Latvia Skopje Macedonia +Riga Latvia Sofia Bulgaria +Riga Latvia Stockholm Sweden +Riga Latvia Suva Fiji +Riga Latvia Taipei Taiwan +Riga Latvia Tallinn Estonia +Riga Latvia Tashkent Uzbekistan +Riga Latvia Tbilisi Georgia +Riga Latvia Tegucigalpa Honduras +Riga Latvia Tehran Iran +Riga Latvia Thimphu Bhutan +Riga Latvia Tirana Albania +Riga Latvia Tokyo Japan +Riga Latvia Tripoli Libya +Riga Latvia Tunis Tunisia +Riga Latvia Vaduz Liechtenstein +Riga Latvia Valletta Malta +Riga Latvia Vienna Austria +Riga Latvia Vientiane Laos +Riga Latvia Vilnius Lithuania +Riga Latvia Warsaw Poland +Riga Latvia Windhoek Namibia +Riga Latvia Yerevan Armenia +Riga Latvia Zagreb Croatia +Riga Latvia Abuja Nigeria +Riga Latvia Accra Ghana +Riga Latvia Algiers Algeria +Riga Latvia Amman Jordan +Riga Latvia Ankara Turkey +Riga Latvia Antananarivo Madagascar +Riga Latvia Apia Samoa +Riga Latvia Ashgabat Turkmenistan +Riga Latvia Asmara Eritrea +Riga Latvia Astana Kazakhstan +Riga Latvia Athens Greece +Riga Latvia Baghdad Iraq +Rome Italy Roseau Dominica +Rome Italy Santiago Chile +Rome Italy Skopje Macedonia +Rome Italy Sofia Bulgaria +Rome Italy Stockholm Sweden +Rome Italy Suva Fiji +Rome Italy Taipei Taiwan +Rome Italy Tallinn Estonia +Rome Italy Tashkent Uzbekistan +Rome Italy Tbilisi Georgia +Rome Italy Tegucigalpa Honduras +Rome Italy Tehran Iran +Rome Italy Thimphu Bhutan +Rome Italy Tirana Albania +Rome Italy Tokyo Japan +Rome Italy Tripoli Libya +Rome Italy Tunis Tunisia +Rome Italy Vaduz Liechtenstein +Rome Italy Valletta Malta +Rome Italy Vienna Austria +Rome Italy Vientiane Laos +Rome Italy Vilnius Lithuania +Rome Italy Warsaw Poland +Rome Italy Windhoek Namibia +Rome Italy Yerevan Armenia +Rome Italy Zagreb Croatia +Rome Italy Abuja Nigeria +Rome Italy Accra Ghana +Rome Italy Algiers Algeria +Rome Italy Amman Jordan +Rome Italy Ankara Turkey +Rome Italy Antananarivo Madagascar +Rome Italy Apia Samoa +Rome Italy Ashgabat Turkmenistan +Rome Italy Asmara Eritrea +Rome Italy Astana Kazakhstan +Rome Italy Athens Greece +Rome Italy Baghdad Iraq +Rome Italy Baku Azerbaijan +Roseau Dominica Santiago Chile +Roseau Dominica Skopje Macedonia +Roseau Dominica Sofia Bulgaria +Roseau Dominica Stockholm Sweden +Roseau Dominica Suva Fiji +Roseau Dominica Taipei Taiwan +Roseau Dominica Tallinn Estonia +Roseau Dominica Tashkent Uzbekistan +Roseau Dominica Tbilisi Georgia +Roseau Dominica Tegucigalpa Honduras +Roseau Dominica Tehran Iran +Roseau Dominica Thimphu Bhutan +Roseau Dominica Tirana Albania +Roseau Dominica Tokyo Japan +Roseau Dominica Tripoli Libya +Roseau Dominica Tunis Tunisia +Roseau Dominica Vaduz Liechtenstein +Roseau Dominica Valletta Malta +Roseau Dominica Vienna Austria +Roseau Dominica Vientiane Laos +Roseau Dominica Vilnius Lithuania +Roseau Dominica Warsaw Poland +Roseau Dominica Windhoek Namibia +Roseau Dominica Yerevan Armenia +Roseau Dominica Zagreb Croatia +Roseau Dominica Abuja Nigeria +Roseau Dominica Accra Ghana +Roseau Dominica Algiers Algeria +Roseau Dominica Amman Jordan +Roseau Dominica Ankara Turkey +Roseau Dominica Antananarivo Madagascar +Roseau Dominica Apia Samoa +Roseau Dominica Ashgabat Turkmenistan +Roseau Dominica Asmara Eritrea +Roseau Dominica Astana Kazakhstan +Roseau Dominica Athens Greece +Roseau Dominica Baghdad Iraq +Roseau Dominica Baku Azerbaijan +Roseau Dominica Bamako Mali +Santiago Chile Skopje Macedonia +Santiago Chile Sofia Bulgaria +Santiago Chile Stockholm Sweden +Santiago Chile Suva Fiji +Santiago Chile Taipei Taiwan +Santiago Chile Tallinn Estonia +Santiago Chile Tashkent Uzbekistan +Santiago Chile Tbilisi Georgia +Santiago Chile Tegucigalpa Honduras +Santiago Chile Tehran Iran +Santiago Chile Thimphu Bhutan +Santiago Chile Tirana Albania +Santiago Chile Tokyo Japan +Santiago Chile Tripoli Libya +Santiago Chile Tunis Tunisia +Santiago Chile Vaduz Liechtenstein +Santiago Chile Valletta Malta +Santiago Chile Vienna Austria +Santiago Chile Vientiane Laos +Santiago Chile Vilnius Lithuania +Santiago Chile Warsaw Poland +Santiago Chile Windhoek Namibia +Santiago Chile Yerevan Armenia +Santiago Chile Zagreb Croatia +Santiago Chile Abuja Nigeria +Santiago Chile Accra Ghana +Santiago Chile Algiers Algeria +Santiago Chile Amman Jordan +Santiago Chile Ankara Turkey +Santiago Chile Antananarivo Madagascar +Santiago Chile Apia Samoa +Santiago Chile Ashgabat Turkmenistan +Santiago Chile Asmara Eritrea +Santiago Chile Astana Kazakhstan +Santiago Chile Athens Greece +Santiago Chile Baghdad Iraq +Santiago Chile Baku Azerbaijan +Santiago Chile Bamako Mali +Santiago Chile Bangkok Thailand +Skopje Macedonia Sofia Bulgaria +Skopje Macedonia Stockholm Sweden +Skopje Macedonia Suva Fiji +Skopje Macedonia Taipei Taiwan +Skopje Macedonia Tallinn Estonia +Skopje Macedonia Tashkent Uzbekistan +Skopje Macedonia Tbilisi Georgia +Skopje Macedonia Tegucigalpa Honduras +Skopje Macedonia Tehran Iran +Skopje Macedonia Thimphu Bhutan +Skopje Macedonia Tirana Albania +Skopje Macedonia Tokyo Japan +Skopje Macedonia Tripoli Libya +Skopje Macedonia Tunis Tunisia +Skopje Macedonia Vaduz Liechtenstein +Skopje Macedonia Valletta Malta +Skopje Macedonia Vienna Austria +Skopje Macedonia Vientiane Laos +Skopje Macedonia Vilnius Lithuania +Skopje Macedonia Warsaw Poland +Skopje Macedonia Windhoek Namibia +Skopje Macedonia Yerevan Armenia +Skopje Macedonia Zagreb Croatia +Skopje Macedonia Abuja Nigeria +Skopje Macedonia Accra Ghana +Skopje Macedonia Algiers Algeria +Skopje Macedonia Amman Jordan +Skopje Macedonia Ankara Turkey +Skopje Macedonia Antananarivo Madagascar +Skopje Macedonia Apia Samoa +Skopje Macedonia Ashgabat Turkmenistan +Skopje Macedonia Asmara Eritrea +Skopje Macedonia Astana Kazakhstan +Skopje Macedonia Athens Greece +Skopje Macedonia Baghdad Iraq +Skopje Macedonia Baku Azerbaijan +Skopje Macedonia Bamako Mali +Skopje Macedonia Bangkok Thailand +Skopje Macedonia Banjul Gambia +Sofia Bulgaria Stockholm Sweden +Sofia Bulgaria Suva Fiji +Sofia Bulgaria Taipei Taiwan +Sofia Bulgaria Tallinn Estonia +Sofia Bulgaria Tashkent Uzbekistan +Sofia Bulgaria Tbilisi Georgia +Sofia Bulgaria Tegucigalpa Honduras +Sofia Bulgaria Tehran Iran +Sofia Bulgaria Thimphu Bhutan +Sofia Bulgaria Tirana Albania +Sofia Bulgaria Tokyo Japan +Sofia Bulgaria Tripoli Libya +Sofia Bulgaria Tunis Tunisia +Sofia Bulgaria Vaduz Liechtenstein +Sofia Bulgaria Valletta Malta +Sofia Bulgaria Vienna Austria +Sofia Bulgaria Vientiane Laos +Sofia Bulgaria Vilnius Lithuania +Sofia Bulgaria Warsaw Poland +Sofia Bulgaria Windhoek Namibia +Sofia Bulgaria Yerevan Armenia +Sofia Bulgaria Zagreb Croatia +Sofia Bulgaria Abuja Nigeria +Sofia Bulgaria Accra Ghana +Sofia Bulgaria Algiers Algeria +Sofia Bulgaria Amman Jordan +Sofia Bulgaria Ankara Turkey +Sofia Bulgaria Antananarivo Madagascar +Sofia Bulgaria Apia Samoa +Sofia Bulgaria Ashgabat Turkmenistan +Sofia Bulgaria Asmara Eritrea +Sofia Bulgaria Astana Kazakhstan +Sofia Bulgaria Athens Greece +Sofia Bulgaria Baghdad Iraq +Sofia Bulgaria Baku Azerbaijan +Sofia Bulgaria Bamako Mali +Sofia Bulgaria Bangkok Thailand +Sofia Bulgaria Banjul Gambia +Sofia Bulgaria Beijing China +Stockholm Sweden Suva Fiji +Stockholm Sweden Taipei Taiwan +Stockholm Sweden Tallinn Estonia +Stockholm Sweden Tashkent Uzbekistan +Stockholm Sweden Tbilisi Georgia +Stockholm Sweden Tegucigalpa Honduras +Stockholm Sweden Tehran Iran +Stockholm Sweden Thimphu Bhutan +Stockholm Sweden Tirana Albania +Stockholm Sweden Tokyo Japan +Stockholm Sweden Tripoli Libya +Stockholm Sweden Tunis Tunisia +Stockholm Sweden Vaduz Liechtenstein +Stockholm Sweden Valletta Malta +Stockholm Sweden Vienna Austria +Stockholm Sweden Vientiane Laos +Stockholm Sweden Vilnius Lithuania +Stockholm Sweden Warsaw Poland +Stockholm Sweden Windhoek Namibia +Stockholm Sweden Yerevan Armenia +Stockholm Sweden Zagreb Croatia +Stockholm Sweden Abuja Nigeria +Stockholm Sweden Accra Ghana +Stockholm Sweden Algiers Algeria +Stockholm Sweden Amman Jordan +Stockholm Sweden Ankara Turkey +Stockholm Sweden Antananarivo Madagascar +Stockholm Sweden Apia Samoa +Stockholm Sweden Ashgabat Turkmenistan +Stockholm Sweden Asmara Eritrea +Stockholm Sweden Astana Kazakhstan +Stockholm Sweden Athens Greece +Stockholm Sweden Baghdad Iraq +Stockholm Sweden Baku Azerbaijan +Stockholm Sweden Bamako Mali +Stockholm Sweden Bangkok Thailand +Stockholm Sweden Banjul Gambia +Stockholm Sweden Beijing China +Stockholm Sweden Beirut Lebanon +Suva Fiji Taipei Taiwan +Suva Fiji Tallinn Estonia +Suva Fiji Tashkent Uzbekistan +Suva Fiji Tbilisi Georgia +Suva Fiji Tegucigalpa Honduras +Suva Fiji Tehran Iran +Suva Fiji Thimphu Bhutan +Suva Fiji Tirana Albania +Suva Fiji Tokyo Japan +Suva Fiji Tripoli Libya +Suva Fiji Tunis Tunisia +Suva Fiji Vaduz Liechtenstein +Suva Fiji Valletta Malta +Suva Fiji Vienna Austria +Suva Fiji Vientiane Laos +Suva Fiji Vilnius Lithuania +Suva Fiji Warsaw Poland +Suva Fiji Windhoek Namibia +Suva Fiji Yerevan Armenia +Suva Fiji Zagreb Croatia +Suva Fiji Abuja Nigeria +Suva Fiji Accra Ghana +Suva Fiji Algiers Algeria +Suva Fiji Amman Jordan +Suva Fiji Ankara Turkey +Suva Fiji Antananarivo Madagascar +Suva Fiji Apia Samoa +Suva Fiji Ashgabat Turkmenistan +Suva Fiji Asmara Eritrea +Suva Fiji Astana Kazakhstan +Suva Fiji Athens Greece +Suva Fiji Baghdad Iraq +Suva Fiji Baku Azerbaijan +Suva Fiji Bamako Mali +Suva Fiji Bangkok Thailand +Suva Fiji Banjul Gambia +Suva Fiji Beijing China +Suva Fiji Beirut Lebanon +Suva Fiji Belgrade Serbia +Taipei Taiwan Tallinn Estonia +Taipei Taiwan Tashkent Uzbekistan +Taipei Taiwan Tbilisi Georgia +Taipei Taiwan Tegucigalpa Honduras +Taipei Taiwan Tehran Iran +Taipei Taiwan Thimphu Bhutan +Taipei Taiwan Tirana Albania +Taipei Taiwan Tokyo Japan +Taipei Taiwan Tripoli Libya +Taipei Taiwan Tunis Tunisia +Taipei Taiwan Vaduz Liechtenstein +Taipei Taiwan Valletta Malta +Taipei Taiwan Vienna Austria +Taipei Taiwan Vientiane Laos +Taipei Taiwan Vilnius Lithuania +Taipei Taiwan Warsaw Poland +Taipei Taiwan Windhoek Namibia +Taipei Taiwan Yerevan Armenia +Taipei Taiwan Zagreb Croatia +Taipei Taiwan Abuja Nigeria +Taipei Taiwan Accra Ghana +Taipei Taiwan Algiers Algeria +Taipei Taiwan Amman Jordan +Taipei Taiwan Ankara Turkey +Taipei Taiwan Antananarivo Madagascar +Taipei Taiwan Apia Samoa +Taipei Taiwan Ashgabat Turkmenistan +Taipei Taiwan Asmara Eritrea +Taipei Taiwan Astana Kazakhstan +Taipei Taiwan Athens Greece +Taipei Taiwan Baghdad Iraq +Taipei Taiwan Baku Azerbaijan +Taipei Taiwan Bamako Mali +Taipei Taiwan Bangkok Thailand +Taipei Taiwan Banjul Gambia +Taipei Taiwan Beijing China +Taipei Taiwan Beirut Lebanon +Taipei Taiwan Belgrade Serbia +Taipei Taiwan Belmopan Belize +Tallinn Estonia Tashkent Uzbekistan +Tallinn Estonia Tbilisi Georgia +Tallinn Estonia Tegucigalpa Honduras +Tallinn Estonia Tehran Iran +Tallinn Estonia Thimphu Bhutan +Tallinn Estonia Tirana Albania +Tallinn Estonia Tokyo Japan +Tallinn Estonia Tripoli Libya +Tallinn Estonia Tunis Tunisia +Tallinn Estonia Vaduz Liechtenstein +Tallinn Estonia Valletta Malta +Tallinn Estonia Vienna Austria +Tallinn Estonia Vientiane Laos +Tallinn Estonia Vilnius Lithuania +Tallinn Estonia Warsaw Poland +Tallinn Estonia Windhoek Namibia +Tallinn Estonia Yerevan Armenia +Tallinn Estonia Zagreb Croatia +Tallinn Estonia Abuja Nigeria +Tallinn Estonia Accra Ghana +Tallinn Estonia Algiers Algeria +Tallinn Estonia Amman Jordan +Tallinn Estonia Ankara Turkey +Tallinn Estonia Antananarivo Madagascar +Tallinn Estonia Apia Samoa +Tallinn Estonia Ashgabat Turkmenistan +Tallinn Estonia Asmara Eritrea +Tallinn Estonia Astana Kazakhstan +Tallinn Estonia Athens Greece +Tallinn Estonia Baghdad Iraq +Tallinn Estonia Baku Azerbaijan +Tallinn Estonia Bamako Mali +Tallinn Estonia Bangkok Thailand +Tallinn Estonia Banjul Gambia +Tallinn Estonia Beijing China +Tallinn Estonia Beirut Lebanon +Tallinn Estonia Belgrade Serbia +Tallinn Estonia Belmopan Belize +Tallinn Estonia Berlin Germany +Tashkent Uzbekistan Tbilisi Georgia +Tashkent Uzbekistan Tegucigalpa Honduras +Tashkent Uzbekistan Tehran Iran +Tashkent Uzbekistan Thimphu Bhutan +Tashkent Uzbekistan Tirana Albania +Tashkent Uzbekistan Tokyo Japan +Tashkent Uzbekistan Tripoli Libya +Tashkent Uzbekistan Tunis Tunisia +Tashkent Uzbekistan Vaduz Liechtenstein +Tashkent Uzbekistan Valletta Malta +Tashkent Uzbekistan Vienna Austria +Tashkent Uzbekistan Vientiane Laos +Tashkent Uzbekistan Vilnius Lithuania +Tashkent Uzbekistan Warsaw Poland +Tashkent Uzbekistan Windhoek Namibia +Tashkent Uzbekistan Yerevan Armenia +Tashkent Uzbekistan Zagreb Croatia +Tashkent Uzbekistan Abuja Nigeria +Tashkent Uzbekistan Accra Ghana +Tashkent Uzbekistan Algiers Algeria +Tashkent Uzbekistan Amman Jordan +Tashkent Uzbekistan Ankara Turkey +Tashkent Uzbekistan Antananarivo Madagascar +Tashkent Uzbekistan Apia Samoa +Tashkent Uzbekistan Ashgabat Turkmenistan +Tashkent Uzbekistan Asmara Eritrea +Tashkent Uzbekistan Astana Kazakhstan +Tashkent Uzbekistan Athens Greece +Tashkent Uzbekistan Baghdad Iraq +Tashkent Uzbekistan Baku Azerbaijan +Tashkent Uzbekistan Bamako Mali +Tashkent Uzbekistan Bangkok Thailand +Tashkent Uzbekistan Banjul Gambia +Tashkent Uzbekistan Beijing China +Tashkent Uzbekistan Beirut Lebanon +Tashkent Uzbekistan Belgrade Serbia +Tashkent Uzbekistan Belmopan Belize +Tashkent Uzbekistan Berlin Germany +Tashkent Uzbekistan Bern Switzerland +Tbilisi Georgia Tegucigalpa Honduras +Tbilisi Georgia Tehran Iran +Tbilisi Georgia Thimphu Bhutan +Tbilisi Georgia Tirana Albania +Tbilisi Georgia Tokyo Japan +Tbilisi Georgia Tripoli Libya +Tbilisi Georgia Tunis Tunisia +Tbilisi Georgia Vaduz Liechtenstein +Tbilisi Georgia Valletta Malta +Tbilisi Georgia Vienna Austria +Tbilisi Georgia Vientiane Laos +Tbilisi Georgia Vilnius Lithuania +Tbilisi Georgia Warsaw Poland +Tbilisi Georgia Windhoek Namibia +Tbilisi Georgia Yerevan Armenia +Tbilisi Georgia Zagreb Croatia +Tbilisi Georgia Abuja Nigeria +Tbilisi Georgia Accra Ghana +Tbilisi Georgia Algiers Algeria +Tbilisi Georgia Amman Jordan +Tbilisi Georgia Ankara Turkey +Tbilisi Georgia Antananarivo Madagascar +Tbilisi Georgia Apia Samoa +Tbilisi Georgia Ashgabat Turkmenistan +Tbilisi Georgia Asmara Eritrea +Tbilisi Georgia Astana Kazakhstan +Tbilisi Georgia Athens Greece +Tbilisi Georgia Baghdad Iraq +Tbilisi Georgia Baku Azerbaijan +Tbilisi Georgia Bamako Mali +Tbilisi Georgia Bangkok Thailand +Tbilisi Georgia Banjul Gambia +Tbilisi Georgia Beijing China +Tbilisi Georgia Beirut Lebanon +Tbilisi Georgia Belgrade Serbia +Tbilisi Georgia Belmopan Belize +Tbilisi Georgia Berlin Germany +Tbilisi Georgia Bern Switzerland +Tbilisi Georgia Bishkek Kyrgyzstan +Tegucigalpa Honduras Tehran Iran +Tegucigalpa Honduras Thimphu Bhutan +Tegucigalpa Honduras Tirana Albania +Tegucigalpa Honduras Tokyo Japan +Tegucigalpa Honduras Tripoli Libya +Tegucigalpa Honduras Tunis Tunisia +Tegucigalpa Honduras Vaduz Liechtenstein +Tegucigalpa Honduras Valletta Malta +Tegucigalpa Honduras Vienna Austria +Tegucigalpa Honduras Vientiane Laos +Tegucigalpa Honduras Vilnius Lithuania +Tegucigalpa Honduras Warsaw Poland +Tegucigalpa Honduras Windhoek Namibia +Tegucigalpa Honduras Yerevan Armenia +Tegucigalpa Honduras Zagreb Croatia +Tegucigalpa Honduras Abuja Nigeria +Tegucigalpa Honduras Accra Ghana +Tegucigalpa Honduras Algiers Algeria +Tegucigalpa Honduras Amman Jordan +Tegucigalpa Honduras Ankara Turkey +Tegucigalpa Honduras Antananarivo Madagascar +Tegucigalpa Honduras Apia Samoa +Tegucigalpa Honduras Ashgabat Turkmenistan +Tegucigalpa Honduras Asmara Eritrea +Tegucigalpa Honduras Astana Kazakhstan +Tegucigalpa Honduras Athens Greece +Tegucigalpa Honduras Baghdad Iraq +Tegucigalpa Honduras Baku Azerbaijan +Tegucigalpa Honduras Bamako Mali +Tegucigalpa Honduras Bangkok Thailand +Tegucigalpa Honduras Banjul Gambia +Tegucigalpa Honduras Beijing China +Tegucigalpa Honduras Beirut Lebanon +Tegucigalpa Honduras Belgrade Serbia +Tegucigalpa Honduras Belmopan Belize +Tegucigalpa Honduras Berlin Germany +Tegucigalpa Honduras Bern Switzerland +Tegucigalpa Honduras Bishkek Kyrgyzstan +Tegucigalpa Honduras Bratislava Slovakia +Tehran Iran Thimphu Bhutan +Tehran Iran Tirana Albania +Tehran Iran Tokyo Japan +Tehran Iran Tripoli Libya +Tehran Iran Tunis Tunisia +Tehran Iran Vaduz Liechtenstein +Tehran Iran Valletta Malta +Tehran Iran Vienna Austria +Tehran Iran Vientiane Laos +Tehran Iran Vilnius Lithuania +Tehran Iran Warsaw Poland +Tehran Iran Windhoek Namibia +Tehran Iran Yerevan Armenia +Tehran Iran Zagreb Croatia +Tehran Iran Abuja Nigeria +Tehran Iran Accra Ghana +Tehran Iran Algiers Algeria +Tehran Iran Amman Jordan +Tehran Iran Ankara Turkey +Tehran Iran Antananarivo Madagascar +Tehran Iran Apia Samoa +Tehran Iran Ashgabat Turkmenistan +Tehran Iran Asmara Eritrea +Tehran Iran Astana Kazakhstan +Tehran Iran Athens Greece +Tehran Iran Baghdad Iraq +Tehran Iran Baku Azerbaijan +Tehran Iran Bamako Mali +Tehran Iran Bangkok Thailand +Tehran Iran Banjul Gambia +Tehran Iran Beijing China +Tehran Iran Beirut Lebanon +Tehran Iran Belgrade Serbia +Tehran Iran Belmopan Belize +Tehran Iran Berlin Germany +Tehran Iran Bern Switzerland +Tehran Iran Bishkek Kyrgyzstan +Tehran Iran Bratislava Slovakia +Tehran Iran Brussels Belgium +Thimphu Bhutan Tirana Albania +Thimphu Bhutan Tokyo Japan +Thimphu Bhutan Tripoli Libya +Thimphu Bhutan Tunis Tunisia +Thimphu Bhutan Vaduz Liechtenstein +Thimphu Bhutan Valletta Malta +Thimphu Bhutan Vienna Austria +Thimphu Bhutan Vientiane Laos +Thimphu Bhutan Vilnius Lithuania +Thimphu Bhutan Warsaw Poland +Thimphu Bhutan Windhoek Namibia +Thimphu Bhutan Yerevan Armenia +Thimphu Bhutan Zagreb Croatia +Thimphu Bhutan Abuja Nigeria +Thimphu Bhutan Accra Ghana +Thimphu Bhutan Algiers Algeria +Thimphu Bhutan Amman Jordan +Thimphu Bhutan Ankara Turkey +Thimphu Bhutan Antananarivo Madagascar +Thimphu Bhutan Apia Samoa +Thimphu Bhutan Ashgabat Turkmenistan +Thimphu Bhutan Asmara Eritrea +Thimphu Bhutan Astana Kazakhstan +Thimphu Bhutan Athens Greece +Thimphu Bhutan Baghdad Iraq +Thimphu Bhutan Baku Azerbaijan +Thimphu Bhutan Bamako Mali +Thimphu Bhutan Bangkok Thailand +Thimphu Bhutan Banjul Gambia +Thimphu Bhutan Beijing China +Thimphu Bhutan Beirut Lebanon +Thimphu Bhutan Belgrade Serbia +Thimphu Bhutan Belmopan Belize +Thimphu Bhutan Berlin Germany +Thimphu Bhutan Bern Switzerland +Thimphu Bhutan Bishkek Kyrgyzstan +Thimphu Bhutan Bratislava Slovakia +Thimphu Bhutan Brussels Belgium +Thimphu Bhutan Bucharest Romania +Tirana Albania Tokyo Japan +Tirana Albania Tripoli Libya +Tirana Albania Tunis Tunisia +Tirana Albania Vaduz Liechtenstein +Tirana Albania Valletta Malta +Tirana Albania Vienna Austria +Tirana Albania Vientiane Laos +Tirana Albania Vilnius Lithuania +Tirana Albania Warsaw Poland +Tirana Albania Windhoek Namibia +Tirana Albania Yerevan Armenia +Tirana Albania Zagreb Croatia +Tirana Albania Abuja Nigeria +Tirana Albania Accra Ghana +Tirana Albania Algiers Algeria +Tirana Albania Amman Jordan +Tirana Albania Ankara Turkey +Tirana Albania Antananarivo Madagascar +Tirana Albania Apia Samoa +Tirana Albania Ashgabat Turkmenistan +Tirana Albania Asmara Eritrea +Tirana Albania Astana Kazakhstan +Tirana Albania Athens Greece +Tirana Albania Baghdad Iraq +Tirana Albania Baku Azerbaijan +Tirana Albania Bamako Mali +Tirana Albania Bangkok Thailand +Tirana Albania Banjul Gambia +Tirana Albania Beijing China +Tirana Albania Beirut Lebanon +Tirana Albania Belgrade Serbia +Tirana Albania Belmopan Belize +Tirana Albania Berlin Germany +Tirana Albania Bern Switzerland +Tirana Albania Bishkek Kyrgyzstan +Tirana Albania Bratislava Slovakia +Tirana Albania Brussels Belgium +Tirana Albania Bucharest Romania +Tirana Albania Budapest Hungary +Tokyo Japan Tripoli Libya +Tokyo Japan Tunis Tunisia +Tokyo Japan Vaduz Liechtenstein +Tokyo Japan Valletta Malta +Tokyo Japan Vienna Austria +Tokyo Japan Vientiane Laos +Tokyo Japan Vilnius Lithuania +Tokyo Japan Warsaw Poland +Tokyo Japan Windhoek Namibia +Tokyo Japan Yerevan Armenia +Tokyo Japan Zagreb Croatia +Tokyo Japan Abuja Nigeria +Tokyo Japan Accra Ghana +Tokyo Japan Algiers Algeria +Tokyo Japan Amman Jordan +Tokyo Japan Ankara Turkey +Tokyo Japan Antananarivo Madagascar +Tokyo Japan Apia Samoa +Tokyo Japan Ashgabat Turkmenistan +Tokyo Japan Asmara Eritrea +Tokyo Japan Astana Kazakhstan +Tokyo Japan Athens Greece +Tokyo Japan Baghdad Iraq +Tokyo Japan Baku Azerbaijan +Tokyo Japan Bamako Mali +Tokyo Japan Bangkok Thailand +Tokyo Japan Banjul Gambia +Tokyo Japan Beijing China +Tokyo Japan Beirut Lebanon +Tokyo Japan Belgrade Serbia +Tokyo Japan Belmopan Belize +Tokyo Japan Berlin Germany +Tokyo Japan Bern Switzerland +Tokyo Japan Bishkek Kyrgyzstan +Tokyo Japan Bratislava Slovakia +Tokyo Japan Brussels Belgium +Tokyo Japan Bucharest Romania +Tokyo Japan Budapest Hungary +Tokyo Japan Bujumbura Burundi +Tripoli Libya Tunis Tunisia +Tripoli Libya Vaduz Liechtenstein +Tripoli Libya Valletta Malta +Tripoli Libya Vienna Austria +Tripoli Libya Vientiane Laos +Tripoli Libya Vilnius Lithuania +Tripoli Libya Warsaw Poland +Tripoli Libya Windhoek Namibia +Tripoli Libya Yerevan Armenia +Tripoli Libya Zagreb Croatia +Tripoli Libya Abuja Nigeria +Tripoli Libya Accra Ghana +Tripoli Libya Algiers Algeria +Tripoli Libya Amman Jordan +Tripoli Libya Ankara Turkey +Tripoli Libya Antananarivo Madagascar +Tripoli Libya Apia Samoa +Tripoli Libya Ashgabat Turkmenistan +Tripoli Libya Asmara Eritrea +Tripoli Libya Astana Kazakhstan +Tripoli Libya Athens Greece +Tripoli Libya Baghdad Iraq +Tripoli Libya Baku Azerbaijan +Tripoli Libya Bamako Mali +Tripoli Libya Bangkok Thailand +Tripoli Libya Banjul Gambia +Tripoli Libya Beijing China +Tripoli Libya Beirut Lebanon +Tripoli Libya Belgrade Serbia +Tripoli Libya Belmopan Belize +Tripoli Libya Berlin Germany +Tripoli Libya Bern Switzerland +Tripoli Libya Bishkek Kyrgyzstan +Tripoli Libya Bratislava Slovakia +Tripoli Libya Brussels Belgium +Tripoli Libya Bucharest Romania +Tripoli Libya Budapest Hungary +Tripoli Libya Bujumbura Burundi +Tripoli Libya Cairo Egypt +Tunis Tunisia Vaduz Liechtenstein +Tunis Tunisia Valletta Malta +Tunis Tunisia Vienna Austria +Tunis Tunisia Vientiane Laos +Tunis Tunisia Vilnius Lithuania +Tunis Tunisia Warsaw Poland +Tunis Tunisia Windhoek Namibia +Tunis Tunisia Yerevan Armenia +Tunis Tunisia Zagreb Croatia +Tunis Tunisia Abuja Nigeria +Tunis Tunisia Accra Ghana +Tunis Tunisia Algiers Algeria +Tunis Tunisia Amman Jordan +Tunis Tunisia Ankara Turkey +Tunis Tunisia Antananarivo Madagascar +Tunis Tunisia Apia Samoa +Tunis Tunisia Ashgabat Turkmenistan +Tunis Tunisia Asmara Eritrea +Tunis Tunisia Astana Kazakhstan +Tunis Tunisia Athens Greece +Tunis Tunisia Baghdad Iraq +Tunis Tunisia Baku Azerbaijan +Tunis Tunisia Bamako Mali +Tunis Tunisia Bangkok Thailand +Tunis Tunisia Banjul Gambia +Tunis Tunisia Beijing China +Tunis Tunisia Beirut Lebanon +Tunis Tunisia Belgrade Serbia +Tunis Tunisia Belmopan Belize +Tunis Tunisia Berlin Germany +Tunis Tunisia Bern Switzerland +Tunis Tunisia Bishkek Kyrgyzstan +Tunis Tunisia Bratislava Slovakia +Tunis Tunisia Brussels Belgium +Tunis Tunisia Bucharest Romania +Tunis Tunisia Budapest Hungary +Tunis Tunisia Bujumbura Burundi +Tunis Tunisia Cairo Egypt +Tunis Tunisia Canberra Australia +Vaduz Liechtenstein Valletta Malta +Vaduz Liechtenstein Vienna Austria +Vaduz Liechtenstein Vientiane Laos +Vaduz Liechtenstein Vilnius Lithuania +Vaduz Liechtenstein Warsaw Poland +Vaduz Liechtenstein Windhoek Namibia +Vaduz Liechtenstein Yerevan Armenia +Vaduz Liechtenstein Zagreb Croatia +Vaduz Liechtenstein Abuja Nigeria +Vaduz Liechtenstein Accra Ghana +Vaduz Liechtenstein Algiers Algeria +Vaduz Liechtenstein Amman Jordan +Vaduz Liechtenstein Ankara Turkey +Vaduz Liechtenstein Antananarivo Madagascar +Vaduz Liechtenstein Apia Samoa +Vaduz Liechtenstein Ashgabat Turkmenistan +Vaduz Liechtenstein Asmara Eritrea +Vaduz Liechtenstein Astana Kazakhstan +Vaduz Liechtenstein Athens Greece +Vaduz Liechtenstein Baghdad Iraq +Vaduz Liechtenstein Baku Azerbaijan +Vaduz Liechtenstein Bamako Mali +Vaduz Liechtenstein Bangkok Thailand +Vaduz Liechtenstein Banjul Gambia +Vaduz Liechtenstein Beijing China +Vaduz Liechtenstein Beirut Lebanon +Vaduz Liechtenstein Belgrade Serbia +Vaduz Liechtenstein Belmopan Belize +Vaduz Liechtenstein Berlin Germany +Vaduz Liechtenstein Bern Switzerland +Vaduz Liechtenstein Bishkek Kyrgyzstan +Vaduz Liechtenstein Bratislava Slovakia +Vaduz Liechtenstein Brussels Belgium +Vaduz Liechtenstein Bucharest Romania +Vaduz Liechtenstein Budapest Hungary +Vaduz Liechtenstein Bujumbura Burundi +Vaduz Liechtenstein Cairo Egypt +Vaduz Liechtenstein Canberra Australia +Vaduz Liechtenstein Caracas Venezuela +Valletta Malta Vienna Austria +Valletta Malta Vientiane Laos +Valletta Malta Vilnius Lithuania +Valletta Malta Warsaw Poland +Valletta Malta Windhoek Namibia +Valletta Malta Yerevan Armenia +Valletta Malta Zagreb Croatia +Valletta Malta Abuja Nigeria +Valletta Malta Accra Ghana +Valletta Malta Algiers Algeria +Valletta Malta Amman Jordan +Valletta Malta Ankara Turkey +Valletta Malta Antananarivo Madagascar +Valletta Malta Apia Samoa +Valletta Malta Ashgabat Turkmenistan +Valletta Malta Asmara Eritrea +Valletta Malta Astana Kazakhstan +Valletta Malta Athens Greece +Valletta Malta Baghdad Iraq +Valletta Malta Baku Azerbaijan +Valletta Malta Bamako Mali +Valletta Malta Bangkok Thailand +Valletta Malta Banjul Gambia +Valletta Malta Beijing China +Valletta Malta Beirut Lebanon +Valletta Malta Belgrade Serbia +Valletta Malta Belmopan Belize +Valletta Malta Berlin Germany +Valletta Malta Bern Switzerland +Valletta Malta Bishkek Kyrgyzstan +Valletta Malta Bratislava Slovakia +Valletta Malta Brussels Belgium +Valletta Malta Bucharest Romania +Valletta Malta Budapest Hungary +Valletta Malta Bujumbura Burundi +Valletta Malta Cairo Egypt +Valletta Malta Canberra Australia +Valletta Malta Caracas Venezuela +Valletta Malta Chisinau Moldova +Vienna Austria Vientiane Laos +Vienna Austria Vilnius Lithuania +Vienna Austria Warsaw Poland +Vienna Austria Windhoek Namibia +Vienna Austria Yerevan Armenia +Vienna Austria Zagreb Croatia +Vienna Austria Abuja Nigeria +Vienna Austria Accra Ghana +Vienna Austria Algiers Algeria +Vienna Austria Amman Jordan +Vienna Austria Ankara Turkey +Vienna Austria Antananarivo Madagascar +Vienna Austria Apia Samoa +Vienna Austria Ashgabat Turkmenistan +Vienna Austria Asmara Eritrea +Vienna Austria Astana Kazakhstan +Vienna Austria Athens Greece +Vienna Austria Baghdad Iraq +Vienna Austria Baku Azerbaijan +Vienna Austria Bamako Mali +Vienna Austria Bangkok Thailand +Vienna Austria Banjul Gambia +Vienna Austria Beijing China +Vienna Austria Beirut Lebanon +Vienna Austria Belgrade Serbia +Vienna Austria Belmopan Belize +Vienna Austria Berlin Germany +Vienna Austria Bern Switzerland +Vienna Austria Bishkek Kyrgyzstan +Vienna Austria Bratislava Slovakia +Vienna Austria Brussels Belgium +Vienna Austria Bucharest Romania +Vienna Austria Budapest Hungary +Vienna Austria Bujumbura Burundi +Vienna Austria Cairo Egypt +Vienna Austria Canberra Australia +Vienna Austria Caracas Venezuela +Vienna Austria Chisinau Moldova +Vienna Austria Conakry Guinea +Vientiane Laos Vilnius Lithuania +Vientiane Laos Warsaw Poland +Vientiane Laos Windhoek Namibia +Vientiane Laos Yerevan Armenia +Vientiane Laos Zagreb Croatia +Vientiane Laos Abuja Nigeria +Vientiane Laos Accra Ghana +Vientiane Laos Algiers Algeria +Vientiane Laos Amman Jordan +Vientiane Laos Ankara Turkey +Vientiane Laos Antananarivo Madagascar +Vientiane Laos Apia Samoa +Vientiane Laos Ashgabat Turkmenistan +Vientiane Laos Asmara Eritrea +Vientiane Laos Astana Kazakhstan +Vientiane Laos Athens Greece +Vientiane Laos Baghdad Iraq +Vientiane Laos Baku Azerbaijan +Vientiane Laos Bamako Mali +Vientiane Laos Bangkok Thailand +Vientiane Laos Banjul Gambia +Vientiane Laos Beijing China +Vientiane Laos Beirut Lebanon +Vientiane Laos Belgrade Serbia +Vientiane Laos Belmopan Belize +Vientiane Laos Berlin Germany +Vientiane Laos Bern Switzerland +Vientiane Laos Bishkek Kyrgyzstan +Vientiane Laos Bratislava Slovakia +Vientiane Laos Brussels Belgium +Vientiane Laos Bucharest Romania +Vientiane Laos Budapest Hungary +Vientiane Laos Bujumbura Burundi +Vientiane Laos Cairo Egypt +Vientiane Laos Canberra Australia +Vientiane Laos Caracas Venezuela +Vientiane Laos Chisinau Moldova +Vientiane Laos Conakry Guinea +Vientiane Laos Copenhagen Denmark +Vilnius Lithuania Warsaw Poland +Vilnius Lithuania Windhoek Namibia +Vilnius Lithuania Yerevan Armenia +Vilnius Lithuania Zagreb Croatia +Vilnius Lithuania Abuja Nigeria +Vilnius Lithuania Accra Ghana +Vilnius Lithuania Algiers Algeria +Vilnius Lithuania Amman Jordan +Vilnius Lithuania Ankara Turkey +Vilnius Lithuania Antananarivo Madagascar +Vilnius Lithuania Apia Samoa +Vilnius Lithuania Ashgabat Turkmenistan +Vilnius Lithuania Asmara Eritrea +Vilnius Lithuania Astana Kazakhstan +Vilnius Lithuania Athens Greece +Vilnius Lithuania Baghdad Iraq +Vilnius Lithuania Baku Azerbaijan +Vilnius Lithuania Bamako Mali +Vilnius Lithuania Bangkok Thailand +Vilnius Lithuania Banjul Gambia +Vilnius Lithuania Beijing China +Vilnius Lithuania Beirut Lebanon +Vilnius Lithuania Belgrade Serbia +Vilnius Lithuania Belmopan Belize +Vilnius Lithuania Berlin Germany +Vilnius Lithuania Bern Switzerland +Vilnius Lithuania Bishkek Kyrgyzstan +Vilnius Lithuania Bratislava Slovakia +Vilnius Lithuania Brussels Belgium +Vilnius Lithuania Bucharest Romania +Vilnius Lithuania Budapest Hungary +Vilnius Lithuania Bujumbura Burundi +Vilnius Lithuania Cairo Egypt +Vilnius Lithuania Canberra Australia +Vilnius Lithuania Caracas Venezuela +Vilnius Lithuania Chisinau Moldova +Vilnius Lithuania Conakry Guinea +Vilnius Lithuania Copenhagen Denmark +Vilnius Lithuania Dakar Senegal +Warsaw Poland Windhoek Namibia +Warsaw Poland Yerevan Armenia +Warsaw Poland Zagreb Croatia +Warsaw Poland Abuja Nigeria +Warsaw Poland Accra Ghana +Warsaw Poland Algiers Algeria +Warsaw Poland Amman Jordan +Warsaw Poland Ankara Turkey +Warsaw Poland Antananarivo Madagascar +Warsaw Poland Apia Samoa +Warsaw Poland Ashgabat Turkmenistan +Warsaw Poland Asmara Eritrea +Warsaw Poland Astana Kazakhstan +Warsaw Poland Athens Greece +Warsaw Poland Baghdad Iraq +Warsaw Poland Baku Azerbaijan +Warsaw Poland Bamako Mali +Warsaw Poland Bangkok Thailand +Warsaw Poland Banjul Gambia +Warsaw Poland Beijing China +Warsaw Poland Beirut Lebanon +Warsaw Poland Belgrade Serbia +Warsaw Poland Belmopan Belize +Warsaw Poland Berlin Germany +Warsaw Poland Bern Switzerland +Warsaw Poland Bishkek Kyrgyzstan +Warsaw Poland Bratislava Slovakia +Warsaw Poland Brussels Belgium +Warsaw Poland Bucharest Romania +Warsaw Poland Budapest Hungary +Warsaw Poland Bujumbura Burundi +Warsaw Poland Cairo Egypt +Warsaw Poland Canberra Australia +Warsaw Poland Caracas Venezuela +Warsaw Poland Chisinau Moldova +Warsaw Poland Conakry Guinea +Warsaw Poland Copenhagen Denmark +Warsaw Poland Dakar Senegal +Warsaw Poland Damascus Syria +Windhoek Namibia Yerevan Armenia +Windhoek Namibia Zagreb Croatia +Windhoek Namibia Abuja Nigeria +Windhoek Namibia Accra Ghana +Windhoek Namibia Algiers Algeria +Windhoek Namibia Amman Jordan +Windhoek Namibia Ankara Turkey +Windhoek Namibia Antananarivo Madagascar +Windhoek Namibia Apia Samoa +Windhoek Namibia Ashgabat Turkmenistan +Windhoek Namibia Asmara Eritrea +Windhoek Namibia Astana Kazakhstan +Windhoek Namibia Athens Greece +Windhoek Namibia Baghdad Iraq +Windhoek Namibia Baku Azerbaijan +Windhoek Namibia Bamako Mali +Windhoek Namibia Bangkok Thailand +Windhoek Namibia Banjul Gambia +Windhoek Namibia Beijing China +Windhoek Namibia Beirut Lebanon +Windhoek Namibia Belgrade Serbia +Windhoek Namibia Belmopan Belize +Windhoek Namibia Berlin Germany +Windhoek Namibia Bern Switzerland +Windhoek Namibia Bishkek Kyrgyzstan +Windhoek Namibia Bratislava Slovakia +Windhoek Namibia Brussels Belgium +Windhoek Namibia Bucharest Romania +Windhoek Namibia Budapest Hungary +Windhoek Namibia Bujumbura Burundi +Windhoek Namibia Cairo Egypt +Windhoek Namibia Canberra Australia +Windhoek Namibia Caracas Venezuela +Windhoek Namibia Chisinau Moldova +Windhoek Namibia Conakry Guinea +Windhoek Namibia Copenhagen Denmark +Windhoek Namibia Dakar Senegal +Windhoek Namibia Damascus Syria +Windhoek Namibia Dhaka Bangladesh +Yerevan Armenia Zagreb Croatia +Yerevan Armenia Abuja Nigeria +Yerevan Armenia Accra Ghana +Yerevan Armenia Algiers Algeria +Yerevan Armenia Amman Jordan +Yerevan Armenia Ankara Turkey +Yerevan Armenia Antananarivo Madagascar +Yerevan Armenia Apia Samoa +Yerevan Armenia Ashgabat Turkmenistan +Yerevan Armenia Asmara Eritrea +Yerevan Armenia Astana Kazakhstan +Yerevan Armenia Athens Greece +Yerevan Armenia Baghdad Iraq +Yerevan Armenia Baku Azerbaijan +Yerevan Armenia Bamako Mali +Yerevan Armenia Bangkok Thailand +Yerevan Armenia Banjul Gambia +Yerevan Armenia Beijing China +Yerevan Armenia Beirut Lebanon +Yerevan Armenia Belgrade Serbia +Yerevan Armenia Belmopan Belize +Yerevan Armenia Berlin Germany +Yerevan Armenia Bern Switzerland +Yerevan Armenia Bishkek Kyrgyzstan +Yerevan Armenia Bratislava Slovakia +Yerevan Armenia Brussels Belgium +Yerevan Armenia Bucharest Romania +Yerevan Armenia Budapest Hungary +Yerevan Armenia Bujumbura Burundi +Yerevan Armenia Cairo Egypt +Yerevan Armenia Canberra Australia +Yerevan Armenia Caracas Venezuela +Yerevan Armenia Chisinau Moldova +Yerevan Armenia Conakry Guinea +Yerevan Armenia Copenhagen Denmark +Yerevan Armenia Dakar Senegal +Yerevan Armenia Damascus Syria +Yerevan Armenia Dhaka Bangladesh +Yerevan Armenia Doha Qatar +Zagreb Croatia Abuja Nigeria +Zagreb Croatia Accra Ghana +Zagreb Croatia Algiers Algeria +Zagreb Croatia Amman Jordan +Zagreb Croatia Ankara Turkey +Zagreb Croatia Antananarivo Madagascar +Zagreb Croatia Apia Samoa +Zagreb Croatia Ashgabat Turkmenistan +Zagreb Croatia Asmara Eritrea +Zagreb Croatia Astana Kazakhstan +Zagreb Croatia Athens Greece +Zagreb Croatia Baghdad Iraq +Zagreb Croatia Baku Azerbaijan +Zagreb Croatia Bamako Mali +Zagreb Croatia Bangkok Thailand +Zagreb Croatia Banjul Gambia +Zagreb Croatia Beijing China +Zagreb Croatia Beirut Lebanon +Zagreb Croatia Belgrade Serbia +Zagreb Croatia Belmopan Belize +Zagreb Croatia Berlin Germany +Zagreb Croatia Bern Switzerland +Zagreb Croatia Bishkek Kyrgyzstan +Zagreb Croatia Bratislava Slovakia +Zagreb Croatia Brussels Belgium +Zagreb Croatia Bucharest Romania +Zagreb Croatia Budapest Hungary +Zagreb Croatia Bujumbura Burundi +Zagreb Croatia Cairo Egypt +Zagreb Croatia Canberra Australia +Zagreb Croatia Caracas Venezuela +Zagreb Croatia Chisinau Moldova +Zagreb Croatia Conakry Guinea +Zagreb Croatia Copenhagen Denmark +Zagreb Croatia Dakar Senegal +Zagreb Croatia Damascus Syria +Zagreb Croatia Dhaka Bangladesh +Zagreb Croatia Doha Qatar +Zagreb Croatia Dublin Ireland +: currency +Algeria dinar Angola kwanza +Algeria dinar Argentina peso +Algeria dinar Armenia dram +Algeria dinar Brazil real +Algeria dinar Bulgaria lev +Algeria dinar Cambodia riel +Algeria dinar Canada dollar +Algeria dinar Croatia kuna +Algeria dinar Denmark krone +Algeria dinar Europe euro +Algeria dinar Hungary forint +Algeria dinar India rupee +Algeria dinar Iran rial +Algeria dinar Japan yen +Algeria dinar Korea won +Algeria dinar Latvia lats +Algeria dinar Lithuania litas +Algeria dinar Macedonia denar +Algeria dinar Malaysia ringgit +Algeria dinar Mexico peso +Algeria dinar Nigeria naira +Algeria dinar Poland zloty +Algeria dinar Romania leu +Algeria dinar Russia ruble +Algeria dinar Sweden krona +Algeria dinar Thailand baht +Algeria dinar Ukraine hryvnia +Algeria dinar USA dollar +Algeria dinar Vietnam dong +Angola kwanza Argentina peso +Angola kwanza Armenia dram +Angola kwanza Brazil real +Angola kwanza Bulgaria lev +Angola kwanza Cambodia riel +Angola kwanza Canada dollar +Angola kwanza Croatia kuna +Angola kwanza Denmark krone +Angola kwanza Europe euro +Angola kwanza Hungary forint +Angola kwanza India rupee +Angola kwanza Iran rial +Angola kwanza Japan yen +Angola kwanza Korea won +Angola kwanza Latvia lats +Angola kwanza Lithuania litas +Angola kwanza Macedonia denar +Angola kwanza Malaysia ringgit +Angola kwanza Mexico peso +Angola kwanza Nigeria naira +Angola kwanza Poland zloty +Angola kwanza Romania leu +Angola kwanza Russia ruble +Angola kwanza Sweden krona +Angola kwanza Thailand baht +Angola kwanza Ukraine hryvnia +Angola kwanza USA dollar +Angola kwanza Vietnam dong +Angola kwanza Algeria dinar +Argentina peso Armenia dram +Argentina peso Brazil real +Argentina peso Bulgaria lev +Argentina peso Cambodia riel +Argentina peso Canada dollar +Argentina peso Croatia kuna +Argentina peso Denmark krone +Argentina peso Europe euro +Argentina peso Hungary forint +Argentina peso India rupee +Argentina peso Iran rial +Argentina peso Japan yen +Argentina peso Korea won +Argentina peso Latvia lats +Argentina peso Lithuania litas +Argentina peso Macedonia denar +Argentina peso Malaysia ringgit +Argentina peso Nigeria naira +Argentina peso Poland zloty +Argentina peso Romania leu +Argentina peso Russia ruble +Argentina peso Sweden krona +Argentina peso Thailand baht +Argentina peso Ukraine hryvnia +Argentina peso USA dollar +Argentina peso Vietnam dong +Argentina peso Algeria dinar +Argentina peso Angola kwanza +Armenia dram Brazil real +Armenia dram Bulgaria lev +Armenia dram Cambodia riel +Armenia dram Canada dollar +Armenia dram Croatia kuna +Armenia dram Denmark krone +Armenia dram Europe euro +Armenia dram Hungary forint +Armenia dram India rupee +Armenia dram Iran rial +Armenia dram Japan yen +Armenia dram Korea won +Armenia dram Latvia lats +Armenia dram Lithuania litas +Armenia dram Macedonia denar +Armenia dram Malaysia ringgit +Armenia dram Mexico peso +Armenia dram Nigeria naira +Armenia dram Poland zloty +Armenia dram Romania leu +Armenia dram Russia ruble +Armenia dram Sweden krona +Armenia dram Thailand baht +Armenia dram Ukraine hryvnia +Armenia dram USA dollar +Armenia dram Vietnam dong +Armenia dram Algeria dinar +Armenia dram Angola kwanza +Armenia dram Argentina peso +Brazil real Bulgaria lev +Brazil real Cambodia riel +Brazil real Canada dollar +Brazil real Croatia kuna +Brazil real Denmark krone +Brazil real Europe euro +Brazil real Hungary forint +Brazil real India rupee +Brazil real Iran rial +Brazil real Japan yen +Brazil real Korea won +Brazil real Latvia lats +Brazil real Lithuania litas +Brazil real Macedonia denar +Brazil real Malaysia ringgit +Brazil real Mexico peso +Brazil real Nigeria naira +Brazil real Poland zloty +Brazil real Romania leu +Brazil real Russia ruble +Brazil real Sweden krona +Brazil real Thailand baht +Brazil real Ukraine hryvnia +Brazil real USA dollar +Brazil real Vietnam dong +Brazil real Algeria dinar +Brazil real Angola kwanza +Brazil real Argentina peso +Brazil real Armenia dram +Bulgaria lev Cambodia riel +Bulgaria lev Canada dollar +Bulgaria lev Croatia kuna +Bulgaria lev Denmark krone +Bulgaria lev Europe euro +Bulgaria lev Hungary forint +Bulgaria lev India rupee +Bulgaria lev Iran rial +Bulgaria lev Japan yen +Bulgaria lev Korea won +Bulgaria lev Latvia lats +Bulgaria lev Lithuania litas +Bulgaria lev Macedonia denar +Bulgaria lev Malaysia ringgit +Bulgaria lev Mexico peso +Bulgaria lev Nigeria naira +Bulgaria lev Poland zloty +Bulgaria lev Romania leu +Bulgaria lev Russia ruble +Bulgaria lev Sweden krona +Bulgaria lev Thailand baht +Bulgaria lev Ukraine hryvnia +Bulgaria lev USA dollar +Bulgaria lev Vietnam dong +Bulgaria lev Algeria dinar +Bulgaria lev Angola kwanza +Bulgaria lev Argentina peso +Bulgaria lev Armenia dram +Bulgaria lev Brazil real +Cambodia riel Canada dollar +Cambodia riel Croatia kuna +Cambodia riel Denmark krone +Cambodia riel Europe euro +Cambodia riel Hungary forint +Cambodia riel India rupee +Cambodia riel Iran rial +Cambodia riel Japan yen +Cambodia riel Korea won +Cambodia riel Latvia lats +Cambodia riel Lithuania litas +Cambodia riel Macedonia denar +Cambodia riel Malaysia ringgit +Cambodia riel Mexico peso +Cambodia riel Nigeria naira +Cambodia riel Poland zloty +Cambodia riel Romania leu +Cambodia riel Russia ruble +Cambodia riel Sweden krona +Cambodia riel Thailand baht +Cambodia riel Ukraine hryvnia +Cambodia riel USA dollar +Cambodia riel Vietnam dong +Cambodia riel Algeria dinar +Cambodia riel Angola kwanza +Cambodia riel Argentina peso +Cambodia riel Armenia dram +Cambodia riel Brazil real +Cambodia riel Bulgaria lev +Canada dollar Croatia kuna +Canada dollar Denmark krone +Canada dollar Europe euro +Canada dollar Hungary forint +Canada dollar India rupee +Canada dollar Iran rial +Canada dollar Japan yen +Canada dollar Korea won +Canada dollar Latvia lats +Canada dollar Lithuania litas +Canada dollar Macedonia denar +Canada dollar Malaysia ringgit +Canada dollar Mexico peso +Canada dollar Nigeria naira +Canada dollar Poland zloty +Canada dollar Romania leu +Canada dollar Russia ruble +Canada dollar Sweden krona +Canada dollar Thailand baht +Canada dollar Ukraine hryvnia +Canada dollar Vietnam dong +Canada dollar Algeria dinar +Canada dollar Angola kwanza +Canada dollar Argentina peso +Canada dollar Armenia dram +Canada dollar Brazil real +Canada dollar Bulgaria lev +Canada dollar Cambodia riel +Croatia kuna Denmark krone +Croatia kuna Europe euro +Croatia kuna Hungary forint +Croatia kuna India rupee +Croatia kuna Iran rial +Croatia kuna Japan yen +Croatia kuna Korea won +Croatia kuna Latvia lats +Croatia kuna Lithuania litas +Croatia kuna Macedonia denar +Croatia kuna Malaysia ringgit +Croatia kuna Mexico peso +Croatia kuna Nigeria naira +Croatia kuna Poland zloty +Croatia kuna Romania leu +Croatia kuna Russia ruble +Croatia kuna Sweden krona +Croatia kuna Thailand baht +Croatia kuna Ukraine hryvnia +Croatia kuna USA dollar +Croatia kuna Vietnam dong +Croatia kuna Algeria dinar +Croatia kuna Angola kwanza +Croatia kuna Argentina peso +Croatia kuna Armenia dram +Croatia kuna Brazil real +Croatia kuna Bulgaria lev +Croatia kuna Cambodia riel +Croatia kuna Canada dollar +Denmark krone Europe euro +Denmark krone Hungary forint +Denmark krone India rupee +Denmark krone Iran rial +Denmark krone Japan yen +Denmark krone Korea won +Denmark krone Latvia lats +Denmark krone Lithuania litas +Denmark krone Macedonia denar +Denmark krone Malaysia ringgit +Denmark krone Mexico peso +Denmark krone Nigeria naira +Denmark krone Poland zloty +Denmark krone Romania leu +Denmark krone Russia ruble +Denmark krone Sweden krona +Denmark krone Thailand baht +Denmark krone Ukraine hryvnia +Denmark krone USA dollar +Denmark krone Vietnam dong +Denmark krone Algeria dinar +Denmark krone Angola kwanza +Denmark krone Argentina peso +Denmark krone Armenia dram +Denmark krone Brazil real +Denmark krone Bulgaria lev +Denmark krone Cambodia riel +Denmark krone Canada dollar +Denmark krone Croatia kuna +Europe euro Hungary forint +Europe euro India rupee +Europe euro Iran rial +Europe euro Japan yen +Europe euro Korea won +Europe euro Latvia lats +Europe euro Lithuania litas +Europe euro Macedonia denar +Europe euro Malaysia ringgit +Europe euro Mexico peso +Europe euro Nigeria naira +Europe euro Poland zloty +Europe euro Romania leu +Europe euro Russia ruble +Europe euro Sweden krona +Europe euro Thailand baht +Europe euro Ukraine hryvnia +Europe euro USA dollar +Europe euro Vietnam dong +Europe euro Algeria dinar +Europe euro Angola kwanza +Europe euro Argentina peso +Europe euro Armenia dram +Europe euro Brazil real +Europe euro Bulgaria lev +Europe euro Cambodia riel +Europe euro Canada dollar +Europe euro Croatia kuna +Europe euro Denmark krone +Hungary forint India rupee +Hungary forint Iran rial +Hungary forint Japan yen +Hungary forint Korea won +Hungary forint Latvia lats +Hungary forint Lithuania litas +Hungary forint Macedonia denar +Hungary forint Malaysia ringgit +Hungary forint Mexico peso +Hungary forint Nigeria naira +Hungary forint Poland zloty +Hungary forint Romania leu +Hungary forint Russia ruble +Hungary forint Sweden krona +Hungary forint Thailand baht +Hungary forint Ukraine hryvnia +Hungary forint USA dollar +Hungary forint Vietnam dong +Hungary forint Algeria dinar +Hungary forint Angola kwanza +Hungary forint Argentina peso +Hungary forint Armenia dram +Hungary forint Brazil real +Hungary forint Bulgaria lev +Hungary forint Cambodia riel +Hungary forint Canada dollar +Hungary forint Croatia kuna +Hungary forint Denmark krone +Hungary forint Europe euro +India rupee Iran rial +India rupee Japan yen +India rupee Korea won +India rupee Latvia lats +India rupee Lithuania litas +India rupee Macedonia denar +India rupee Malaysia ringgit +India rupee Mexico peso +India rupee Nigeria naira +India rupee Poland zloty +India rupee Romania leu +India rupee Russia ruble +India rupee Sweden krona +India rupee Thailand baht +India rupee Ukraine hryvnia +India rupee USA dollar +India rupee Vietnam dong +India rupee Algeria dinar +India rupee Angola kwanza +India rupee Argentina peso +India rupee Armenia dram +India rupee Brazil real +India rupee Bulgaria lev +India rupee Cambodia riel +India rupee Canada dollar +India rupee Croatia kuna +India rupee Denmark krone +India rupee Europe euro +India rupee Hungary forint +Iran rial Japan yen +Iran rial Korea won +Iran rial Latvia lats +Iran rial Lithuania litas +Iran rial Macedonia denar +Iran rial Malaysia ringgit +Iran rial Mexico peso +Iran rial Nigeria naira +Iran rial Poland zloty +Iran rial Romania leu +Iran rial Russia ruble +Iran rial Sweden krona +Iran rial Thailand baht +Iran rial Ukraine hryvnia +Iran rial USA dollar +Iran rial Vietnam dong +Iran rial Algeria dinar +Iran rial Angola kwanza +Iran rial Argentina peso +Iran rial Armenia dram +Iran rial Brazil real +Iran rial Bulgaria lev +Iran rial Cambodia riel +Iran rial Canada dollar +Iran rial Croatia kuna +Iran rial Denmark krone +Iran rial Europe euro +Iran rial Hungary forint +Iran rial India rupee +Japan yen Korea won +Japan yen Latvia lats +Japan yen Lithuania litas +Japan yen Macedonia denar +Japan yen Malaysia ringgit +Japan yen Mexico peso +Japan yen Nigeria naira +Japan yen Poland zloty +Japan yen Romania leu +Japan yen Russia ruble +Japan yen Sweden krona +Japan yen Thailand baht +Japan yen Ukraine hryvnia +Japan yen USA dollar +Japan yen Vietnam dong +Japan yen Algeria dinar +Japan yen Angola kwanza +Japan yen Argentina peso +Japan yen Armenia dram +Japan yen Brazil real +Japan yen Bulgaria lev +Japan yen Cambodia riel +Japan yen Canada dollar +Japan yen Croatia kuna +Japan yen Denmark krone +Japan yen Europe euro +Japan yen Hungary forint +Japan yen India rupee +Japan yen Iran rial +Korea won Latvia lats +Korea won Lithuania litas +Korea won Macedonia denar +Korea won Malaysia ringgit +Korea won Mexico peso +Korea won Nigeria naira +Korea won Poland zloty +Korea won Romania leu +Korea won Russia ruble +Korea won Sweden krona +Korea won Thailand baht +Korea won Ukraine hryvnia +Korea won USA dollar +Korea won Vietnam dong +Korea won Algeria dinar +Korea won Angola kwanza +Korea won Argentina peso +Korea won Armenia dram +Korea won Brazil real +Korea won Bulgaria lev +Korea won Cambodia riel +Korea won Canada dollar +Korea won Croatia kuna +Korea won Denmark krone +Korea won Europe euro +Korea won Hungary forint +Korea won India rupee +Korea won Iran rial +Korea won Japan yen +Latvia lats Lithuania litas +Latvia lats Macedonia denar +Latvia lats Malaysia ringgit +Latvia lats Mexico peso +Latvia lats Nigeria naira +Latvia lats Poland zloty +Latvia lats Romania leu +Latvia lats Russia ruble +Latvia lats Sweden krona +Latvia lats Thailand baht +Latvia lats Ukraine hryvnia +Latvia lats USA dollar +Latvia lats Vietnam dong +Latvia lats Algeria dinar +Latvia lats Angola kwanza +Latvia lats Argentina peso +Latvia lats Armenia dram +Latvia lats Brazil real +Latvia lats Bulgaria lev +Latvia lats Cambodia riel +Latvia lats Canada dollar +Latvia lats Croatia kuna +Latvia lats Denmark krone +Latvia lats Europe euro +Latvia lats Hungary forint +Latvia lats India rupee +Latvia lats Iran rial +Latvia lats Japan yen +Latvia lats Korea won +Lithuania litas Macedonia denar +Lithuania litas Malaysia ringgit +Lithuania litas Mexico peso +Lithuania litas Nigeria naira +Lithuania litas Poland zloty +Lithuania litas Romania leu +Lithuania litas Russia ruble +Lithuania litas Sweden krona +Lithuania litas Thailand baht +Lithuania litas Ukraine hryvnia +Lithuania litas USA dollar +Lithuania litas Vietnam dong +Lithuania litas Algeria dinar +Lithuania litas Angola kwanza +Lithuania litas Argentina peso +Lithuania litas Armenia dram +Lithuania litas Brazil real +Lithuania litas Bulgaria lev +Lithuania litas Cambodia riel +Lithuania litas Canada dollar +Lithuania litas Croatia kuna +Lithuania litas Denmark krone +Lithuania litas Europe euro +Lithuania litas Hungary forint +Lithuania litas India rupee +Lithuania litas Iran rial +Lithuania litas Japan yen +Lithuania litas Korea won +Lithuania litas Latvia lats +Macedonia denar Malaysia ringgit +Macedonia denar Mexico peso +Macedonia denar Nigeria naira +Macedonia denar Poland zloty +Macedonia denar Romania leu +Macedonia denar Russia ruble +Macedonia denar Sweden krona +Macedonia denar Thailand baht +Macedonia denar Ukraine hryvnia +Macedonia denar USA dollar +Macedonia denar Vietnam dong +Macedonia denar Algeria dinar +Macedonia denar Angola kwanza +Macedonia denar Argentina peso +Macedonia denar Armenia dram +Macedonia denar Brazil real +Macedonia denar Bulgaria lev +Macedonia denar Cambodia riel +Macedonia denar Canada dollar +Macedonia denar Croatia kuna +Macedonia denar Denmark krone +Macedonia denar Europe euro +Macedonia denar Hungary forint +Macedonia denar India rupee +Macedonia denar Iran rial +Macedonia denar Japan yen +Macedonia denar Korea won +Macedonia denar Latvia lats +Macedonia denar Lithuania litas +Malaysia ringgit Mexico peso +Malaysia ringgit Nigeria naira +Malaysia ringgit Poland zloty +Malaysia ringgit Romania leu +Malaysia ringgit Russia ruble +Malaysia ringgit Sweden krona +Malaysia ringgit Thailand baht +Malaysia ringgit Ukraine hryvnia +Malaysia ringgit USA dollar +Malaysia ringgit Vietnam dong +Malaysia ringgit Algeria dinar +Malaysia ringgit Angola kwanza +Malaysia ringgit Argentina peso +Malaysia ringgit Armenia dram +Malaysia ringgit Brazil real +Malaysia ringgit Bulgaria lev +Malaysia ringgit Cambodia riel +Malaysia ringgit Canada dollar +Malaysia ringgit Croatia kuna +Malaysia ringgit Denmark krone +Malaysia ringgit Europe euro +Malaysia ringgit Hungary forint +Malaysia ringgit India rupee +Malaysia ringgit Iran rial +Malaysia ringgit Japan yen +Malaysia ringgit Korea won +Malaysia ringgit Latvia lats +Malaysia ringgit Lithuania litas +Malaysia ringgit Macedonia denar +Mexico peso Nigeria naira +Mexico peso Poland zloty +Mexico peso Romania leu +Mexico peso Russia ruble +Mexico peso Sweden krona +Mexico peso Thailand baht +Mexico peso Ukraine hryvnia +Mexico peso USA dollar +Mexico peso Vietnam dong +Mexico peso Algeria dinar +Mexico peso Angola kwanza +Mexico peso Armenia dram +Mexico peso Brazil real +Mexico peso Bulgaria lev +Mexico peso Cambodia riel +Mexico peso Canada dollar +Mexico peso Croatia kuna +Mexico peso Denmark krone +Mexico peso Europe euro +Mexico peso Hungary forint +Mexico peso India rupee +Mexico peso Iran rial +Mexico peso Japan yen +Mexico peso Korea won +Mexico peso Latvia lats +Mexico peso Lithuania litas +Mexico peso Macedonia denar +Mexico peso Malaysia ringgit +Nigeria naira Poland zloty +Nigeria naira Romania leu +Nigeria naira Russia ruble +Nigeria naira Sweden krona +Nigeria naira Thailand baht +Nigeria naira Ukraine hryvnia +Nigeria naira USA dollar +Nigeria naira Vietnam dong +Nigeria naira Algeria dinar +Nigeria naira Angola kwanza +Nigeria naira Argentina peso +Nigeria naira Armenia dram +Nigeria naira Brazil real +Nigeria naira Bulgaria lev +Nigeria naira Cambodia riel +Nigeria naira Canada dollar +Nigeria naira Croatia kuna +Nigeria naira Denmark krone +Nigeria naira Europe euro +Nigeria naira Hungary forint +Nigeria naira India rupee +Nigeria naira Iran rial +Nigeria naira Japan yen +Nigeria naira Korea won +Nigeria naira Latvia lats +Nigeria naira Lithuania litas +Nigeria naira Macedonia denar +Nigeria naira Malaysia ringgit +Nigeria naira Mexico peso +Poland zloty Romania leu +Poland zloty Russia ruble +Poland zloty Sweden krona +Poland zloty Thailand baht +Poland zloty Ukraine hryvnia +Poland zloty USA dollar +Poland zloty Vietnam dong +Poland zloty Algeria dinar +Poland zloty Angola kwanza +Poland zloty Argentina peso +Poland zloty Armenia dram +Poland zloty Brazil real +Poland zloty Bulgaria lev +Poland zloty Cambodia riel +Poland zloty Canada dollar +Poland zloty Croatia kuna +Poland zloty Denmark krone +Poland zloty Europe euro +Poland zloty Hungary forint +Poland zloty India rupee +Poland zloty Iran rial +Poland zloty Japan yen +Poland zloty Korea won +Poland zloty Latvia lats +Poland zloty Lithuania litas +Poland zloty Macedonia denar +Poland zloty Malaysia ringgit +Poland zloty Mexico peso +Poland zloty Nigeria naira +Romania leu Russia ruble +Romania leu Sweden krona +Romania leu Thailand baht +Romania leu Ukraine hryvnia +Romania leu USA dollar +Romania leu Vietnam dong +Romania leu Algeria dinar +Romania leu Angola kwanza +Romania leu Argentina peso +Romania leu Armenia dram +Romania leu Brazil real +Romania leu Bulgaria lev +Romania leu Cambodia riel +Romania leu Canada dollar +Romania leu Croatia kuna +Romania leu Denmark krone +Romania leu Europe euro +Romania leu Hungary forint +Romania leu India rupee +Romania leu Iran rial +Romania leu Japan yen +Romania leu Korea won +Romania leu Latvia lats +Romania leu Lithuania litas +Romania leu Macedonia denar +Romania leu Malaysia ringgit +Romania leu Mexico peso +Romania leu Nigeria naira +Romania leu Poland zloty +Russia ruble Sweden krona +Russia ruble Thailand baht +Russia ruble Ukraine hryvnia +Russia ruble USA dollar +Russia ruble Vietnam dong +Russia ruble Algeria dinar +Russia ruble Angola kwanza +Russia ruble Argentina peso +Russia ruble Armenia dram +Russia ruble Brazil real +Russia ruble Bulgaria lev +Russia ruble Cambodia riel +Russia ruble Canada dollar +Russia ruble Croatia kuna +Russia ruble Denmark krone +Russia ruble Europe euro +Russia ruble Hungary forint +Russia ruble India rupee +Russia ruble Iran rial +Russia ruble Japan yen +Russia ruble Korea won +Russia ruble Latvia lats +Russia ruble Lithuania litas +Russia ruble Macedonia denar +Russia ruble Malaysia ringgit +Russia ruble Mexico peso +Russia ruble Nigeria naira +Russia ruble Poland zloty +Russia ruble Romania leu +Sweden krona Thailand baht +Sweden krona Ukraine hryvnia +Sweden krona USA dollar +Sweden krona Vietnam dong +Sweden krona Algeria dinar +Sweden krona Angola kwanza +Sweden krona Argentina peso +Sweden krona Armenia dram +Sweden krona Brazil real +Sweden krona Bulgaria lev +Sweden krona Cambodia riel +Sweden krona Canada dollar +Sweden krona Croatia kuna +Sweden krona Denmark krone +Sweden krona Europe euro +Sweden krona Hungary forint +Sweden krona India rupee +Sweden krona Iran rial +Sweden krona Japan yen +Sweden krona Korea won +Sweden krona Latvia lats +Sweden krona Lithuania litas +Sweden krona Macedonia denar +Sweden krona Malaysia ringgit +Sweden krona Mexico peso +Sweden krona Nigeria naira +Sweden krona Poland zloty +Sweden krona Romania leu +Sweden krona Russia ruble +Thailand baht Ukraine hryvnia +Thailand baht USA dollar +Thailand baht Vietnam dong +Thailand baht Algeria dinar +Thailand baht Angola kwanza +Thailand baht Argentina peso +Thailand baht Armenia dram +Thailand baht Brazil real +Thailand baht Bulgaria lev +Thailand baht Cambodia riel +Thailand baht Canada dollar +Thailand baht Croatia kuna +Thailand baht Denmark krone +Thailand baht Europe euro +Thailand baht Hungary forint +Thailand baht India rupee +Thailand baht Iran rial +Thailand baht Japan yen +Thailand baht Korea won +Thailand baht Latvia lats +Thailand baht Lithuania litas +Thailand baht Macedonia denar +Thailand baht Malaysia ringgit +Thailand baht Mexico peso +Thailand baht Nigeria naira +Thailand baht Poland zloty +Thailand baht Romania leu +Thailand baht Russia ruble +Thailand baht Sweden krona +Ukraine hryvnia USA dollar +Ukraine hryvnia Vietnam dong +Ukraine hryvnia Algeria dinar +Ukraine hryvnia Angola kwanza +Ukraine hryvnia Argentina peso +Ukraine hryvnia Armenia dram +Ukraine hryvnia Brazil real +Ukraine hryvnia Bulgaria lev +Ukraine hryvnia Cambodia riel +Ukraine hryvnia Canada dollar +Ukraine hryvnia Croatia kuna +Ukraine hryvnia Denmark krone +Ukraine hryvnia Europe euro +Ukraine hryvnia Hungary forint +Ukraine hryvnia India rupee +Ukraine hryvnia Iran rial +Ukraine hryvnia Japan yen +Ukraine hryvnia Korea won +Ukraine hryvnia Latvia lats +Ukraine hryvnia Lithuania litas +Ukraine hryvnia Macedonia denar +Ukraine hryvnia Malaysia ringgit +Ukraine hryvnia Mexico peso +Ukraine hryvnia Nigeria naira +Ukraine hryvnia Poland zloty +Ukraine hryvnia Romania leu +Ukraine hryvnia Russia ruble +Ukraine hryvnia Sweden krona +Ukraine hryvnia Thailand baht +USA dollar Vietnam dong +USA dollar Algeria dinar +USA dollar Angola kwanza +USA dollar Argentina peso +USA dollar Armenia dram +USA dollar Brazil real +USA dollar Bulgaria lev +USA dollar Cambodia riel +USA dollar Croatia kuna +USA dollar Denmark krone +USA dollar Europe euro +USA dollar Hungary forint +USA dollar India rupee +USA dollar Iran rial +USA dollar Japan yen +USA dollar Korea won +USA dollar Latvia lats +USA dollar Lithuania litas +USA dollar Macedonia denar +USA dollar Malaysia ringgit +USA dollar Mexico peso +USA dollar Nigeria naira +USA dollar Poland zloty +USA dollar Romania leu +USA dollar Russia ruble +USA dollar Sweden krona +USA dollar Thailand baht +USA dollar Ukraine hryvnia +Vietnam dong Algeria dinar +Vietnam dong Angola kwanza +Vietnam dong Argentina peso +Vietnam dong Armenia dram +Vietnam dong Brazil real +Vietnam dong Bulgaria lev +Vietnam dong Cambodia riel +Vietnam dong Canada dollar +Vietnam dong Croatia kuna +Vietnam dong Denmark krone +Vietnam dong Europe euro +Vietnam dong Hungary forint +Vietnam dong India rupee +Vietnam dong Iran rial +Vietnam dong Japan yen +Vietnam dong Korea won +Vietnam dong Latvia lats +Vietnam dong Lithuania litas +Vietnam dong Macedonia denar +Vietnam dong Malaysia ringgit +Vietnam dong Mexico peso +Vietnam dong Nigeria naira +Vietnam dong Poland zloty +Vietnam dong Romania leu +Vietnam dong Russia ruble +Vietnam dong Sweden krona +Vietnam dong Thailand baht +Vietnam dong Ukraine hryvnia +Vietnam dong USA dollar +: city-in-state +Chicago Illinois Houston Texas +Chicago Illinois Philadelphia Pennsylvania +Chicago Illinois Phoenix Arizona +Chicago Illinois Dallas Texas +Chicago Illinois Jacksonville Florida +Chicago Illinois Indianapolis Indiana +Chicago Illinois Austin Texas +Chicago Illinois Detroit Michigan +Chicago Illinois Memphis Tennessee +Chicago Illinois Boston Massachusetts +Chicago Illinois Seattle Washington +Chicago Illinois Denver Colorado +Chicago Illinois Baltimore Maryland +Chicago Illinois Nashville Tennessee +Chicago Illinois Louisville Kentucky +Chicago Illinois Milwaukee Wisconsin +Chicago Illinois Portland Oregon +Chicago Illinois Tucson Arizona +Chicago Illinois Fresno California +Chicago Illinois Sacramento California +Chicago Illinois Mesa Arizona +Chicago Illinois Atlanta Georgia +Chicago Illinois Omaha Nebraska +Chicago Illinois Miami Florida +Chicago Illinois Tulsa Oklahoma +Chicago Illinois Oakland California +Chicago Illinois Cleveland Ohio +Chicago Illinois Minneapolis Minnesota +Chicago Illinois Wichita Kansas +Chicago Illinois Arlington Texas +Chicago Illinois Bakersfield California +Chicago Illinois Tampa Florida +Chicago Illinois Anaheim California +Chicago Illinois Honolulu Hawaii +Chicago Illinois Pittsburgh Pennsylvania +Chicago Illinois Lexington Kentucky +Chicago Illinois Stockton California +Chicago Illinois Cincinnati Ohio +Chicago Illinois Anchorage Alaska +Houston Texas Philadelphia Pennsylvania +Houston Texas Phoenix Arizona +Houston Texas Jacksonville Florida +Houston Texas Indianapolis Indiana +Houston Texas Detroit Michigan +Houston Texas Memphis Tennessee +Houston Texas Boston Massachusetts +Houston Texas Seattle Washington +Houston Texas Denver Colorado +Houston Texas Baltimore Maryland +Houston Texas Nashville Tennessee +Houston Texas Louisville Kentucky +Houston Texas Milwaukee Wisconsin +Houston Texas Portland Oregon +Houston Texas Tucson Arizona +Houston Texas Fresno California +Houston Texas Sacramento California +Houston Texas Mesa Arizona +Houston Texas Atlanta Georgia +Houston Texas Omaha Nebraska +Houston Texas Miami Florida +Houston Texas Tulsa Oklahoma +Houston Texas Oakland California +Houston Texas Cleveland Ohio +Houston Texas Minneapolis Minnesota +Houston Texas Wichita Kansas +Houston Texas Bakersfield California +Houston Texas Tampa Florida +Houston Texas Anaheim California +Houston Texas Honolulu Hawaii +Houston Texas Pittsburgh Pennsylvania +Houston Texas Lexington Kentucky +Houston Texas Stockton California +Houston Texas Cincinnati Ohio +Houston Texas Anchorage Alaska +Houston Texas Toledo Ohio +Philadelphia Pennsylvania Phoenix Arizona +Philadelphia Pennsylvania Dallas Texas +Philadelphia Pennsylvania Jacksonville Florida +Philadelphia Pennsylvania Indianapolis Indiana +Philadelphia Pennsylvania Austin Texas +Philadelphia Pennsylvania Detroit Michigan +Philadelphia Pennsylvania Memphis Tennessee +Philadelphia Pennsylvania Boston Massachusetts +Philadelphia Pennsylvania Seattle Washington +Philadelphia Pennsylvania Denver Colorado +Philadelphia Pennsylvania Baltimore Maryland +Philadelphia Pennsylvania Nashville Tennessee +Philadelphia Pennsylvania Louisville Kentucky +Philadelphia Pennsylvania Milwaukee Wisconsin +Philadelphia Pennsylvania Portland Oregon +Philadelphia Pennsylvania Tucson Arizona +Philadelphia Pennsylvania Fresno California +Philadelphia Pennsylvania Sacramento California +Philadelphia Pennsylvania Mesa Arizona +Philadelphia Pennsylvania Atlanta Georgia +Philadelphia Pennsylvania Omaha Nebraska +Philadelphia Pennsylvania Miami Florida +Philadelphia Pennsylvania Tulsa Oklahoma +Philadelphia Pennsylvania Oakland California +Philadelphia Pennsylvania Cleveland Ohio +Philadelphia Pennsylvania Minneapolis Minnesota +Philadelphia Pennsylvania Wichita Kansas +Philadelphia Pennsylvania Arlington Texas +Philadelphia Pennsylvania Bakersfield California +Philadelphia Pennsylvania Tampa Florida +Philadelphia Pennsylvania Anaheim California +Philadelphia Pennsylvania Honolulu Hawaii +Philadelphia Pennsylvania Lexington Kentucky +Philadelphia Pennsylvania Stockton California +Philadelphia Pennsylvania Cincinnati Ohio +Philadelphia Pennsylvania Anchorage Alaska +Philadelphia Pennsylvania Toledo Ohio +Philadelphia Pennsylvania Plano Texas +Phoenix Arizona Dallas Texas +Phoenix Arizona Jacksonville Florida +Phoenix Arizona Indianapolis Indiana +Phoenix Arizona Austin Texas +Phoenix Arizona Detroit Michigan +Phoenix Arizona Memphis Tennessee +Phoenix Arizona Boston Massachusetts +Phoenix Arizona Seattle Washington +Phoenix Arizona Denver Colorado +Phoenix Arizona Baltimore Maryland +Phoenix Arizona Nashville Tennessee +Phoenix Arizona Louisville Kentucky +Phoenix Arizona Milwaukee Wisconsin +Phoenix Arizona Portland Oregon +Phoenix Arizona Fresno California +Phoenix Arizona Sacramento California +Phoenix Arizona Atlanta Georgia +Phoenix Arizona Omaha Nebraska +Phoenix Arizona Miami Florida +Phoenix Arizona Tulsa Oklahoma +Phoenix Arizona Oakland California +Phoenix Arizona Cleveland Ohio +Phoenix Arizona Minneapolis Minnesota +Phoenix Arizona Wichita Kansas +Phoenix Arizona Arlington Texas +Phoenix Arizona Bakersfield California +Phoenix Arizona Tampa Florida +Phoenix Arizona Anaheim California +Phoenix Arizona Honolulu Hawaii +Phoenix Arizona Pittsburgh Pennsylvania +Phoenix Arizona Lexington Kentucky +Phoenix Arizona Stockton California +Phoenix Arizona Cincinnati Ohio +Phoenix Arizona Anchorage Alaska +Phoenix Arizona Toledo Ohio +Phoenix Arizona Plano Texas +Phoenix Arizona Henderson Nevada +Dallas Texas Jacksonville Florida +Dallas Texas Indianapolis Indiana +Dallas Texas Detroit Michigan +Dallas Texas Memphis Tennessee +Dallas Texas Boston Massachusetts +Dallas Texas Seattle Washington +Dallas Texas Denver Colorado +Dallas Texas Baltimore Maryland +Dallas Texas Nashville Tennessee +Dallas Texas Louisville Kentucky +Dallas Texas Milwaukee Wisconsin +Dallas Texas Portland Oregon +Dallas Texas Tucson Arizona +Dallas Texas Fresno California +Dallas Texas Sacramento California +Dallas Texas Mesa Arizona +Dallas Texas Atlanta Georgia +Dallas Texas Omaha Nebraska +Dallas Texas Miami Florida +Dallas Texas Tulsa Oklahoma +Dallas Texas Oakland California +Dallas Texas Cleveland Ohio +Dallas Texas Minneapolis Minnesota +Dallas Texas Wichita Kansas +Dallas Texas Bakersfield California +Dallas Texas Tampa Florida +Dallas Texas Anaheim California +Dallas Texas Honolulu Hawaii +Dallas Texas Pittsburgh Pennsylvania +Dallas Texas Lexington Kentucky +Dallas Texas Stockton California +Dallas Texas Cincinnati Ohio +Dallas Texas Anchorage Alaska +Dallas Texas Toledo Ohio +Dallas Texas Henderson Nevada +Dallas Texas Orlando Florida +Jacksonville Florida Indianapolis Indiana +Jacksonville Florida Austin Texas +Jacksonville Florida Detroit Michigan +Jacksonville Florida Memphis Tennessee +Jacksonville Florida Boston Massachusetts +Jacksonville Florida Seattle Washington +Jacksonville Florida Denver Colorado +Jacksonville Florida Baltimore Maryland +Jacksonville Florida Nashville Tennessee +Jacksonville Florida Louisville Kentucky +Jacksonville Florida Milwaukee Wisconsin +Jacksonville Florida Portland Oregon +Jacksonville Florida Tucson Arizona +Jacksonville Florida Fresno California +Jacksonville Florida Sacramento California +Jacksonville Florida Mesa Arizona +Jacksonville Florida Atlanta Georgia +Jacksonville Florida Omaha Nebraska +Jacksonville Florida Tulsa Oklahoma +Jacksonville Florida Oakland California +Jacksonville Florida Cleveland Ohio +Jacksonville Florida Minneapolis Minnesota +Jacksonville Florida Wichita Kansas +Jacksonville Florida Arlington Texas +Jacksonville Florida Bakersfield California +Jacksonville Florida Anaheim California +Jacksonville Florida Honolulu Hawaii +Jacksonville Florida Pittsburgh Pennsylvania +Jacksonville Florida Lexington Kentucky +Jacksonville Florida Stockton California +Jacksonville Florida Cincinnati Ohio +Jacksonville Florida Anchorage Alaska +Jacksonville Florida Toledo Ohio +Jacksonville Florida Plano Texas +Jacksonville Florida Henderson Nevada +Jacksonville Florida Laredo Texas +Indianapolis Indiana Austin Texas +Indianapolis Indiana Detroit Michigan +Indianapolis Indiana Memphis Tennessee +Indianapolis Indiana Boston Massachusetts +Indianapolis Indiana Seattle Washington +Indianapolis Indiana Denver Colorado +Indianapolis Indiana Baltimore Maryland +Indianapolis Indiana Nashville Tennessee +Indianapolis Indiana Louisville Kentucky +Indianapolis Indiana Milwaukee Wisconsin +Indianapolis Indiana Portland Oregon +Indianapolis Indiana Tucson Arizona +Indianapolis Indiana Fresno California +Indianapolis Indiana Sacramento California +Indianapolis Indiana Mesa Arizona +Indianapolis Indiana Atlanta Georgia +Indianapolis Indiana Omaha Nebraska +Indianapolis Indiana Miami Florida +Indianapolis Indiana Tulsa Oklahoma +Indianapolis Indiana Oakland California +Indianapolis Indiana Cleveland Ohio +Indianapolis Indiana Minneapolis Minnesota +Indianapolis Indiana Wichita Kansas +Indianapolis Indiana Arlington Texas +Indianapolis Indiana Bakersfield California +Indianapolis Indiana Tampa Florida +Indianapolis Indiana Anaheim California +Indianapolis Indiana Honolulu Hawaii +Indianapolis Indiana Pittsburgh Pennsylvania +Indianapolis Indiana Lexington Kentucky +Indianapolis Indiana Stockton California +Indianapolis Indiana Cincinnati Ohio +Indianapolis Indiana Anchorage Alaska +Indianapolis Indiana Toledo Ohio +Indianapolis Indiana Plano Texas +Indianapolis Indiana Henderson Nevada +Indianapolis Indiana Orlando Florida +Indianapolis Indiana Laredo Texas +Indianapolis Indiana Chandler Arizona +Austin Texas Detroit Michigan +Austin Texas Memphis Tennessee +Austin Texas Boston Massachusetts +Austin Texas Seattle Washington +Austin Texas Denver Colorado +Austin Texas Baltimore Maryland +Austin Texas Nashville Tennessee +Austin Texas Louisville Kentucky +Austin Texas Milwaukee Wisconsin +Austin Texas Portland Oregon +Austin Texas Tucson Arizona +Austin Texas Fresno California +Austin Texas Sacramento California +Austin Texas Mesa Arizona +Austin Texas Atlanta Georgia +Austin Texas Omaha Nebraska +Austin Texas Miami Florida +Austin Texas Tulsa Oklahoma +Austin Texas Oakland California +Austin Texas Cleveland Ohio +Austin Texas Minneapolis Minnesota +Austin Texas Wichita Kansas +Austin Texas Bakersfield California +Austin Texas Tampa Florida +Austin Texas Anaheim California +Austin Texas Honolulu Hawaii +Austin Texas Pittsburgh Pennsylvania +Austin Texas Lexington Kentucky +Austin Texas Stockton California +Austin Texas Cincinnati Ohio +Austin Texas Anchorage Alaska +Austin Texas Toledo Ohio +Austin Texas Henderson Nevada +Austin Texas Orlando Florida +Austin Texas Chandler Arizona +Austin Texas Madison Wisconsin +Detroit Michigan Memphis Tennessee +Detroit Michigan Boston Massachusetts +Detroit Michigan Seattle Washington +Detroit Michigan Denver Colorado +Detroit Michigan Baltimore Maryland +Detroit Michigan Nashville Tennessee +Detroit Michigan Louisville Kentucky +Detroit Michigan Milwaukee Wisconsin +Detroit Michigan Portland Oregon +Detroit Michigan Tucson Arizona +Detroit Michigan Fresno California +Detroit Michigan Sacramento California +Detroit Michigan Mesa Arizona +Detroit Michigan Atlanta Georgia +Detroit Michigan Omaha Nebraska +Detroit Michigan Miami Florida +Detroit Michigan Tulsa Oklahoma +Detroit Michigan Oakland California +Detroit Michigan Cleveland Ohio +Detroit Michigan Minneapolis Minnesota +Detroit Michigan Wichita Kansas +Detroit Michigan Arlington Texas +Detroit Michigan Bakersfield California +Detroit Michigan Tampa Florida +Detroit Michigan Anaheim California +Detroit Michigan Honolulu Hawaii +Detroit Michigan Pittsburgh Pennsylvania +Detroit Michigan Lexington Kentucky +Detroit Michigan Stockton California +Detroit Michigan Cincinnati Ohio +Detroit Michigan Anchorage Alaska +Detroit Michigan Toledo Ohio +Detroit Michigan Plano Texas +Detroit Michigan Henderson Nevada +Detroit Michigan Orlando Florida +Detroit Michigan Laredo Texas +Detroit Michigan Chandler Arizona +Detroit Michigan Madison Wisconsin +Detroit Michigan Lubbock Texas +Memphis Tennessee Boston Massachusetts +Memphis Tennessee Seattle Washington +Memphis Tennessee Denver Colorado +Memphis Tennessee Baltimore Maryland +Memphis Tennessee Louisville Kentucky +Memphis Tennessee Milwaukee Wisconsin +Memphis Tennessee Portland Oregon +Memphis Tennessee Tucson Arizona +Memphis Tennessee Fresno California +Memphis Tennessee Sacramento California +Memphis Tennessee Mesa Arizona +Memphis Tennessee Atlanta Georgia +Memphis Tennessee Omaha Nebraska +Memphis Tennessee Miami Florida +Memphis Tennessee Tulsa Oklahoma +Memphis Tennessee Oakland California +Memphis Tennessee Cleveland Ohio +Memphis Tennessee Minneapolis Minnesota +Memphis Tennessee Wichita Kansas +Memphis Tennessee Arlington Texas +Memphis Tennessee Bakersfield California +Memphis Tennessee Tampa Florida +Memphis Tennessee Anaheim California +Memphis Tennessee Honolulu Hawaii +Memphis Tennessee Pittsburgh Pennsylvania +Memphis Tennessee Lexington Kentucky +Memphis Tennessee Stockton California +Memphis Tennessee Cincinnati Ohio +Memphis Tennessee Anchorage Alaska +Memphis Tennessee Toledo Ohio +Memphis Tennessee Plano Texas +Memphis Tennessee Henderson Nevada +Memphis Tennessee Orlando Florida +Memphis Tennessee Laredo Texas +Memphis Tennessee Chandler Arizona +Memphis Tennessee Madison Wisconsin +Memphis Tennessee Lubbock Texas +Memphis Tennessee Garland Texas +Boston Massachusetts Seattle Washington +Boston Massachusetts Denver Colorado +Boston Massachusetts Baltimore Maryland +Boston Massachusetts Nashville Tennessee +Boston Massachusetts Louisville Kentucky +Boston Massachusetts Milwaukee Wisconsin +Boston Massachusetts Portland Oregon +Boston Massachusetts Tucson Arizona +Boston Massachusetts Fresno California +Boston Massachusetts Sacramento California +Boston Massachusetts Mesa Arizona +Boston Massachusetts Atlanta Georgia +Boston Massachusetts Omaha Nebraska +Boston Massachusetts Miami Florida +Boston Massachusetts Tulsa Oklahoma +Boston Massachusetts Oakland California +Boston Massachusetts Cleveland Ohio +Boston Massachusetts Minneapolis Minnesota +Boston Massachusetts Wichita Kansas +Boston Massachusetts Arlington Texas +Boston Massachusetts Bakersfield California +Boston Massachusetts Tampa Florida +Boston Massachusetts Anaheim California +Boston Massachusetts Honolulu Hawaii +Boston Massachusetts Pittsburgh Pennsylvania +Boston Massachusetts Lexington Kentucky +Boston Massachusetts Stockton California +Boston Massachusetts Cincinnati Ohio +Boston Massachusetts Anchorage Alaska +Boston Massachusetts Toledo Ohio +Boston Massachusetts Plano Texas +Boston Massachusetts Henderson Nevada +Boston Massachusetts Orlando Florida +Boston Massachusetts Laredo Texas +Boston Massachusetts Chandler Arizona +Boston Massachusetts Madison Wisconsin +Boston Massachusetts Lubbock Texas +Boston Massachusetts Garland Texas +Boston Massachusetts Glendale Arizona +Seattle Washington Denver Colorado +Seattle Washington Baltimore Maryland +Seattle Washington Nashville Tennessee +Seattle Washington Louisville Kentucky +Seattle Washington Milwaukee Wisconsin +Seattle Washington Portland Oregon +Seattle Washington Tucson Arizona +Seattle Washington Fresno California +Seattle Washington Sacramento California +Seattle Washington Mesa Arizona +Seattle Washington Atlanta Georgia +Seattle Washington Omaha Nebraska +Seattle Washington Miami Florida +Seattle Washington Tulsa Oklahoma +Seattle Washington Oakland California +Seattle Washington Cleveland Ohio +Seattle Washington Minneapolis Minnesota +Seattle Washington Wichita Kansas +Seattle Washington Arlington Texas +Seattle Washington Bakersfield California +Seattle Washington Tampa Florida +Seattle Washington Anaheim California +Seattle Washington Honolulu Hawaii +Seattle Washington Pittsburgh Pennsylvania +Seattle Washington Lexington Kentucky +Seattle Washington Stockton California +Seattle Washington Cincinnati Ohio +Seattle Washington Anchorage Alaska +Seattle Washington Toledo Ohio +Seattle Washington Plano Texas +Seattle Washington Henderson Nevada +Seattle Washington Orlando Florida +Seattle Washington Laredo Texas +Seattle Washington Chandler Arizona +Seattle Washington Madison Wisconsin +Seattle Washington Lubbock Texas +Seattle Washington Garland Texas +Seattle Washington Glendale Arizona +Seattle Washington Hialeah Florida +Denver Colorado Baltimore Maryland +Denver Colorado Nashville Tennessee +Denver Colorado Louisville Kentucky +Denver Colorado Milwaukee Wisconsin +Denver Colorado Portland Oregon +Denver Colorado Tucson Arizona +Denver Colorado Fresno California +Denver Colorado Sacramento California +Denver Colorado Mesa Arizona +Denver Colorado Atlanta Georgia +Denver Colorado Omaha Nebraska +Denver Colorado Miami Florida +Denver Colorado Tulsa Oklahoma +Denver Colorado Oakland California +Denver Colorado Cleveland Ohio +Denver Colorado Minneapolis Minnesota +Denver Colorado Wichita Kansas +Denver Colorado Arlington Texas +Denver Colorado Bakersfield California +Denver Colorado Tampa Florida +Denver Colorado Anaheim California +Denver Colorado Honolulu Hawaii +Denver Colorado Pittsburgh Pennsylvania +Denver Colorado Lexington Kentucky +Denver Colorado Stockton California +Denver Colorado Cincinnati Ohio +Denver Colorado Anchorage Alaska +Denver Colorado Toledo Ohio +Denver Colorado Plano Texas +Denver Colorado Henderson Nevada +Denver Colorado Orlando Florida +Denver Colorado Laredo Texas +Denver Colorado Chandler Arizona +Denver Colorado Madison Wisconsin +Denver Colorado Lubbock Texas +Denver Colorado Garland Texas +Denver Colorado Glendale Arizona +Denver Colorado Hialeah Florida +Denver Colorado Reno Nevada +Baltimore Maryland Nashville Tennessee +Baltimore Maryland Louisville Kentucky +Baltimore Maryland Milwaukee Wisconsin +Baltimore Maryland Portland Oregon +Baltimore Maryland Tucson Arizona +Baltimore Maryland Fresno California +Baltimore Maryland Sacramento California +Baltimore Maryland Mesa Arizona +Baltimore Maryland Atlanta Georgia +Baltimore Maryland Omaha Nebraska +Baltimore Maryland Miami Florida +Baltimore Maryland Tulsa Oklahoma +Baltimore Maryland Oakland California +Baltimore Maryland Cleveland Ohio +Baltimore Maryland Minneapolis Minnesota +Baltimore Maryland Wichita Kansas +Baltimore Maryland Arlington Texas +Baltimore Maryland Bakersfield California +Baltimore Maryland Tampa Florida +Baltimore Maryland Anaheim California +Baltimore Maryland Honolulu Hawaii +Baltimore Maryland Pittsburgh Pennsylvania +Baltimore Maryland Lexington Kentucky +Baltimore Maryland Stockton California +Baltimore Maryland Cincinnati Ohio +Baltimore Maryland Anchorage Alaska +Baltimore Maryland Toledo Ohio +Baltimore Maryland Plano Texas +Baltimore Maryland Henderson Nevada +Baltimore Maryland Orlando Florida +Baltimore Maryland Laredo Texas +Baltimore Maryland Chandler Arizona +Baltimore Maryland Madison Wisconsin +Baltimore Maryland Lubbock Texas +Baltimore Maryland Garland Texas +Baltimore Maryland Glendale Arizona +Baltimore Maryland Hialeah Florida +Baltimore Maryland Reno Nevada +Baltimore Maryland Scottsdale Arizona +Nashville Tennessee Louisville Kentucky +Nashville Tennessee Milwaukee Wisconsin +Nashville Tennessee Portland Oregon +Nashville Tennessee Tucson Arizona +Nashville Tennessee Fresno California +Nashville Tennessee Sacramento California +Nashville Tennessee Mesa Arizona +Nashville Tennessee Atlanta Georgia +Nashville Tennessee Omaha Nebraska +Nashville Tennessee Miami Florida +Nashville Tennessee Tulsa Oklahoma +Nashville Tennessee Oakland California +Nashville Tennessee Cleveland Ohio +Nashville Tennessee Minneapolis Minnesota +Nashville Tennessee Wichita Kansas +Nashville Tennessee Arlington Texas +Nashville Tennessee Bakersfield California +Nashville Tennessee Tampa Florida +Nashville Tennessee Anaheim California +Nashville Tennessee Honolulu Hawaii +Nashville Tennessee Pittsburgh Pennsylvania +Nashville Tennessee Lexington Kentucky +Nashville Tennessee Stockton California +Nashville Tennessee Cincinnati Ohio +Nashville Tennessee Anchorage Alaska +Nashville Tennessee Toledo Ohio +Nashville Tennessee Plano Texas +Nashville Tennessee Henderson Nevada +Nashville Tennessee Orlando Florida +Nashville Tennessee Laredo Texas +Nashville Tennessee Chandler Arizona +Nashville Tennessee Madison Wisconsin +Nashville Tennessee Lubbock Texas +Nashville Tennessee Garland Texas +Nashville Tennessee Glendale Arizona +Nashville Tennessee Hialeah Florida +Nashville Tennessee Reno Nevada +Nashville Tennessee Scottsdale Arizona +Nashville Tennessee Irving Texas +Louisville Kentucky Milwaukee Wisconsin +Louisville Kentucky Portland Oregon +Louisville Kentucky Tucson Arizona +Louisville Kentucky Fresno California +Louisville Kentucky Sacramento California +Louisville Kentucky Mesa Arizona +Louisville Kentucky Atlanta Georgia +Louisville Kentucky Omaha Nebraska +Louisville Kentucky Miami Florida +Louisville Kentucky Tulsa Oklahoma +Louisville Kentucky Oakland California +Louisville Kentucky Cleveland Ohio +Louisville Kentucky Minneapolis Minnesota +Louisville Kentucky Wichita Kansas +Louisville Kentucky Arlington Texas +Louisville Kentucky Bakersfield California +Louisville Kentucky Tampa Florida +Louisville Kentucky Anaheim California +Louisville Kentucky Honolulu Hawaii +Louisville Kentucky Pittsburgh Pennsylvania +Louisville Kentucky Stockton California +Louisville Kentucky Cincinnati Ohio +Louisville Kentucky Anchorage Alaska +Louisville Kentucky Toledo Ohio +Louisville Kentucky Plano Texas +Louisville Kentucky Henderson Nevada +Louisville Kentucky Orlando Florida +Louisville Kentucky Laredo Texas +Louisville Kentucky Chandler Arizona +Louisville Kentucky Madison Wisconsin +Louisville Kentucky Lubbock Texas +Louisville Kentucky Garland Texas +Louisville Kentucky Glendale Arizona +Louisville Kentucky Hialeah Florida +Louisville Kentucky Reno Nevada +Louisville Kentucky Scottsdale Arizona +Louisville Kentucky Irving Texas +Louisville Kentucky Fremont California +Milwaukee Wisconsin Portland Oregon +Milwaukee Wisconsin Tucson Arizona +Milwaukee Wisconsin Fresno California +Milwaukee Wisconsin Sacramento California +Milwaukee Wisconsin Mesa Arizona +Milwaukee Wisconsin Atlanta Georgia +Milwaukee Wisconsin Omaha Nebraska +Milwaukee Wisconsin Miami Florida +Milwaukee Wisconsin Tulsa Oklahoma +Milwaukee Wisconsin Oakland California +Milwaukee Wisconsin Cleveland Ohio +Milwaukee Wisconsin Minneapolis Minnesota +Milwaukee Wisconsin Wichita Kansas +Milwaukee Wisconsin Arlington Texas +Milwaukee Wisconsin Bakersfield California +Milwaukee Wisconsin Tampa Florida +Milwaukee Wisconsin Anaheim California +Milwaukee Wisconsin Honolulu Hawaii +Milwaukee Wisconsin Pittsburgh Pennsylvania +Milwaukee Wisconsin Lexington Kentucky +Milwaukee Wisconsin Stockton California +Milwaukee Wisconsin Cincinnati Ohio +Milwaukee Wisconsin Anchorage Alaska +Milwaukee Wisconsin Toledo Ohio +Milwaukee Wisconsin Plano Texas +Milwaukee Wisconsin Henderson Nevada +Milwaukee Wisconsin Orlando Florida +Milwaukee Wisconsin Laredo Texas +Milwaukee Wisconsin Chandler Arizona +Milwaukee Wisconsin Lubbock Texas +Milwaukee Wisconsin Garland Texas +Milwaukee Wisconsin Glendale Arizona +Milwaukee Wisconsin Hialeah Florida +Milwaukee Wisconsin Reno Nevada +Milwaukee Wisconsin Scottsdale Arizona +Milwaukee Wisconsin Irving Texas +Milwaukee Wisconsin Fremont California +Milwaukee Wisconsin Irvine California +Portland Oregon Tucson Arizona +Portland Oregon Fresno California +Portland Oregon Sacramento California +Portland Oregon Mesa Arizona +Portland Oregon Atlanta Georgia +Portland Oregon Omaha Nebraska +Portland Oregon Miami Florida +Portland Oregon Tulsa Oklahoma +Portland Oregon Oakland California +Portland Oregon Cleveland Ohio +Portland Oregon Minneapolis Minnesota +Portland Oregon Wichita Kansas +Portland Oregon Arlington Texas +Portland Oregon Bakersfield California +Portland Oregon Tampa Florida +Portland Oregon Anaheim California +Portland Oregon Honolulu Hawaii +Portland Oregon Pittsburgh Pennsylvania +Portland Oregon Lexington Kentucky +Portland Oregon Stockton California +Portland Oregon Cincinnati Ohio +Portland Oregon Anchorage Alaska +Portland Oregon Toledo Ohio +Portland Oregon Plano Texas +Portland Oregon Henderson Nevada +Portland Oregon Orlando Florida +Portland Oregon Laredo Texas +Portland Oregon Chandler Arizona +Portland Oregon Madison Wisconsin +Portland Oregon Lubbock Texas +Portland Oregon Garland Texas +Portland Oregon Glendale Arizona +Portland Oregon Hialeah Florida +Portland Oregon Reno Nevada +Portland Oregon Scottsdale Arizona +Portland Oregon Irving Texas +Portland Oregon Fremont California +Portland Oregon Irvine California +Portland Oregon Spokane Washington +Tucson Arizona Fresno California +Tucson Arizona Sacramento California +Tucson Arizona Atlanta Georgia +Tucson Arizona Omaha Nebraska +Tucson Arizona Miami Florida +Tucson Arizona Tulsa Oklahoma +Tucson Arizona Oakland California +Tucson Arizona Cleveland Ohio +Tucson Arizona Minneapolis Minnesota +Tucson Arizona Wichita Kansas +Tucson Arizona Arlington Texas +Tucson Arizona Bakersfield California +Tucson Arizona Tampa Florida +Tucson Arizona Anaheim California +Tucson Arizona Honolulu Hawaii +Tucson Arizona Pittsburgh Pennsylvania +Tucson Arizona Lexington Kentucky +Tucson Arizona Stockton California +Tucson Arizona Cincinnati Ohio +Tucson Arizona Anchorage Alaska +Tucson Arizona Toledo Ohio +Tucson Arizona Plano Texas +Tucson Arizona Henderson Nevada +Tucson Arizona Orlando Florida +Tucson Arizona Laredo Texas +Tucson Arizona Madison Wisconsin +Tucson Arizona Lubbock Texas +Tucson Arizona Garland Texas +Tucson Arizona Hialeah Florida +Tucson Arizona Reno Nevada +Tucson Arizona Irving Texas +Tucson Arizona Fremont California +Tucson Arizona Irvine California +Tucson Arizona Spokane Washington +Tucson Arizona Modesto California +Fresno California Mesa Arizona +Fresno California Atlanta Georgia +Fresno California Omaha Nebraska +Fresno California Miami Florida +Fresno California Tulsa Oklahoma +Fresno California Cleveland Ohio +Fresno California Minneapolis Minnesota +Fresno California Wichita Kansas +Fresno California Arlington Texas +Fresno California Tampa Florida +Fresno California Honolulu Hawaii +Fresno California Pittsburgh Pennsylvania +Fresno California Lexington Kentucky +Fresno California Cincinnati Ohio +Fresno California Anchorage Alaska +Fresno California Toledo Ohio +Fresno California Plano Texas +Fresno California Henderson Nevada +Fresno California Orlando Florida +Fresno California Laredo Texas +Fresno California Chandler Arizona +Fresno California Madison Wisconsin +Fresno California Lubbock Texas +Fresno California Garland Texas +Fresno California Glendale Arizona +Fresno California Hialeah Florida +Fresno California Reno Nevada +Fresno California Scottsdale Arizona +Fresno California Irving Texas +Fresno California Spokane Washington +Fresno California Shreveport Louisiana +Sacramento California Mesa Arizona +Sacramento California Atlanta Georgia +Sacramento California Omaha Nebraska +Sacramento California Miami Florida +Sacramento California Tulsa Oklahoma +Sacramento California Cleveland Ohio +Sacramento California Minneapolis Minnesota +Sacramento California Wichita Kansas +Sacramento California Arlington Texas +Sacramento California Tampa Florida +Sacramento California Honolulu Hawaii +Sacramento California Pittsburgh Pennsylvania +Sacramento California Lexington Kentucky +Sacramento California Cincinnati Ohio +Sacramento California Anchorage Alaska +Sacramento California Toledo Ohio +Sacramento California Plano Texas +Sacramento California Henderson Nevada +Sacramento California Orlando Florida +Sacramento California Laredo Texas +Sacramento California Chandler Arizona +Sacramento California Madison Wisconsin +Sacramento California Lubbock Texas +Sacramento California Garland Texas +Sacramento California Glendale Arizona +Sacramento California Hialeah Florida +Sacramento California Reno Nevada +Sacramento California Scottsdale Arizona +Sacramento California Irving Texas +Sacramento California Spokane Washington +Sacramento California Shreveport Louisiana +Sacramento California Tacoma Washington +Mesa Arizona Atlanta Georgia +Mesa Arizona Omaha Nebraska +Mesa Arizona Miami Florida +Mesa Arizona Tulsa Oklahoma +Mesa Arizona Oakland California +Mesa Arizona Cleveland Ohio +Mesa Arizona Minneapolis Minnesota +Mesa Arizona Wichita Kansas +Mesa Arizona Arlington Texas +Mesa Arizona Bakersfield California +Mesa Arizona Tampa Florida +Mesa Arizona Anaheim California +Mesa Arizona Honolulu Hawaii +Mesa Arizona Pittsburgh Pennsylvania +Mesa Arizona Lexington Kentucky +Mesa Arizona Stockton California +Mesa Arizona Cincinnati Ohio +Mesa Arizona Anchorage Alaska +Mesa Arizona Toledo Ohio +Mesa Arizona Plano Texas +Mesa Arizona Henderson Nevada +Mesa Arizona Orlando Florida +Mesa Arizona Laredo Texas +Mesa Arizona Madison Wisconsin +Mesa Arizona Lubbock Texas +Mesa Arizona Garland Texas +Mesa Arizona Hialeah Florida +Mesa Arizona Reno Nevada +Mesa Arizona Irving Texas +Mesa Arizona Fremont California +Mesa Arizona Irvine California +Mesa Arizona Spokane Washington +Mesa Arizona Modesto California +Mesa Arizona Shreveport Louisiana +Mesa Arizona Tacoma Washington +Mesa Arizona Oxnard California +Atlanta Georgia Omaha Nebraska +Atlanta Georgia Miami Florida +Atlanta Georgia Tulsa Oklahoma +Atlanta Georgia Oakland California +Atlanta Georgia Cleveland Ohio +Atlanta Georgia Minneapolis Minnesota +Atlanta Georgia Wichita Kansas +Atlanta Georgia Arlington Texas +Atlanta Georgia Bakersfield California +Atlanta Georgia Tampa Florida +Atlanta Georgia Anaheim California +Atlanta Georgia Honolulu Hawaii +Atlanta Georgia Pittsburgh Pennsylvania +Atlanta Georgia Lexington Kentucky +Atlanta Georgia Stockton California +Atlanta Georgia Cincinnati Ohio +Atlanta Georgia Anchorage Alaska +Atlanta Georgia Toledo Ohio +Atlanta Georgia Plano Texas +Atlanta Georgia Henderson Nevada +Atlanta Georgia Orlando Florida +Atlanta Georgia Laredo Texas +Atlanta Georgia Chandler Arizona +Atlanta Georgia Madison Wisconsin +Atlanta Georgia Lubbock Texas +Atlanta Georgia Garland Texas +Atlanta Georgia Glendale Arizona +Atlanta Georgia Hialeah Florida +Atlanta Georgia Reno Nevada +Atlanta Georgia Scottsdale Arizona +Atlanta Georgia Irving Texas +Atlanta Georgia Fremont California +Atlanta Georgia Irvine California +Atlanta Georgia Spokane Washington +Atlanta Georgia Modesto California +Atlanta Georgia Shreveport Louisiana +Atlanta Georgia Tacoma Washington +Atlanta Georgia Oxnard California +Atlanta Georgia Fontana California +Omaha Nebraska Miami Florida +Omaha Nebraska Tulsa Oklahoma +Omaha Nebraska Oakland California +Omaha Nebraska Cleveland Ohio +Omaha Nebraska Minneapolis Minnesota +Omaha Nebraska Wichita Kansas +Omaha Nebraska Arlington Texas +Omaha Nebraska Bakersfield California +Omaha Nebraska Tampa Florida +Omaha Nebraska Anaheim California +Omaha Nebraska Honolulu Hawaii +Omaha Nebraska Pittsburgh Pennsylvania +Omaha Nebraska Lexington Kentucky +Omaha Nebraska Stockton California +Omaha Nebraska Cincinnati Ohio +Omaha Nebraska Anchorage Alaska +Omaha Nebraska Toledo Ohio +Omaha Nebraska Plano Texas +Omaha Nebraska Henderson Nevada +Omaha Nebraska Orlando Florida +Omaha Nebraska Laredo Texas +Omaha Nebraska Chandler Arizona +Omaha Nebraska Madison Wisconsin +Omaha Nebraska Lubbock Texas +Omaha Nebraska Garland Texas +Omaha Nebraska Glendale Arizona +Omaha Nebraska Hialeah Florida +Omaha Nebraska Reno Nevada +Omaha Nebraska Scottsdale Arizona +Omaha Nebraska Irving Texas +Omaha Nebraska Fremont California +Omaha Nebraska Irvine California +Omaha Nebraska Spokane Washington +Omaha Nebraska Modesto California +Omaha Nebraska Shreveport Louisiana +Omaha Nebraska Tacoma Washington +Omaha Nebraska Oxnard California +Omaha Nebraska Fontana California +Omaha Nebraska Akron Ohio +Miami Florida Tulsa Oklahoma +Miami Florida Oakland California +Miami Florida Cleveland Ohio +Miami Florida Minneapolis Minnesota +Miami Florida Wichita Kansas +Miami Florida Arlington Texas +Miami Florida Bakersfield California +Miami Florida Anaheim California +Miami Florida Honolulu Hawaii +Miami Florida Pittsburgh Pennsylvania +Miami Florida Lexington Kentucky +Miami Florida Stockton California +Miami Florida Cincinnati Ohio +Miami Florida Anchorage Alaska +Miami Florida Toledo Ohio +Miami Florida Plano Texas +Miami Florida Henderson Nevada +Miami Florida Laredo Texas +Miami Florida Chandler Arizona +Miami Florida Madison Wisconsin +Miami Florida Lubbock Texas +Miami Florida Garland Texas +Miami Florida Glendale Arizona +Miami Florida Reno Nevada +Miami Florida Scottsdale Arizona +Miami Florida Irving Texas +Miami Florida Fremont California +Miami Florida Irvine California +Miami Florida Spokane Washington +Miami Florida Modesto California +Miami Florida Shreveport Louisiana +Miami Florida Tacoma Washington +Miami Florida Oxnard California +Miami Florida Fontana California +Miami Florida Akron Ohio +Miami Florida Amarillo Texas +Tulsa Oklahoma Oakland California +Tulsa Oklahoma Cleveland Ohio +Tulsa Oklahoma Minneapolis Minnesota +Tulsa Oklahoma Wichita Kansas +Tulsa Oklahoma Arlington Texas +Tulsa Oklahoma Bakersfield California +Tulsa Oklahoma Tampa Florida +Tulsa Oklahoma Anaheim California +Tulsa Oklahoma Honolulu Hawaii +Tulsa Oklahoma Pittsburgh Pennsylvania +Tulsa Oklahoma Lexington Kentucky +Tulsa Oklahoma Stockton California +Tulsa Oklahoma Cincinnati Ohio +Tulsa Oklahoma Anchorage Alaska +Tulsa Oklahoma Toledo Ohio +Tulsa Oklahoma Plano Texas +Tulsa Oklahoma Henderson Nevada +Tulsa Oklahoma Orlando Florida +Tulsa Oklahoma Laredo Texas +Tulsa Oklahoma Chandler Arizona +Tulsa Oklahoma Madison Wisconsin +Tulsa Oklahoma Lubbock Texas +Tulsa Oklahoma Garland Texas +Tulsa Oklahoma Glendale Arizona +Tulsa Oklahoma Hialeah Florida +Tulsa Oklahoma Reno Nevada +Tulsa Oklahoma Scottsdale Arizona +Tulsa Oklahoma Irving Texas +Tulsa Oklahoma Fremont California +Tulsa Oklahoma Irvine California +Tulsa Oklahoma Spokane Washington +Tulsa Oklahoma Modesto California +Tulsa Oklahoma Shreveport Louisiana +Tulsa Oklahoma Tacoma Washington +Tulsa Oklahoma Oxnard California +Tulsa Oklahoma Fontana California +Tulsa Oklahoma Akron Ohio +Tulsa Oklahoma Amarillo Texas +Tulsa Oklahoma Glendale California +Oakland California Cleveland Ohio +Oakland California Minneapolis Minnesota +Oakland California Wichita Kansas +Oakland California Arlington Texas +Oakland California Tampa Florida +Oakland California Honolulu Hawaii +Oakland California Pittsburgh Pennsylvania +Oakland California Lexington Kentucky +Oakland California Cincinnati Ohio +Oakland California Anchorage Alaska +Oakland California Toledo Ohio +Oakland California Plano Texas +Oakland California Henderson Nevada +Oakland California Orlando Florida +Oakland California Laredo Texas +Oakland California Chandler Arizona +Oakland California Madison Wisconsin +Oakland California Lubbock Texas +Oakland California Garland Texas +Oakland California Glendale Arizona +Oakland California Hialeah Florida +Oakland California Reno Nevada +Oakland California Scottsdale Arizona +Oakland California Irving Texas +Oakland California Spokane Washington +Oakland California Shreveport Louisiana +Oakland California Tacoma Washington +Oakland California Akron Ohio +Oakland California Amarillo Texas +Oakland California Tallahassee Florida +Cleveland Ohio Minneapolis Minnesota +Cleveland Ohio Wichita Kansas +Cleveland Ohio Arlington Texas +Cleveland Ohio Bakersfield California +Cleveland Ohio Tampa Florida +Cleveland Ohio Anaheim California +Cleveland Ohio Honolulu Hawaii +Cleveland Ohio Pittsburgh Pennsylvania +Cleveland Ohio Lexington Kentucky +Cleveland Ohio Stockton California +Cleveland Ohio Anchorage Alaska +Cleveland Ohio Plano Texas +Cleveland Ohio Henderson Nevada +Cleveland Ohio Orlando Florida +Cleveland Ohio Laredo Texas +Cleveland Ohio Chandler Arizona +Cleveland Ohio Madison Wisconsin +Cleveland Ohio Lubbock Texas +Cleveland Ohio Garland Texas +Cleveland Ohio Glendale Arizona +Cleveland Ohio Hialeah Florida +Cleveland Ohio Reno Nevada +Cleveland Ohio Scottsdale Arizona +Cleveland Ohio Irving Texas +Cleveland Ohio Fremont California +Cleveland Ohio Irvine California +Cleveland Ohio Spokane Washington +Cleveland Ohio Modesto California +Cleveland Ohio Shreveport Louisiana +Cleveland Ohio Tacoma Washington +Cleveland Ohio Oxnard California +Cleveland Ohio Fontana California +Cleveland Ohio Amarillo Texas +Cleveland Ohio Glendale California +Cleveland Ohio Tallahassee Florida +Cleveland Ohio Huntsville Alabama +Minneapolis Minnesota Wichita Kansas +Minneapolis Minnesota Arlington Texas +Minneapolis Minnesota Bakersfield California +Minneapolis Minnesota Tampa Florida +Minneapolis Minnesota Anaheim California +Minneapolis Minnesota Honolulu Hawaii +Minneapolis Minnesota Pittsburgh Pennsylvania +Minneapolis Minnesota Lexington Kentucky +Minneapolis Minnesota Stockton California +Minneapolis Minnesota Cincinnati Ohio +Minneapolis Minnesota Anchorage Alaska +Minneapolis Minnesota Toledo Ohio +Minneapolis Minnesota Plano Texas +Minneapolis Minnesota Henderson Nevada +Minneapolis Minnesota Orlando Florida +Minneapolis Minnesota Laredo Texas +Minneapolis Minnesota Chandler Arizona +Minneapolis Minnesota Madison Wisconsin +Minneapolis Minnesota Lubbock Texas +Minneapolis Minnesota Garland Texas +Minneapolis Minnesota Glendale Arizona +Minneapolis Minnesota Hialeah Florida +Minneapolis Minnesota Reno Nevada +Minneapolis Minnesota Scottsdale Arizona +Minneapolis Minnesota Irving Texas +Minneapolis Minnesota Fremont California +Minneapolis Minnesota Irvine California +Minneapolis Minnesota Spokane Washington +Minneapolis Minnesota Modesto California +Minneapolis Minnesota Shreveport Louisiana +Minneapolis Minnesota Tacoma Washington +Minneapolis Minnesota Oxnard California +Minneapolis Minnesota Fontana California +Minneapolis Minnesota Akron Ohio +Minneapolis Minnesota Amarillo Texas +Minneapolis Minnesota Glendale California +Minneapolis Minnesota Tallahassee Florida +Minneapolis Minnesota Huntsville Alabama +Minneapolis Minnesota Worcester Massachusetts +Wichita Kansas Arlington Texas +Wichita Kansas Bakersfield California +Wichita Kansas Tampa Florida +Wichita Kansas Anaheim California +Wichita Kansas Honolulu Hawaii +Wichita Kansas Pittsburgh Pennsylvania +Wichita Kansas Lexington Kentucky +Wichita Kansas Stockton California +Wichita Kansas Cincinnati Ohio +Wichita Kansas Anchorage Alaska +Wichita Kansas Toledo Ohio +Wichita Kansas Plano Texas +Wichita Kansas Henderson Nevada +Wichita Kansas Orlando Florida +Wichita Kansas Laredo Texas +Wichita Kansas Chandler Arizona +Wichita Kansas Madison Wisconsin +Wichita Kansas Lubbock Texas +Wichita Kansas Garland Texas +Wichita Kansas Glendale Arizona +Wichita Kansas Hialeah Florida +Wichita Kansas Reno Nevada +Wichita Kansas Scottsdale Arizona +Wichita Kansas Irving Texas +Wichita Kansas Fremont California +Wichita Kansas Irvine California +Wichita Kansas Spokane Washington +Wichita Kansas Modesto California +Wichita Kansas Shreveport Louisiana +Wichita Kansas Tacoma Washington +Wichita Kansas Oxnard California +Wichita Kansas Fontana California +Wichita Kansas Akron Ohio +Wichita Kansas Amarillo Texas +Wichita Kansas Glendale California +Wichita Kansas Tallahassee Florida +Wichita Kansas Huntsville Alabama +Wichita Kansas Worcester Massachusetts +Wichita Kansas Chicago Illinois +Arlington Texas Bakersfield California +Arlington Texas Tampa Florida +Arlington Texas Anaheim California +Arlington Texas Honolulu Hawaii +Arlington Texas Pittsburgh Pennsylvania +Arlington Texas Lexington Kentucky +Arlington Texas Stockton California +Arlington Texas Cincinnati Ohio +Arlington Texas Anchorage Alaska +Arlington Texas Toledo Ohio +Arlington Texas Henderson Nevada +Arlington Texas Orlando Florida +Arlington Texas Chandler Arizona +Arlington Texas Madison Wisconsin +Arlington Texas Glendale Arizona +Arlington Texas Hialeah Florida +Arlington Texas Reno Nevada +Arlington Texas Scottsdale Arizona +Arlington Texas Fremont California +Arlington Texas Irvine California +Arlington Texas Spokane Washington +Arlington Texas Modesto California +Arlington Texas Shreveport Louisiana +Arlington Texas Tacoma Washington +Arlington Texas Oxnard California +Arlington Texas Fontana California +Arlington Texas Akron Ohio +Arlington Texas Glendale California +Arlington Texas Tallahassee Florida +Arlington Texas Huntsville Alabama +Arlington Texas Worcester Massachusetts +Arlington Texas Chicago Illinois +Bakersfield California Tampa Florida +Bakersfield California Honolulu Hawaii +Bakersfield California Pittsburgh Pennsylvania +Bakersfield California Lexington Kentucky +Bakersfield California Cincinnati Ohio +Bakersfield California Anchorage Alaska +Bakersfield California Toledo Ohio +Bakersfield California Plano Texas +Bakersfield California Henderson Nevada +Bakersfield California Orlando Florida +Bakersfield California Laredo Texas +Bakersfield California Chandler Arizona +Bakersfield California Madison Wisconsin +Bakersfield California Lubbock Texas +Bakersfield California Garland Texas +Bakersfield California Glendale Arizona +Bakersfield California Hialeah Florida +Bakersfield California Reno Nevada +Bakersfield California Scottsdale Arizona +Bakersfield California Irving Texas +Bakersfield California Spokane Washington +Bakersfield California Shreveport Louisiana +Bakersfield California Tacoma Washington +Bakersfield California Akron Ohio +Bakersfield California Amarillo Texas +Bakersfield California Tallahassee Florida +Bakersfield California Huntsville Alabama +Bakersfield California Worcester Massachusetts +Bakersfield California Chicago Illinois +Bakersfield California Houston Texas +Bakersfield California Philadelphia Pennsylvania +Tampa Florida Anaheim California +Tampa Florida Honolulu Hawaii +Tampa Florida Pittsburgh Pennsylvania +Tampa Florida Lexington Kentucky +Tampa Florida Stockton California +Tampa Florida Cincinnati Ohio +Tampa Florida Anchorage Alaska +Tampa Florida Toledo Ohio +Tampa Florida Plano Texas +Tampa Florida Henderson Nevada +Tampa Florida Laredo Texas +Tampa Florida Chandler Arizona +Tampa Florida Madison Wisconsin +Tampa Florida Lubbock Texas +Tampa Florida Garland Texas +Tampa Florida Glendale Arizona +Tampa Florida Reno Nevada +Tampa Florida Scottsdale Arizona +Tampa Florida Irving Texas +Tampa Florida Fremont California +Tampa Florida Irvine California +Tampa Florida Spokane Washington +Tampa Florida Modesto California +Tampa Florida Shreveport Louisiana +Tampa Florida Tacoma Washington +Tampa Florida Oxnard California +Tampa Florida Fontana California +Tampa Florida Akron Ohio +Tampa Florida Amarillo Texas +Tampa Florida Glendale California +Tampa Florida Huntsville Alabama +Tampa Florida Worcester Massachusetts +Tampa Florida Chicago Illinois +Tampa Florida Houston Texas +Tampa Florida Philadelphia Pennsylvania +Tampa Florida Phoenix Arizona +Anaheim California Honolulu Hawaii +Anaheim California Pittsburgh Pennsylvania +Anaheim California Lexington Kentucky +Anaheim California Cincinnati Ohio +Anaheim California Anchorage Alaska +Anaheim California Toledo Ohio +Anaheim California Plano Texas +Anaheim California Henderson Nevada +Anaheim California Orlando Florida +Anaheim California Laredo Texas +Anaheim California Chandler Arizona +Anaheim California Madison Wisconsin +Anaheim California Lubbock Texas +Anaheim California Garland Texas +Anaheim California Glendale Arizona +Anaheim California Hialeah Florida +Anaheim California Reno Nevada +Anaheim California Scottsdale Arizona +Anaheim California Irving Texas +Anaheim California Spokane Washington +Anaheim California Shreveport Louisiana +Anaheim California Tacoma Washington +Anaheim California Akron Ohio +Anaheim California Amarillo Texas +Anaheim California Tallahassee Florida +Anaheim California Huntsville Alabama +Anaheim California Worcester Massachusetts +Anaheim California Chicago Illinois +Anaheim California Houston Texas +Anaheim California Philadelphia Pennsylvania +Anaheim California Phoenix Arizona +Anaheim California Dallas Texas +Honolulu Hawaii Pittsburgh Pennsylvania +Honolulu Hawaii Lexington Kentucky +Honolulu Hawaii Stockton California +Honolulu Hawaii Cincinnati Ohio +Honolulu Hawaii Anchorage Alaska +Honolulu Hawaii Toledo Ohio +Honolulu Hawaii Plano Texas +Honolulu Hawaii Henderson Nevada +Honolulu Hawaii Orlando Florida +Honolulu Hawaii Laredo Texas +Honolulu Hawaii Chandler Arizona +Honolulu Hawaii Madison Wisconsin +Honolulu Hawaii Lubbock Texas +Honolulu Hawaii Garland Texas +Honolulu Hawaii Glendale Arizona +Honolulu Hawaii Hialeah Florida +Honolulu Hawaii Reno Nevada +Honolulu Hawaii Scottsdale Arizona +Honolulu Hawaii Irving Texas +Honolulu Hawaii Fremont California +Honolulu Hawaii Irvine California +Honolulu Hawaii Spokane Washington +Honolulu Hawaii Modesto California +Honolulu Hawaii Shreveport Louisiana +Honolulu Hawaii Tacoma Washington +Honolulu Hawaii Oxnard California +Honolulu Hawaii Fontana California +Honolulu Hawaii Akron Ohio +Honolulu Hawaii Amarillo Texas +Honolulu Hawaii Glendale California +Honolulu Hawaii Tallahassee Florida +Honolulu Hawaii Huntsville Alabama +Honolulu Hawaii Worcester Massachusetts +Honolulu Hawaii Chicago Illinois +Honolulu Hawaii Houston Texas +Honolulu Hawaii Philadelphia Pennsylvania +Honolulu Hawaii Phoenix Arizona +Honolulu Hawaii Dallas Texas +Honolulu Hawaii Jacksonville Florida +Pittsburgh Pennsylvania Lexington Kentucky +Pittsburgh Pennsylvania Stockton California +Pittsburgh Pennsylvania Cincinnati Ohio +Pittsburgh Pennsylvania Anchorage Alaska +Pittsburgh Pennsylvania Toledo Ohio +Pittsburgh Pennsylvania Plano Texas +Pittsburgh Pennsylvania Henderson Nevada +Pittsburgh Pennsylvania Orlando Florida +Pittsburgh Pennsylvania Laredo Texas +Pittsburgh Pennsylvania Chandler Arizona +Pittsburgh Pennsylvania Madison Wisconsin +Pittsburgh Pennsylvania Lubbock Texas +Pittsburgh Pennsylvania Garland Texas +Pittsburgh Pennsylvania Glendale Arizona +Pittsburgh Pennsylvania Hialeah Florida +Pittsburgh Pennsylvania Reno Nevada +Pittsburgh Pennsylvania Scottsdale Arizona +Pittsburgh Pennsylvania Irving Texas +Pittsburgh Pennsylvania Fremont California +Pittsburgh Pennsylvania Irvine California +Pittsburgh Pennsylvania Spokane Washington +Pittsburgh Pennsylvania Modesto California +Pittsburgh Pennsylvania Shreveport Louisiana +Pittsburgh Pennsylvania Tacoma Washington +Pittsburgh Pennsylvania Oxnard California +Pittsburgh Pennsylvania Fontana California +Pittsburgh Pennsylvania Akron Ohio +Pittsburgh Pennsylvania Amarillo Texas +Pittsburgh Pennsylvania Glendale California +Pittsburgh Pennsylvania Tallahassee Florida +Pittsburgh Pennsylvania Huntsville Alabama +Pittsburgh Pennsylvania Worcester Massachusetts +Pittsburgh Pennsylvania Chicago Illinois +Pittsburgh Pennsylvania Houston Texas +Pittsburgh Pennsylvania Phoenix Arizona +Pittsburgh Pennsylvania Dallas Texas +Pittsburgh Pennsylvania Jacksonville Florida +Pittsburgh Pennsylvania Indianapolis Indiana +Lexington Kentucky Stockton California +Lexington Kentucky Cincinnati Ohio +Lexington Kentucky Anchorage Alaska +Lexington Kentucky Toledo Ohio +Lexington Kentucky Plano Texas +Lexington Kentucky Henderson Nevada +Lexington Kentucky Orlando Florida +Lexington Kentucky Laredo Texas +Lexington Kentucky Chandler Arizona +Lexington Kentucky Madison Wisconsin +Lexington Kentucky Lubbock Texas +Lexington Kentucky Garland Texas +Lexington Kentucky Glendale Arizona +Lexington Kentucky Hialeah Florida +Lexington Kentucky Reno Nevada +Lexington Kentucky Scottsdale Arizona +Lexington Kentucky Irving Texas +Lexington Kentucky Fremont California +Lexington Kentucky Irvine California +Lexington Kentucky Spokane Washington +Lexington Kentucky Modesto California +Lexington Kentucky Shreveport Louisiana +Lexington Kentucky Tacoma Washington +Lexington Kentucky Oxnard California +Lexington Kentucky Fontana California +Lexington Kentucky Akron Ohio +Lexington Kentucky Amarillo Texas +Lexington Kentucky Glendale California +Lexington Kentucky Tallahassee Florida +Lexington Kentucky Huntsville Alabama +Lexington Kentucky Worcester Massachusetts +Lexington Kentucky Chicago Illinois +Lexington Kentucky Houston Texas +Lexington Kentucky Philadelphia Pennsylvania +Lexington Kentucky Phoenix Arizona +Lexington Kentucky Dallas Texas +Lexington Kentucky Jacksonville Florida +Lexington Kentucky Indianapolis Indiana +Lexington Kentucky Austin Texas +Stockton California Cincinnati Ohio +Stockton California Anchorage Alaska +Stockton California Toledo Ohio +Stockton California Plano Texas +Stockton California Henderson Nevada +Stockton California Orlando Florida +Stockton California Laredo Texas +Stockton California Chandler Arizona +Stockton California Madison Wisconsin +Stockton California Lubbock Texas +Stockton California Garland Texas +Stockton California Glendale Arizona +Stockton California Hialeah Florida +Stockton California Reno Nevada +Stockton California Scottsdale Arizona +Stockton California Irving Texas +Stockton California Spokane Washington +Stockton California Shreveport Louisiana +Stockton California Tacoma Washington +Stockton California Akron Ohio +Stockton California Amarillo Texas +Stockton California Tallahassee Florida +Stockton California Huntsville Alabama +Stockton California Worcester Massachusetts +Stockton California Chicago Illinois +Stockton California Houston Texas +Stockton California Philadelphia Pennsylvania +Stockton California Phoenix Arizona +Stockton California Dallas Texas +Stockton California Jacksonville Florida +Stockton California Indianapolis Indiana +Stockton California Austin Texas +Stockton California Detroit Michigan +Cincinnati Ohio Anchorage Alaska +Cincinnati Ohio Plano Texas +Cincinnati Ohio Henderson Nevada +Cincinnati Ohio Orlando Florida +Cincinnati Ohio Laredo Texas +Cincinnati Ohio Chandler Arizona +Cincinnati Ohio Madison Wisconsin +Cincinnati Ohio Lubbock Texas +Cincinnati Ohio Garland Texas +Cincinnati Ohio Glendale Arizona +Cincinnati Ohio Hialeah Florida +Cincinnati Ohio Reno Nevada +Cincinnati Ohio Scottsdale Arizona +Cincinnati Ohio Irving Texas +Cincinnati Ohio Fremont California +Cincinnati Ohio Irvine California +Cincinnati Ohio Spokane Washington +Cincinnati Ohio Modesto California +Cincinnati Ohio Shreveport Louisiana +Cincinnati Ohio Tacoma Washington +Cincinnati Ohio Oxnard California +Cincinnati Ohio Fontana California +Cincinnati Ohio Amarillo Texas +Cincinnati Ohio Glendale California +Cincinnati Ohio Tallahassee Florida +Cincinnati Ohio Huntsville Alabama +Cincinnati Ohio Worcester Massachusetts +Cincinnati Ohio Chicago Illinois +Cincinnati Ohio Houston Texas +Cincinnati Ohio Philadelphia Pennsylvania +Cincinnati Ohio Phoenix Arizona +Cincinnati Ohio Dallas Texas +Cincinnati Ohio Jacksonville Florida +Cincinnati Ohio Indianapolis Indiana +Cincinnati Ohio Austin Texas +Cincinnati Ohio Detroit Michigan +Cincinnati Ohio Memphis Tennessee +Anchorage Alaska Toledo Ohio +Anchorage Alaska Plano Texas +Anchorage Alaska Henderson Nevada +Anchorage Alaska Orlando Florida +Anchorage Alaska Laredo Texas +Anchorage Alaska Chandler Arizona +Anchorage Alaska Madison Wisconsin +Anchorage Alaska Lubbock Texas +Anchorage Alaska Garland Texas +Anchorage Alaska Glendale Arizona +Anchorage Alaska Hialeah Florida +Anchorage Alaska Reno Nevada +Anchorage Alaska Scottsdale Arizona +Anchorage Alaska Irving Texas +Anchorage Alaska Fremont California +Anchorage Alaska Irvine California +Anchorage Alaska Spokane Washington +Anchorage Alaska Modesto California +Anchorage Alaska Shreveport Louisiana +Anchorage Alaska Tacoma Washington +Anchorage Alaska Oxnard California +Anchorage Alaska Fontana California +Anchorage Alaska Akron Ohio +Anchorage Alaska Amarillo Texas +Anchorage Alaska Glendale California +Anchorage Alaska Tallahassee Florida +Anchorage Alaska Huntsville Alabama +Anchorage Alaska Worcester Massachusetts +Anchorage Alaska Chicago Illinois +Anchorage Alaska Houston Texas +Anchorage Alaska Philadelphia Pennsylvania +Anchorage Alaska Phoenix Arizona +Anchorage Alaska Dallas Texas +Anchorage Alaska Jacksonville Florida +Anchorage Alaska Indianapolis Indiana +Anchorage Alaska Austin Texas +Anchorage Alaska Detroit Michigan +Anchorage Alaska Memphis Tennessee +Anchorage Alaska Boston Massachusetts +Toledo Ohio Plano Texas +Toledo Ohio Henderson Nevada +Toledo Ohio Orlando Florida +Toledo Ohio Laredo Texas +Toledo Ohio Chandler Arizona +Toledo Ohio Madison Wisconsin +Toledo Ohio Lubbock Texas +Toledo Ohio Garland Texas +Toledo Ohio Glendale Arizona +Toledo Ohio Hialeah Florida +Toledo Ohio Reno Nevada +Toledo Ohio Scottsdale Arizona +Toledo Ohio Irving Texas +Toledo Ohio Fremont California +Toledo Ohio Irvine California +Toledo Ohio Spokane Washington +Toledo Ohio Modesto California +Toledo Ohio Shreveport Louisiana +Toledo Ohio Tacoma Washington +Toledo Ohio Oxnard California +Toledo Ohio Fontana California +Toledo Ohio Amarillo Texas +Toledo Ohio Glendale California +Toledo Ohio Tallahassee Florida +Toledo Ohio Huntsville Alabama +Toledo Ohio Worcester Massachusetts +Toledo Ohio Chicago Illinois +Toledo Ohio Houston Texas +Toledo Ohio Philadelphia Pennsylvania +Toledo Ohio Phoenix Arizona +Toledo Ohio Dallas Texas +Toledo Ohio Jacksonville Florida +Toledo Ohio Indianapolis Indiana +Toledo Ohio Austin Texas +Toledo Ohio Detroit Michigan +Toledo Ohio Memphis Tennessee +Toledo Ohio Boston Massachusetts +Toledo Ohio Seattle Washington +Plano Texas Henderson Nevada +Plano Texas Orlando Florida +Plano Texas Chandler Arizona +Plano Texas Madison Wisconsin +Plano Texas Glendale Arizona +Plano Texas Hialeah Florida +Plano Texas Reno Nevada +Plano Texas Scottsdale Arizona +Plano Texas Fremont California +Plano Texas Irvine California +Plano Texas Spokane Washington +Plano Texas Modesto California +Plano Texas Shreveport Louisiana +Plano Texas Tacoma Washington +Plano Texas Oxnard California +Plano Texas Fontana California +Plano Texas Akron Ohio +Plano Texas Glendale California +Plano Texas Tallahassee Florida +Plano Texas Huntsville Alabama +Plano Texas Worcester Massachusetts +Plano Texas Chicago Illinois +Plano Texas Philadelphia Pennsylvania +Plano Texas Phoenix Arizona +Plano Texas Jacksonville Florida +Plano Texas Indianapolis Indiana +Plano Texas Detroit Michigan +Plano Texas Memphis Tennessee +Plano Texas Boston Massachusetts +Plano Texas Seattle Washington +Plano Texas Denver Colorado +Henderson Nevada Orlando Florida +Henderson Nevada Laredo Texas +Henderson Nevada Chandler Arizona +Henderson Nevada Madison Wisconsin +Henderson Nevada Lubbock Texas +Henderson Nevada Garland Texas +Henderson Nevada Glendale Arizona +Henderson Nevada Hialeah Florida +Henderson Nevada Scottsdale Arizona +Henderson Nevada Irving Texas +Henderson Nevada Fremont California +Henderson Nevada Irvine California +Henderson Nevada Spokane Washington +Henderson Nevada Modesto California +Henderson Nevada Shreveport Louisiana +Henderson Nevada Tacoma Washington +Henderson Nevada Oxnard California +Henderson Nevada Fontana California +Henderson Nevada Akron Ohio +Henderson Nevada Amarillo Texas +Henderson Nevada Glendale California +Henderson Nevada Tallahassee Florida +Henderson Nevada Huntsville Alabama +Henderson Nevada Worcester Massachusetts +Henderson Nevada Chicago Illinois +Henderson Nevada Houston Texas +Henderson Nevada Philadelphia Pennsylvania +Henderson Nevada Phoenix Arizona +Henderson Nevada Dallas Texas +Henderson Nevada Jacksonville Florida +Henderson Nevada Indianapolis Indiana +Henderson Nevada Austin Texas +Henderson Nevada Detroit Michigan +Henderson Nevada Memphis Tennessee +Henderson Nevada Boston Massachusetts +Henderson Nevada Seattle Washington +Henderson Nevada Denver Colorado +Henderson Nevada Baltimore Maryland +Orlando Florida Laredo Texas +Orlando Florida Chandler Arizona +Orlando Florida Madison Wisconsin +Orlando Florida Lubbock Texas +Orlando Florida Garland Texas +Orlando Florida Glendale Arizona +Orlando Florida Reno Nevada +Orlando Florida Scottsdale Arizona +Orlando Florida Irving Texas +Orlando Florida Fremont California +Orlando Florida Irvine California +Orlando Florida Spokane Washington +Orlando Florida Modesto California +Orlando Florida Shreveport Louisiana +Orlando Florida Tacoma Washington +Orlando Florida Oxnard California +Orlando Florida Fontana California +Orlando Florida Akron Ohio +Orlando Florida Amarillo Texas +Orlando Florida Glendale California +Orlando Florida Huntsville Alabama +Orlando Florida Worcester Massachusetts +Orlando Florida Chicago Illinois +Orlando Florida Houston Texas +Orlando Florida Philadelphia Pennsylvania +Orlando Florida Phoenix Arizona +Orlando Florida Dallas Texas +Orlando Florida Indianapolis Indiana +Orlando Florida Austin Texas +Orlando Florida Detroit Michigan +Orlando Florida Memphis Tennessee +Orlando Florida Boston Massachusetts +Orlando Florida Seattle Washington +Orlando Florida Denver Colorado +Orlando Florida Baltimore Maryland +Orlando Florida Nashville Tennessee +Laredo Texas Chandler Arizona +Laredo Texas Madison Wisconsin +Laredo Texas Glendale Arizona +Laredo Texas Hialeah Florida +Laredo Texas Reno Nevada +Laredo Texas Scottsdale Arizona +Laredo Texas Fremont California +Laredo Texas Irvine California +Laredo Texas Spokane Washington +Laredo Texas Modesto California +Laredo Texas Shreveport Louisiana +Laredo Texas Tacoma Washington +Laredo Texas Oxnard California +Laredo Texas Fontana California +Laredo Texas Akron Ohio +Laredo Texas Glendale California +Laredo Texas Tallahassee Florida +Laredo Texas Huntsville Alabama +Laredo Texas Worcester Massachusetts +Laredo Texas Chicago Illinois +Laredo Texas Philadelphia Pennsylvania +Laredo Texas Phoenix Arizona +Laredo Texas Jacksonville Florida +Laredo Texas Indianapolis Indiana +Laredo Texas Detroit Michigan +Laredo Texas Memphis Tennessee +Laredo Texas Boston Massachusetts +Laredo Texas Seattle Washington +Laredo Texas Denver Colorado +Laredo Texas Baltimore Maryland +Laredo Texas Nashville Tennessee +Laredo Texas Louisville Kentucky +Chandler Arizona Madison Wisconsin +Chandler Arizona Lubbock Texas +Chandler Arizona Garland Texas +Chandler Arizona Hialeah Florida +Chandler Arizona Reno Nevada +Chandler Arizona Irving Texas +Chandler Arizona Fremont California +Chandler Arizona Irvine California +Chandler Arizona Spokane Washington +Chandler Arizona Modesto California +Chandler Arizona Shreveport Louisiana +Chandler Arizona Tacoma Washington +Chandler Arizona Oxnard California +Chandler Arizona Fontana California +Chandler Arizona Akron Ohio +Chandler Arizona Amarillo Texas +Chandler Arizona Glendale California +Chandler Arizona Tallahassee Florida +Chandler Arizona Huntsville Alabama +Chandler Arizona Worcester Massachusetts +Chandler Arizona Chicago Illinois +Chandler Arizona Houston Texas +Chandler Arizona Philadelphia Pennsylvania +Chandler Arizona Dallas Texas +Chandler Arizona Jacksonville Florida +Chandler Arizona Indianapolis Indiana +Chandler Arizona Austin Texas +Chandler Arizona Detroit Michigan +Chandler Arizona Memphis Tennessee +Chandler Arizona Boston Massachusetts +Chandler Arizona Seattle Washington +Chandler Arizona Denver Colorado +Chandler Arizona Baltimore Maryland +Chandler Arizona Nashville Tennessee +Chandler Arizona Louisville Kentucky +Chandler Arizona Milwaukee Wisconsin +Madison Wisconsin Lubbock Texas +Madison Wisconsin Garland Texas +Madison Wisconsin Glendale Arizona +Madison Wisconsin Hialeah Florida +Madison Wisconsin Reno Nevada +Madison Wisconsin Scottsdale Arizona +Madison Wisconsin Irving Texas +Madison Wisconsin Fremont California +Madison Wisconsin Irvine California +Madison Wisconsin Spokane Washington +Madison Wisconsin Modesto California +Madison Wisconsin Shreveport Louisiana +Madison Wisconsin Tacoma Washington +Madison Wisconsin Oxnard California +Madison Wisconsin Fontana California +Madison Wisconsin Akron Ohio +Madison Wisconsin Amarillo Texas +Madison Wisconsin Glendale California +Madison Wisconsin Tallahassee Florida +Madison Wisconsin Huntsville Alabama +Madison Wisconsin Worcester Massachusetts +Madison Wisconsin Chicago Illinois +Madison Wisconsin Houston Texas +Madison Wisconsin Philadelphia Pennsylvania +Madison Wisconsin Phoenix Arizona +Madison Wisconsin Dallas Texas +Madison Wisconsin Jacksonville Florida +Madison Wisconsin Indianapolis Indiana +Madison Wisconsin Austin Texas +Madison Wisconsin Detroit Michigan +Madison Wisconsin Memphis Tennessee +Madison Wisconsin Boston Massachusetts +Madison Wisconsin Seattle Washington +Madison Wisconsin Denver Colorado +Madison Wisconsin Baltimore Maryland +Madison Wisconsin Nashville Tennessee +Madison Wisconsin Louisville Kentucky +Madison Wisconsin Portland Oregon +Lubbock Texas Glendale Arizona +Lubbock Texas Hialeah Florida +Lubbock Texas Reno Nevada +Lubbock Texas Scottsdale Arizona +Lubbock Texas Fremont California +Lubbock Texas Irvine California +Lubbock Texas Spokane Washington +Lubbock Texas Modesto California +Lubbock Texas Shreveport Louisiana +Lubbock Texas Tacoma Washington +Lubbock Texas Oxnard California +Lubbock Texas Fontana California +Lubbock Texas Akron Ohio +Lubbock Texas Glendale California +Lubbock Texas Tallahassee Florida +Lubbock Texas Huntsville Alabama +Lubbock Texas Worcester Massachusetts +Lubbock Texas Chicago Illinois +Lubbock Texas Philadelphia Pennsylvania +Lubbock Texas Phoenix Arizona +Lubbock Texas Jacksonville Florida +Lubbock Texas Indianapolis Indiana +Lubbock Texas Detroit Michigan +Lubbock Texas Memphis Tennessee +Lubbock Texas Boston Massachusetts +Lubbock Texas Seattle Washington +Lubbock Texas Denver Colorado +Lubbock Texas Baltimore Maryland +Lubbock Texas Nashville Tennessee +Lubbock Texas Louisville Kentucky +Lubbock Texas Milwaukee Wisconsin +Lubbock Texas Portland Oregon +Lubbock Texas Tucson Arizona +Garland Texas Glendale Arizona +Garland Texas Hialeah Florida +Garland Texas Reno Nevada +Garland Texas Scottsdale Arizona +Garland Texas Fremont California +Garland Texas Irvine California +Garland Texas Spokane Washington +Garland Texas Modesto California +Garland Texas Shreveport Louisiana +Garland Texas Tacoma Washington +Garland Texas Oxnard California +Garland Texas Fontana California +Garland Texas Akron Ohio +Garland Texas Glendale California +Garland Texas Tallahassee Florida +Garland Texas Huntsville Alabama +Garland Texas Worcester Massachusetts +Garland Texas Chicago Illinois +Garland Texas Philadelphia Pennsylvania +Garland Texas Phoenix Arizona +Garland Texas Jacksonville Florida +Garland Texas Indianapolis Indiana +Garland Texas Detroit Michigan +Garland Texas Memphis Tennessee +Garland Texas Boston Massachusetts +Garland Texas Seattle Washington +Garland Texas Denver Colorado +Garland Texas Baltimore Maryland +Garland Texas Nashville Tennessee +Garland Texas Louisville Kentucky +Garland Texas Milwaukee Wisconsin +Garland Texas Portland Oregon +Garland Texas Tucson Arizona +Garland Texas Fresno California +Glendale Arizona Hialeah Florida +Glendale Arizona Reno Nevada +Glendale Arizona Irving Texas +Glendale Arizona Fremont California +Glendale Arizona Irvine California +Glendale Arizona Spokane Washington +Glendale Arizona Modesto California +Glendale Arizona Shreveport Louisiana +Glendale Arizona Tacoma Washington +Glendale Arizona Oxnard California +Glendale Arizona Fontana California +Glendale Arizona Akron Ohio +Glendale Arizona Amarillo Texas +Glendale Arizona Tallahassee Florida +Glendale Arizona Huntsville Alabama +Glendale Arizona Worcester Massachusetts +Glendale Arizona Chicago Illinois +Glendale Arizona Houston Texas +Glendale Arizona Philadelphia Pennsylvania +Glendale Arizona Dallas Texas +Glendale Arizona Jacksonville Florida +Glendale Arizona Indianapolis Indiana +Glendale Arizona Austin Texas +Glendale Arizona Detroit Michigan +Glendale Arizona Memphis Tennessee +Glendale Arizona Boston Massachusetts +Glendale Arizona Seattle Washington +Glendale Arizona Denver Colorado +Glendale Arizona Baltimore Maryland +Glendale Arizona Nashville Tennessee +Glendale Arizona Louisville Kentucky +Glendale Arizona Milwaukee Wisconsin +Glendale Arizona Portland Oregon +Glendale Arizona Fresno California +Glendale Arizona Sacramento California +Hialeah Florida Reno Nevada +Hialeah Florida Scottsdale Arizona +Hialeah Florida Irving Texas +Hialeah Florida Fremont California +Hialeah Florida Irvine California +Hialeah Florida Spokane Washington +Hialeah Florida Modesto California +Hialeah Florida Shreveport Louisiana +Hialeah Florida Tacoma Washington +Hialeah Florida Oxnard California +Hialeah Florida Fontana California +Hialeah Florida Akron Ohio +Hialeah Florida Amarillo Texas +Hialeah Florida Glendale California +Hialeah Florida Huntsville Alabama +Hialeah Florida Worcester Massachusetts +Hialeah Florida Chicago Illinois +Hialeah Florida Houston Texas +Hialeah Florida Philadelphia Pennsylvania +Hialeah Florida Phoenix Arizona +Hialeah Florida Dallas Texas +Hialeah Florida Indianapolis Indiana +Hialeah Florida Austin Texas +Hialeah Florida Detroit Michigan +Hialeah Florida Memphis Tennessee +Hialeah Florida Boston Massachusetts +Hialeah Florida Seattle Washington +Hialeah Florida Denver Colorado +Hialeah Florida Baltimore Maryland +Hialeah Florida Nashville Tennessee +Hialeah Florida Louisville Kentucky +Hialeah Florida Milwaukee Wisconsin +Hialeah Florida Portland Oregon +Hialeah Florida Tucson Arizona +Hialeah Florida Fresno California +Hialeah Florida Sacramento California +Hialeah Florida Mesa Arizona +Reno Nevada Scottsdale Arizona +Reno Nevada Irving Texas +Reno Nevada Fremont California +Reno Nevada Irvine California +Reno Nevada Spokane Washington +Reno Nevada Modesto California +Reno Nevada Shreveport Louisiana +Reno Nevada Tacoma Washington +Reno Nevada Oxnard California +Reno Nevada Fontana California +Reno Nevada Akron Ohio +Reno Nevada Amarillo Texas +Reno Nevada Glendale California +Reno Nevada Tallahassee Florida +Reno Nevada Huntsville Alabama +Reno Nevada Worcester Massachusetts +Reno Nevada Chicago Illinois +Reno Nevada Houston Texas +Reno Nevada Philadelphia Pennsylvania +Reno Nevada Phoenix Arizona +Reno Nevada Dallas Texas +Reno Nevada Jacksonville Florida +Reno Nevada Indianapolis Indiana +Reno Nevada Austin Texas +Reno Nevada Detroit Michigan +Reno Nevada Memphis Tennessee +Reno Nevada Boston Massachusetts +Reno Nevada Seattle Washington +Reno Nevada Denver Colorado +Reno Nevada Baltimore Maryland +Reno Nevada Nashville Tennessee +Reno Nevada Louisville Kentucky +Reno Nevada Milwaukee Wisconsin +Reno Nevada Portland Oregon +Reno Nevada Tucson Arizona +Reno Nevada Fresno California +Reno Nevada Sacramento California +Reno Nevada Mesa Arizona +Reno Nevada Atlanta Georgia +Scottsdale Arizona Irving Texas +Scottsdale Arizona Fremont California +Scottsdale Arizona Irvine California +Scottsdale Arizona Spokane Washington +Scottsdale Arizona Modesto California +Scottsdale Arizona Shreveport Louisiana +Scottsdale Arizona Tacoma Washington +Scottsdale Arizona Oxnard California +Scottsdale Arizona Fontana California +Scottsdale Arizona Akron Ohio +Scottsdale Arizona Amarillo Texas +Scottsdale Arizona Glendale California +Scottsdale Arizona Tallahassee Florida +Scottsdale Arizona Huntsville Alabama +Scottsdale Arizona Worcester Massachusetts +Scottsdale Arizona Chicago Illinois +Scottsdale Arizona Houston Texas +Scottsdale Arizona Philadelphia Pennsylvania +Scottsdale Arizona Dallas Texas +Scottsdale Arizona Jacksonville Florida +Scottsdale Arizona Indianapolis Indiana +Scottsdale Arizona Austin Texas +Scottsdale Arizona Detroit Michigan +Scottsdale Arizona Memphis Tennessee +Scottsdale Arizona Boston Massachusetts +Scottsdale Arizona Seattle Washington +Scottsdale Arizona Denver Colorado +Scottsdale Arizona Baltimore Maryland +Scottsdale Arizona Nashville Tennessee +Scottsdale Arizona Louisville Kentucky +Scottsdale Arizona Milwaukee Wisconsin +Scottsdale Arizona Portland Oregon +Scottsdale Arizona Fresno California +Scottsdale Arizona Sacramento California +Scottsdale Arizona Atlanta Georgia +Scottsdale Arizona Omaha Nebraska +Irving Texas Fremont California +Irving Texas Irvine California +Irving Texas Spokane Washington +Irving Texas Modesto California +Irving Texas Shreveport Louisiana +Irving Texas Tacoma Washington +Irving Texas Oxnard California +Irving Texas Fontana California +Irving Texas Akron Ohio +Irving Texas Glendale California +Irving Texas Tallahassee Florida +Irving Texas Huntsville Alabama +Irving Texas Worcester Massachusetts +Irving Texas Chicago Illinois +Irving Texas Philadelphia Pennsylvania +Irving Texas Phoenix Arizona +Irving Texas Jacksonville Florida +Irving Texas Indianapolis Indiana +Irving Texas Detroit Michigan +Irving Texas Memphis Tennessee +Irving Texas Boston Massachusetts +Irving Texas Seattle Washington +Irving Texas Denver Colorado +Irving Texas Baltimore Maryland +Irving Texas Nashville Tennessee +Irving Texas Louisville Kentucky +Irving Texas Milwaukee Wisconsin +Irving Texas Portland Oregon +Irving Texas Tucson Arizona +Irving Texas Fresno California +Irving Texas Sacramento California +Irving Texas Mesa Arizona +Irving Texas Atlanta Georgia +Irving Texas Omaha Nebraska +Irving Texas Miami Florida +Fremont California Spokane Washington +Fremont California Shreveport Louisiana +Fremont California Tacoma Washington +Fremont California Akron Ohio +Fremont California Amarillo Texas +Fremont California Tallahassee Florida +Fremont California Huntsville Alabama +Fremont California Worcester Massachusetts +Fremont California Chicago Illinois +Fremont California Houston Texas +Fremont California Philadelphia Pennsylvania +Fremont California Phoenix Arizona +Fremont California Dallas Texas +Fremont California Jacksonville Florida +Fremont California Indianapolis Indiana +Fremont California Austin Texas +Fremont California Detroit Michigan +Fremont California Memphis Tennessee +Fremont California Boston Massachusetts +Fremont California Seattle Washington +Fremont California Denver Colorado +Fremont California Baltimore Maryland +Fremont California Nashville Tennessee +Fremont California Louisville Kentucky +Fremont California Milwaukee Wisconsin +Fremont California Portland Oregon +Fremont California Tucson Arizona +Fremont California Mesa Arizona +Fremont California Atlanta Georgia +Fremont California Omaha Nebraska +Fremont California Miami Florida +Fremont California Tulsa Oklahoma +Irvine California Spokane Washington +Irvine California Shreveport Louisiana +Irvine California Tacoma Washington +Irvine California Akron Ohio +Irvine California Amarillo Texas +Irvine California Tallahassee Florida +Irvine California Huntsville Alabama +Irvine California Worcester Massachusetts +Irvine California Chicago Illinois +Irvine California Houston Texas +Irvine California Philadelphia Pennsylvania +Irvine California Phoenix Arizona +Irvine California Dallas Texas +Irvine California Jacksonville Florida +Irvine California Indianapolis Indiana +Irvine California Austin Texas +Irvine California Detroit Michigan +Irvine California Memphis Tennessee +Irvine California Boston Massachusetts +Irvine California Seattle Washington +Irvine California Denver Colorado +Irvine California Baltimore Maryland +Irvine California Nashville Tennessee +Irvine California Louisville Kentucky +Irvine California Milwaukee Wisconsin +Irvine California Portland Oregon +Irvine California Tucson Arizona +Irvine California Mesa Arizona +Irvine California Atlanta Georgia +Irvine California Omaha Nebraska +Irvine California Miami Florida +Irvine California Tulsa Oklahoma +Spokane Washington Modesto California +Spokane Washington Shreveport Louisiana +Spokane Washington Oxnard California +Spokane Washington Fontana California +Spokane Washington Akron Ohio +Spokane Washington Amarillo Texas +Spokane Washington Glendale California +Spokane Washington Tallahassee Florida +Spokane Washington Huntsville Alabama +Spokane Washington Worcester Massachusetts +Spokane Washington Chicago Illinois +Spokane Washington Houston Texas +Spokane Washington Philadelphia Pennsylvania +Spokane Washington Phoenix Arizona +Spokane Washington Dallas Texas +Spokane Washington Jacksonville Florida +Spokane Washington Indianapolis Indiana +Spokane Washington Austin Texas +Spokane Washington Detroit Michigan +Spokane Washington Memphis Tennessee +Spokane Washington Boston Massachusetts +Spokane Washington Denver Colorado +Spokane Washington Baltimore Maryland +Spokane Washington Nashville Tennessee +Spokane Washington Louisville Kentucky +Spokane Washington Milwaukee Wisconsin +Spokane Washington Portland Oregon +Spokane Washington Tucson Arizona +Spokane Washington Fresno California +Spokane Washington Sacramento California +Spokane Washington Mesa Arizona +Spokane Washington Atlanta Georgia +Spokane Washington Omaha Nebraska +Spokane Washington Miami Florida +Spokane Washington Tulsa Oklahoma +Spokane Washington Oakland California +Spokane Washington Cleveland Ohio +Modesto California Shreveport Louisiana +Modesto California Tacoma Washington +Modesto California Akron Ohio +Modesto California Amarillo Texas +Modesto California Tallahassee Florida +Modesto California Huntsville Alabama +Modesto California Worcester Massachusetts +Modesto California Chicago Illinois +Modesto California Houston Texas +Modesto California Philadelphia Pennsylvania +Modesto California Phoenix Arizona +Modesto California Dallas Texas +Modesto California Jacksonville Florida +Modesto California Indianapolis Indiana +Modesto California Austin Texas +Modesto California Detroit Michigan +Modesto California Memphis Tennessee +Modesto California Boston Massachusetts +Modesto California Seattle Washington +Modesto California Denver Colorado +Modesto California Baltimore Maryland +Modesto California Nashville Tennessee +Modesto California Louisville Kentucky +Modesto California Milwaukee Wisconsin +Modesto California Portland Oregon +Modesto California Tucson Arizona +Modesto California Mesa Arizona +Modesto California Atlanta Georgia +Modesto California Omaha Nebraska +Modesto California Miami Florida +Modesto California Tulsa Oklahoma +Modesto California Cleveland Ohio +Modesto California Minneapolis Minnesota +Shreveport Louisiana Tacoma Washington +Shreveport Louisiana Oxnard California +Shreveport Louisiana Fontana California +Shreveport Louisiana Akron Ohio +Shreveport Louisiana Amarillo Texas +Shreveport Louisiana Glendale California +Shreveport Louisiana Tallahassee Florida +Shreveport Louisiana Huntsville Alabama +Shreveport Louisiana Worcester Massachusetts +Shreveport Louisiana Chicago Illinois +Shreveport Louisiana Houston Texas +Shreveport Louisiana Philadelphia Pennsylvania +Shreveport Louisiana Phoenix Arizona +Shreveport Louisiana Dallas Texas +Shreveport Louisiana Jacksonville Florida +Shreveport Louisiana Indianapolis Indiana +Shreveport Louisiana Austin Texas +Shreveport Louisiana Detroit Michigan +Shreveport Louisiana Memphis Tennessee +Shreveport Louisiana Boston Massachusetts +Shreveport Louisiana Seattle Washington +Shreveport Louisiana Denver Colorado +Shreveport Louisiana Baltimore Maryland +Shreveport Louisiana Nashville Tennessee +Shreveport Louisiana Louisville Kentucky +Shreveport Louisiana Milwaukee Wisconsin +Shreveport Louisiana Portland Oregon +Shreveport Louisiana Tucson Arizona +Shreveport Louisiana Fresno California +Shreveport Louisiana Sacramento California +Shreveport Louisiana Mesa Arizona +Shreveport Louisiana Atlanta Georgia +Shreveport Louisiana Omaha Nebraska +Shreveport Louisiana Miami Florida +Shreveport Louisiana Tulsa Oklahoma +Shreveport Louisiana Oakland California +Shreveport Louisiana Cleveland Ohio +Shreveport Louisiana Minneapolis Minnesota +Shreveport Louisiana Wichita Kansas +Tacoma Washington Oxnard California +Tacoma Washington Fontana California +Tacoma Washington Akron Ohio +Tacoma Washington Amarillo Texas +Tacoma Washington Glendale California +Tacoma Washington Tallahassee Florida +Tacoma Washington Huntsville Alabama +Tacoma Washington Worcester Massachusetts +Tacoma Washington Chicago Illinois +Tacoma Washington Houston Texas +Tacoma Washington Philadelphia Pennsylvania +Tacoma Washington Phoenix Arizona +Tacoma Washington Dallas Texas +Tacoma Washington Jacksonville Florida +Tacoma Washington Indianapolis Indiana +Tacoma Washington Austin Texas +Tacoma Washington Detroit Michigan +Tacoma Washington Memphis Tennessee +Tacoma Washington Boston Massachusetts +Tacoma Washington Denver Colorado +Tacoma Washington Baltimore Maryland +Tacoma Washington Nashville Tennessee +Tacoma Washington Louisville Kentucky +Tacoma Washington Milwaukee Wisconsin +Tacoma Washington Portland Oregon +Tacoma Washington Tucson Arizona +Tacoma Washington Fresno California +Tacoma Washington Sacramento California +Tacoma Washington Mesa Arizona +Tacoma Washington Atlanta Georgia +Tacoma Washington Omaha Nebraska +Tacoma Washington Miami Florida +Tacoma Washington Tulsa Oklahoma +Tacoma Washington Oakland California +Tacoma Washington Cleveland Ohio +Tacoma Washington Minneapolis Minnesota +Tacoma Washington Wichita Kansas +Tacoma Washington Arlington Texas +Oxnard California Akron Ohio +Oxnard California Amarillo Texas +Oxnard California Tallahassee Florida +Oxnard California Huntsville Alabama +Oxnard California Worcester Massachusetts +Oxnard California Chicago Illinois +Oxnard California Houston Texas +Oxnard California Philadelphia Pennsylvania +Oxnard California Phoenix Arizona +Oxnard California Dallas Texas +Oxnard California Jacksonville Florida +Oxnard California Indianapolis Indiana +Oxnard California Austin Texas +Oxnard California Detroit Michigan +Oxnard California Memphis Tennessee +Oxnard California Boston Massachusetts +Oxnard California Seattle Washington +Oxnard California Denver Colorado +Oxnard California Baltimore Maryland +Oxnard California Nashville Tennessee +Oxnard California Louisville Kentucky +Oxnard California Milwaukee Wisconsin +Oxnard California Portland Oregon +Oxnard California Tucson Arizona +Oxnard California Mesa Arizona +Oxnard California Atlanta Georgia +Oxnard California Omaha Nebraska +Oxnard California Miami Florida +Oxnard California Tulsa Oklahoma +Oxnard California Cleveland Ohio +Oxnard California Minneapolis Minnesota +Oxnard California Wichita Kansas +Oxnard California Arlington Texas +Fontana California Akron Ohio +Fontana California Amarillo Texas +Fontana California Tallahassee Florida +Fontana California Huntsville Alabama +Fontana California Worcester Massachusetts +Fontana California Chicago Illinois +Fontana California Houston Texas +Fontana California Philadelphia Pennsylvania +Fontana California Phoenix Arizona +Fontana California Dallas Texas +Fontana California Jacksonville Florida +Fontana California Indianapolis Indiana +Fontana California Austin Texas +Fontana California Detroit Michigan +Fontana California Memphis Tennessee +Fontana California Boston Massachusetts +Fontana California Seattle Washington +Fontana California Denver Colorado +Fontana California Baltimore Maryland +Fontana California Nashville Tennessee +Fontana California Louisville Kentucky +Fontana California Milwaukee Wisconsin +Fontana California Portland Oregon +Fontana California Tucson Arizona +Fontana California Mesa Arizona +Fontana California Atlanta Georgia +Fontana California Omaha Nebraska +Fontana California Miami Florida +Fontana California Tulsa Oklahoma +Fontana California Cleveland Ohio +Fontana California Minneapolis Minnesota +Fontana California Wichita Kansas +Fontana California Arlington Texas +Fontana California Tampa Florida +Akron Ohio Amarillo Texas +Akron Ohio Glendale California +Akron Ohio Tallahassee Florida +Akron Ohio Huntsville Alabama +Akron Ohio Worcester Massachusetts +Akron Ohio Chicago Illinois +Akron Ohio Houston Texas +Akron Ohio Philadelphia Pennsylvania +Akron Ohio Phoenix Arizona +Akron Ohio Dallas Texas +Akron Ohio Jacksonville Florida +Akron Ohio Indianapolis Indiana +Akron Ohio Austin Texas +Akron Ohio Detroit Michigan +Akron Ohio Memphis Tennessee +Akron Ohio Boston Massachusetts +Akron Ohio Seattle Washington +Akron Ohio Denver Colorado +Akron Ohio Baltimore Maryland +Akron Ohio Nashville Tennessee +Akron Ohio Louisville Kentucky +Akron Ohio Milwaukee Wisconsin +Akron Ohio Portland Oregon +Akron Ohio Tucson Arizona +Akron Ohio Fresno California +Akron Ohio Sacramento California +Akron Ohio Mesa Arizona +Akron Ohio Atlanta Georgia +Akron Ohio Omaha Nebraska +Akron Ohio Miami Florida +Akron Ohio Tulsa Oklahoma +Akron Ohio Oakland California +Akron Ohio Minneapolis Minnesota +Akron Ohio Wichita Kansas +Akron Ohio Arlington Texas +Akron Ohio Bakersfield California +Akron Ohio Tampa Florida +Akron Ohio Anaheim California +Amarillo Texas Glendale California +Amarillo Texas Tallahassee Florida +Amarillo Texas Huntsville Alabama +Amarillo Texas Worcester Massachusetts +Amarillo Texas Chicago Illinois +Amarillo Texas Philadelphia Pennsylvania +Amarillo Texas Phoenix Arizona +Amarillo Texas Jacksonville Florida +Amarillo Texas Indianapolis Indiana +Amarillo Texas Detroit Michigan +Amarillo Texas Memphis Tennessee +Amarillo Texas Boston Massachusetts +Amarillo Texas Seattle Washington +Amarillo Texas Denver Colorado +Amarillo Texas Baltimore Maryland +Amarillo Texas Nashville Tennessee +Amarillo Texas Louisville Kentucky +Amarillo Texas Milwaukee Wisconsin +Amarillo Texas Portland Oregon +Amarillo Texas Tucson Arizona +Amarillo Texas Fresno California +Amarillo Texas Sacramento California +Amarillo Texas Mesa Arizona +Amarillo Texas Atlanta Georgia +Amarillo Texas Omaha Nebraska +Amarillo Texas Miami Florida +Amarillo Texas Tulsa Oklahoma +Amarillo Texas Oakland California +Amarillo Texas Cleveland Ohio +Amarillo Texas Minneapolis Minnesota +Amarillo Texas Wichita Kansas +Amarillo Texas Bakersfield California +Amarillo Texas Tampa Florida +Amarillo Texas Anaheim California +Amarillo Texas Honolulu Hawaii +Glendale California Tallahassee Florida +Glendale California Huntsville Alabama +Glendale California Worcester Massachusetts +Glendale California Chicago Illinois +Glendale California Houston Texas +Glendale California Philadelphia Pennsylvania +Glendale California Phoenix Arizona +Glendale California Dallas Texas +Glendale California Jacksonville Florida +Glendale California Indianapolis Indiana +Glendale California Austin Texas +Glendale California Detroit Michigan +Glendale California Memphis Tennessee +Glendale California Boston Massachusetts +Glendale California Seattle Washington +Glendale California Denver Colorado +Glendale California Baltimore Maryland +Glendale California Nashville Tennessee +Glendale California Louisville Kentucky +Glendale California Milwaukee Wisconsin +Glendale California Portland Oregon +Glendale California Tucson Arizona +Glendale California Mesa Arizona +Glendale California Atlanta Georgia +Glendale California Omaha Nebraska +Glendale California Miami Florida +Glendale California Tulsa Oklahoma +Glendale California Cleveland Ohio +Glendale California Minneapolis Minnesota +Glendale California Wichita Kansas +Glendale California Arlington Texas +Glendale California Tampa Florida +Glendale California Honolulu Hawaii +Glendale California Pittsburgh Pennsylvania +Tallahassee Florida Huntsville Alabama +Tallahassee Florida Worcester Massachusetts +Tallahassee Florida Chicago Illinois +Tallahassee Florida Houston Texas +Tallahassee Florida Philadelphia Pennsylvania +Tallahassee Florida Phoenix Arizona +Tallahassee Florida Dallas Texas +Tallahassee Florida Indianapolis Indiana +Tallahassee Florida Austin Texas +Tallahassee Florida Detroit Michigan +Tallahassee Florida Memphis Tennessee +Tallahassee Florida Boston Massachusetts +Tallahassee Florida Seattle Washington +Tallahassee Florida Denver Colorado +Tallahassee Florida Baltimore Maryland +Tallahassee Florida Nashville Tennessee +Tallahassee Florida Louisville Kentucky +Tallahassee Florida Milwaukee Wisconsin +Tallahassee Florida Portland Oregon +Tallahassee Florida Tucson Arizona +Tallahassee Florida Fresno California +Tallahassee Florida Sacramento California +Tallahassee Florida Mesa Arizona +Tallahassee Florida Atlanta Georgia +Tallahassee Florida Omaha Nebraska +Tallahassee Florida Tulsa Oklahoma +Tallahassee Florida Oakland California +Tallahassee Florida Cleveland Ohio +Tallahassee Florida Minneapolis Minnesota +Tallahassee Florida Wichita Kansas +Tallahassee Florida Arlington Texas +Tallahassee Florida Bakersfield California +Tallahassee Florida Anaheim California +Tallahassee Florida Honolulu Hawaii +Tallahassee Florida Pittsburgh Pennsylvania +Tallahassee Florida Lexington Kentucky +Huntsville Alabama Worcester Massachusetts +Huntsville Alabama Chicago Illinois +Huntsville Alabama Houston Texas +Huntsville Alabama Philadelphia Pennsylvania +Huntsville Alabama Phoenix Arizona +Huntsville Alabama Dallas Texas +Huntsville Alabama Jacksonville Florida +Huntsville Alabama Indianapolis Indiana +Huntsville Alabama Austin Texas +Huntsville Alabama Detroit Michigan +Huntsville Alabama Memphis Tennessee +Huntsville Alabama Boston Massachusetts +Huntsville Alabama Seattle Washington +Huntsville Alabama Denver Colorado +Huntsville Alabama Baltimore Maryland +Huntsville Alabama Nashville Tennessee +Huntsville Alabama Louisville Kentucky +Huntsville Alabama Milwaukee Wisconsin +Huntsville Alabama Portland Oregon +Huntsville Alabama Tucson Arizona +Huntsville Alabama Fresno California +Huntsville Alabama Sacramento California +Huntsville Alabama Mesa Arizona +Huntsville Alabama Atlanta Georgia +Huntsville Alabama Omaha Nebraska +Huntsville Alabama Miami Florida +Huntsville Alabama Tulsa Oklahoma +Huntsville Alabama Oakland California +Huntsville Alabama Cleveland Ohio +Huntsville Alabama Minneapolis Minnesota +Huntsville Alabama Wichita Kansas +Huntsville Alabama Arlington Texas +Huntsville Alabama Bakersfield California +Huntsville Alabama Tampa Florida +Huntsville Alabama Anaheim California +Huntsville Alabama Honolulu Hawaii +Huntsville Alabama Pittsburgh Pennsylvania +Huntsville Alabama Lexington Kentucky +Huntsville Alabama Stockton California +Worcester Massachusetts Chicago Illinois +Worcester Massachusetts Houston Texas +Worcester Massachusetts Philadelphia Pennsylvania +Worcester Massachusetts Phoenix Arizona +Worcester Massachusetts Dallas Texas +Worcester Massachusetts Jacksonville Florida +Worcester Massachusetts Indianapolis Indiana +Worcester Massachusetts Austin Texas +Worcester Massachusetts Detroit Michigan +Worcester Massachusetts Memphis Tennessee +Worcester Massachusetts Seattle Washington +Worcester Massachusetts Denver Colorado +Worcester Massachusetts Baltimore Maryland +Worcester Massachusetts Nashville Tennessee +Worcester Massachusetts Louisville Kentucky +Worcester Massachusetts Milwaukee Wisconsin +Worcester Massachusetts Portland Oregon +Worcester Massachusetts Tucson Arizona +Worcester Massachusetts Fresno California +Worcester Massachusetts Sacramento California +Worcester Massachusetts Mesa Arizona +Worcester Massachusetts Atlanta Georgia +Worcester Massachusetts Omaha Nebraska +Worcester Massachusetts Miami Florida +Worcester Massachusetts Tulsa Oklahoma +Worcester Massachusetts Oakland California +Worcester Massachusetts Cleveland Ohio +Worcester Massachusetts Minneapolis Minnesota +Worcester Massachusetts Wichita Kansas +Worcester Massachusetts Arlington Texas +Worcester Massachusetts Bakersfield California +Worcester Massachusetts Tampa Florida +Worcester Massachusetts Anaheim California +Worcester Massachusetts Honolulu Hawaii +Worcester Massachusetts Pittsburgh Pennsylvania +Worcester Massachusetts Lexington Kentucky +Worcester Massachusetts Stockton California +Worcester Massachusetts Cincinnati Ohio +: family +boy girl brother sister +boy girl brothers sisters +boy girl dad mom +boy girl father mother +boy girl grandfather grandmother +boy girl grandpa grandma +boy girl grandson granddaughter +boy girl groom bride +boy girl he she +boy girl his her +boy girl husband wife +boy girl king queen +boy girl man woman +boy girl nephew niece +boy girl policeman policewoman +boy girl prince princess +boy girl son daughter +boy girl sons daughters +boy girl stepbrother stepsister +boy girl stepfather stepmother +boy girl stepson stepdaughter +boy girl uncle aunt +brother sister brothers sisters +brother sister dad mom +brother sister father mother +brother sister grandfather grandmother +brother sister grandpa grandma +brother sister grandson granddaughter +brother sister groom bride +brother sister he she +brother sister his her +brother sister husband wife +brother sister king queen +brother sister man woman +brother sister nephew niece +brother sister policeman policewoman +brother sister prince princess +brother sister son daughter +brother sister sons daughters +brother sister stepbrother stepsister +brother sister stepfather stepmother +brother sister stepson stepdaughter +brother sister uncle aunt +brother sister boy girl +brothers sisters dad mom +brothers sisters father mother +brothers sisters grandfather grandmother +brothers sisters grandpa grandma +brothers sisters grandson granddaughter +brothers sisters groom bride +brothers sisters he she +brothers sisters his her +brothers sisters husband wife +brothers sisters king queen +brothers sisters man woman +brothers sisters nephew niece +brothers sisters policeman policewoman +brothers sisters prince princess +brothers sisters son daughter +brothers sisters sons daughters +brothers sisters stepbrother stepsister +brothers sisters stepfather stepmother +brothers sisters stepson stepdaughter +brothers sisters uncle aunt +brothers sisters boy girl +brothers sisters brother sister +dad mom father mother +dad mom grandfather grandmother +dad mom grandpa grandma +dad mom grandson granddaughter +dad mom groom bride +dad mom he she +dad mom his her +dad mom husband wife +dad mom king queen +dad mom man woman +dad mom nephew niece +dad mom policeman policewoman +dad mom prince princess +dad mom son daughter +dad mom sons daughters +dad mom stepbrother stepsister +dad mom stepfather stepmother +dad mom stepson stepdaughter +dad mom uncle aunt +dad mom boy girl +dad mom brother sister +dad mom brothers sisters +father mother grandfather grandmother +father mother grandpa grandma +father mother grandson granddaughter +father mother groom bride +father mother he she +father mother his her +father mother husband wife +father mother king queen +father mother man woman +father mother nephew niece +father mother policeman policewoman +father mother prince princess +father mother son daughter +father mother sons daughters +father mother stepbrother stepsister +father mother stepfather stepmother +father mother stepson stepdaughter +father mother uncle aunt +father mother boy girl +father mother brother sister +father mother brothers sisters +father mother dad mom +grandfather grandmother grandpa grandma +grandfather grandmother grandson granddaughter +grandfather grandmother groom bride +grandfather grandmother he she +grandfather grandmother his her +grandfather grandmother husband wife +grandfather grandmother king queen +grandfather grandmother man woman +grandfather grandmother nephew niece +grandfather grandmother policeman policewoman +grandfather grandmother prince princess +grandfather grandmother son daughter +grandfather grandmother sons daughters +grandfather grandmother stepbrother stepsister +grandfather grandmother stepfather stepmother +grandfather grandmother stepson stepdaughter +grandfather grandmother uncle aunt +grandfather grandmother boy girl +grandfather grandmother brother sister +grandfather grandmother brothers sisters +grandfather grandmother dad mom +grandfather grandmother father mother +grandpa grandma grandson granddaughter +grandpa grandma groom bride +grandpa grandma he she +grandpa grandma his her +grandpa grandma husband wife +grandpa grandma king queen +grandpa grandma man woman +grandpa grandma nephew niece +grandpa grandma policeman policewoman +grandpa grandma prince princess +grandpa grandma son daughter +grandpa grandma sons daughters +grandpa grandma stepbrother stepsister +grandpa grandma stepfather stepmother +grandpa grandma stepson stepdaughter +grandpa grandma uncle aunt +grandpa grandma boy girl +grandpa grandma brother sister +grandpa grandma brothers sisters +grandpa grandma dad mom +grandpa grandma father mother +grandpa grandma grandfather grandmother +grandson granddaughter groom bride +grandson granddaughter he she +grandson granddaughter his her +grandson granddaughter husband wife +grandson granddaughter king queen +grandson granddaughter man woman +grandson granddaughter nephew niece +grandson granddaughter policeman policewoman +grandson granddaughter prince princess +grandson granddaughter son daughter +grandson granddaughter sons daughters +grandson granddaughter stepbrother stepsister +grandson granddaughter stepfather stepmother +grandson granddaughter stepson stepdaughter +grandson granddaughter uncle aunt +grandson granddaughter boy girl +grandson granddaughter brother sister +grandson granddaughter brothers sisters +grandson granddaughter dad mom +grandson granddaughter father mother +grandson granddaughter grandfather grandmother +grandson granddaughter grandpa grandma +groom bride he she +groom bride his her +groom bride husband wife +groom bride king queen +groom bride man woman +groom bride nephew niece +groom bride policeman policewoman +groom bride prince princess +groom bride son daughter +groom bride sons daughters +groom bride stepbrother stepsister +groom bride stepfather stepmother +groom bride stepson stepdaughter +groom bride uncle aunt +groom bride boy girl +groom bride brother sister +groom bride brothers sisters +groom bride dad mom +groom bride father mother +groom bride grandfather grandmother +groom bride grandpa grandma +groom bride grandson granddaughter +he she his her +he she husband wife +he she king queen +he she man woman +he she nephew niece +he she policeman policewoman +he she prince princess +he she son daughter +he she sons daughters +he she stepbrother stepsister +he she stepfather stepmother +he she stepson stepdaughter +he she uncle aunt +he she boy girl +he she brother sister +he she brothers sisters +he she dad mom +he she father mother +he she grandfather grandmother +he she grandpa grandma +he she grandson granddaughter +he she groom bride +his her husband wife +his her king queen +his her man woman +his her nephew niece +his her policeman policewoman +his her prince princess +his her son daughter +his her sons daughters +his her stepbrother stepsister +his her stepfather stepmother +his her stepson stepdaughter +his her uncle aunt +his her boy girl +his her brother sister +his her brothers sisters +his her dad mom +his her father mother +his her grandfather grandmother +his her grandpa grandma +his her grandson granddaughter +his her groom bride +his her he she +husband wife king queen +husband wife man woman +husband wife nephew niece +husband wife policeman policewoman +husband wife prince princess +husband wife son daughter +husband wife sons daughters +husband wife stepbrother stepsister +husband wife stepfather stepmother +husband wife stepson stepdaughter +husband wife uncle aunt +husband wife boy girl +husband wife brother sister +husband wife brothers sisters +husband wife dad mom +husband wife father mother +husband wife grandfather grandmother +husband wife grandpa grandma +husband wife grandson granddaughter +husband wife groom bride +husband wife he she +husband wife his her +king queen man woman +king queen nephew niece +king queen policeman policewoman +king queen prince princess +king queen son daughter +king queen sons daughters +king queen stepbrother stepsister +king queen stepfather stepmother +king queen stepson stepdaughter +king queen uncle aunt +king queen boy girl +king queen brother sister +king queen brothers sisters +king queen dad mom +king queen father mother +king queen grandfather grandmother +king queen grandpa grandma +king queen grandson granddaughter +king queen groom bride +king queen he she +king queen his her +king queen husband wife +man woman nephew niece +man woman policeman policewoman +man woman prince princess +man woman son daughter +man woman sons daughters +man woman stepbrother stepsister +man woman stepfather stepmother +man woman stepson stepdaughter +man woman uncle aunt +man woman boy girl +man woman brother sister +man woman brothers sisters +man woman dad mom +man woman father mother +man woman grandfather grandmother +man woman grandpa grandma +man woman grandson granddaughter +man woman groom bride +man woman he she +man woman his her +man woman husband wife +man woman king queen +nephew niece policeman policewoman +nephew niece prince princess +nephew niece son daughter +nephew niece sons daughters +nephew niece stepbrother stepsister +nephew niece stepfather stepmother +nephew niece stepson stepdaughter +nephew niece uncle aunt +nephew niece boy girl +nephew niece brother sister +nephew niece brothers sisters +nephew niece dad mom +nephew niece father mother +nephew niece grandfather grandmother +nephew niece grandpa grandma +nephew niece grandson granddaughter +nephew niece groom bride +nephew niece he she +nephew niece his her +nephew niece husband wife +nephew niece king queen +nephew niece man woman +policeman policewoman prince princess +policeman policewoman son daughter +policeman policewoman sons daughters +policeman policewoman stepbrother stepsister +policeman policewoman stepfather stepmother +policeman policewoman stepson stepdaughter +policeman policewoman uncle aunt +policeman policewoman boy girl +policeman policewoman brother sister +policeman policewoman brothers sisters +policeman policewoman dad mom +policeman policewoman father mother +policeman policewoman grandfather grandmother +policeman policewoman grandpa grandma +policeman policewoman grandson granddaughter +policeman policewoman groom bride +policeman policewoman he she +policeman policewoman his her +policeman policewoman husband wife +policeman policewoman king queen +policeman policewoman man woman +policeman policewoman nephew niece +prince princess son daughter +prince princess sons daughters +prince princess stepbrother stepsister +prince princess stepfather stepmother +prince princess stepson stepdaughter +prince princess uncle aunt +prince princess boy girl +prince princess brother sister +prince princess brothers sisters +prince princess dad mom +prince princess father mother +prince princess grandfather grandmother +prince princess grandpa grandma +prince princess grandson granddaughter +prince princess groom bride +prince princess he she +prince princess his her +prince princess husband wife +prince princess king queen +prince princess man woman +prince princess nephew niece +prince princess policeman policewoman +son daughter sons daughters +son daughter stepbrother stepsister +son daughter stepfather stepmother +son daughter stepson stepdaughter +son daughter uncle aunt +son daughter boy girl +son daughter brother sister +son daughter brothers sisters +son daughter dad mom +son daughter father mother +son daughter grandfather grandmother +son daughter grandpa grandma +son daughter grandson granddaughter +son daughter groom bride +son daughter he she +son daughter his her +son daughter husband wife +son daughter king queen +son daughter man woman +son daughter nephew niece +son daughter policeman policewoman +son daughter prince princess +sons daughters stepbrother stepsister +sons daughters stepfather stepmother +sons daughters stepson stepdaughter +sons daughters uncle aunt +sons daughters boy girl +sons daughters brother sister +sons daughters brothers sisters +sons daughters dad mom +sons daughters father mother +sons daughters grandfather grandmother +sons daughters grandpa grandma +sons daughters grandson granddaughter +sons daughters groom bride +sons daughters he she +sons daughters his her +sons daughters husband wife +sons daughters king queen +sons daughters man woman +sons daughters nephew niece +sons daughters policeman policewoman +sons daughters prince princess +sons daughters son daughter +stepbrother stepsister stepfather stepmother +stepbrother stepsister stepson stepdaughter +stepbrother stepsister uncle aunt +stepbrother stepsister boy girl +stepbrother stepsister brother sister +stepbrother stepsister brothers sisters +stepbrother stepsister dad mom +stepbrother stepsister father mother +stepbrother stepsister grandfather grandmother +stepbrother stepsister grandpa grandma +stepbrother stepsister grandson granddaughter +stepbrother stepsister groom bride +stepbrother stepsister he she +stepbrother stepsister his her +stepbrother stepsister husband wife +stepbrother stepsister king queen +stepbrother stepsister man woman +stepbrother stepsister nephew niece +stepbrother stepsister policeman policewoman +stepbrother stepsister prince princess +stepbrother stepsister son daughter +stepbrother stepsister sons daughters +stepfather stepmother stepson stepdaughter +stepfather stepmother uncle aunt +stepfather stepmother boy girl +stepfather stepmother brother sister +stepfather stepmother brothers sisters +stepfather stepmother dad mom +stepfather stepmother father mother +stepfather stepmother grandfather grandmother +stepfather stepmother grandpa grandma +stepfather stepmother grandson granddaughter +stepfather stepmother groom bride +stepfather stepmother he she +stepfather stepmother his her +stepfather stepmother husband wife +stepfather stepmother king queen +stepfather stepmother man woman +stepfather stepmother nephew niece +stepfather stepmother policeman policewoman +stepfather stepmother prince princess +stepfather stepmother son daughter +stepfather stepmother sons daughters +stepfather stepmother stepbrother stepsister +stepson stepdaughter uncle aunt +stepson stepdaughter boy girl +stepson stepdaughter brother sister +stepson stepdaughter brothers sisters +stepson stepdaughter dad mom +stepson stepdaughter father mother +stepson stepdaughter grandfather grandmother +stepson stepdaughter grandpa grandma +stepson stepdaughter grandson granddaughter +stepson stepdaughter groom bride +stepson stepdaughter he she +stepson stepdaughter his her +stepson stepdaughter husband wife +stepson stepdaughter king queen +stepson stepdaughter man woman +stepson stepdaughter nephew niece +stepson stepdaughter policeman policewoman +stepson stepdaughter prince princess +stepson stepdaughter son daughter +stepson stepdaughter sons daughters +stepson stepdaughter stepbrother stepsister +stepson stepdaughter stepfather stepmother +uncle aunt boy girl +uncle aunt brother sister +uncle aunt brothers sisters +uncle aunt dad mom +uncle aunt father mother +uncle aunt grandfather grandmother +uncle aunt grandpa grandma +uncle aunt grandson granddaughter +uncle aunt groom bride +uncle aunt he she +uncle aunt his her +uncle aunt husband wife +uncle aunt king queen +uncle aunt man woman +uncle aunt nephew niece +uncle aunt policeman policewoman +uncle aunt prince princess +uncle aunt son daughter +uncle aunt sons daughters +uncle aunt stepbrother stepsister +uncle aunt stepfather stepmother +uncle aunt stepson stepdaughter +: gram1-adjective-to-adverb +amazing amazingly apparent apparently +amazing amazingly calm calmly +amazing amazingly cheerful cheerfully +amazing amazingly complete completely +amazing amazingly efficient efficiently +amazing amazingly fortunate fortunately +amazing amazingly free freely +amazing amazingly furious furiously +amazing amazingly happy happily +amazing amazingly immediate immediately +amazing amazingly infrequent infrequently +amazing amazingly lucky luckily +amazing amazingly most mostly +amazing amazingly obvious obviously +amazing amazingly occasional occasionally +amazing amazingly possible possibly +amazing amazingly precise precisely +amazing amazingly professional professionally +amazing amazingly quick quickly +amazing amazingly quiet quietly +amazing amazingly rapid rapidly +amazing amazingly rare rarely +amazing amazingly reluctant reluctantly +amazing amazingly safe safely +amazing amazingly serious seriously +amazing amazingly slow slowly +amazing amazingly sudden suddenly +amazing amazingly swift swiftly +amazing amazingly typical typically +amazing amazingly unfortunate unfortunately +amazing amazingly usual usually +apparent apparently calm calmly +apparent apparently cheerful cheerfully +apparent apparently complete completely +apparent apparently efficient efficiently +apparent apparently fortunate fortunately +apparent apparently free freely +apparent apparently furious furiously +apparent apparently happy happily +apparent apparently immediate immediately +apparent apparently infrequent infrequently +apparent apparently lucky luckily +apparent apparently most mostly +apparent apparently obvious obviously +apparent apparently occasional occasionally +apparent apparently possible possibly +apparent apparently precise precisely +apparent apparently professional professionally +apparent apparently quick quickly +apparent apparently quiet quietly +apparent apparently rapid rapidly +apparent apparently rare rarely +apparent apparently reluctant reluctantly +apparent apparently safe safely +apparent apparently serious seriously +apparent apparently slow slowly +apparent apparently sudden suddenly +apparent apparently swift swiftly +apparent apparently typical typically +apparent apparently unfortunate unfortunately +apparent apparently usual usually +apparent apparently amazing amazingly +calm calmly cheerful cheerfully +calm calmly complete completely +calm calmly efficient efficiently +calm calmly fortunate fortunately +calm calmly free freely +calm calmly furious furiously +calm calmly happy happily +calm calmly immediate immediately +calm calmly infrequent infrequently +calm calmly lucky luckily +calm calmly most mostly +calm calmly obvious obviously +calm calmly occasional occasionally +calm calmly possible possibly +calm calmly precise precisely +calm calmly professional professionally +calm calmly quick quickly +calm calmly quiet quietly +calm calmly rapid rapidly +calm calmly rare rarely +calm calmly reluctant reluctantly +calm calmly safe safely +calm calmly serious seriously +calm calmly slow slowly +calm calmly sudden suddenly +calm calmly swift swiftly +calm calmly typical typically +calm calmly unfortunate unfortunately +calm calmly usual usually +calm calmly amazing amazingly +calm calmly apparent apparently +cheerful cheerfully complete completely +cheerful cheerfully efficient efficiently +cheerful cheerfully fortunate fortunately +cheerful cheerfully free freely +cheerful cheerfully furious furiously +cheerful cheerfully happy happily +cheerful cheerfully immediate immediately +cheerful cheerfully infrequent infrequently +cheerful cheerfully lucky luckily +cheerful cheerfully most mostly +cheerful cheerfully obvious obviously +cheerful cheerfully occasional occasionally +cheerful cheerfully possible possibly +cheerful cheerfully precise precisely +cheerful cheerfully professional professionally +cheerful cheerfully quick quickly +cheerful cheerfully quiet quietly +cheerful cheerfully rapid rapidly +cheerful cheerfully rare rarely +cheerful cheerfully reluctant reluctantly +cheerful cheerfully safe safely +cheerful cheerfully serious seriously +cheerful cheerfully slow slowly +cheerful cheerfully sudden suddenly +cheerful cheerfully swift swiftly +cheerful cheerfully typical typically +cheerful cheerfully unfortunate unfortunately +cheerful cheerfully usual usually +cheerful cheerfully amazing amazingly +cheerful cheerfully apparent apparently +cheerful cheerfully calm calmly +complete completely efficient efficiently +complete completely fortunate fortunately +complete completely free freely +complete completely furious furiously +complete completely happy happily +complete completely immediate immediately +complete completely infrequent infrequently +complete completely lucky luckily +complete completely most mostly +complete completely obvious obviously +complete completely occasional occasionally +complete completely possible possibly +complete completely precise precisely +complete completely professional professionally +complete completely quick quickly +complete completely quiet quietly +complete completely rapid rapidly +complete completely rare rarely +complete completely reluctant reluctantly +complete completely safe safely +complete completely serious seriously +complete completely slow slowly +complete completely sudden suddenly +complete completely swift swiftly +complete completely typical typically +complete completely unfortunate unfortunately +complete completely usual usually +complete completely amazing amazingly +complete completely apparent apparently +complete completely calm calmly +complete completely cheerful cheerfully +efficient efficiently fortunate fortunately +efficient efficiently free freely +efficient efficiently furious furiously +efficient efficiently happy happily +efficient efficiently immediate immediately +efficient efficiently infrequent infrequently +efficient efficiently lucky luckily +efficient efficiently most mostly +efficient efficiently obvious obviously +efficient efficiently occasional occasionally +efficient efficiently possible possibly +efficient efficiently precise precisely +efficient efficiently professional professionally +efficient efficiently quick quickly +efficient efficiently quiet quietly +efficient efficiently rapid rapidly +efficient efficiently rare rarely +efficient efficiently reluctant reluctantly +efficient efficiently safe safely +efficient efficiently serious seriously +efficient efficiently slow slowly +efficient efficiently sudden suddenly +efficient efficiently swift swiftly +efficient efficiently typical typically +efficient efficiently unfortunate unfortunately +efficient efficiently usual usually +efficient efficiently amazing amazingly +efficient efficiently apparent apparently +efficient efficiently calm calmly +efficient efficiently cheerful cheerfully +efficient efficiently complete completely +fortunate fortunately free freely +fortunate fortunately furious furiously +fortunate fortunately happy happily +fortunate fortunately immediate immediately +fortunate fortunately infrequent infrequently +fortunate fortunately lucky luckily +fortunate fortunately most mostly +fortunate fortunately obvious obviously +fortunate fortunately occasional occasionally +fortunate fortunately possible possibly +fortunate fortunately precise precisely +fortunate fortunately professional professionally +fortunate fortunately quick quickly +fortunate fortunately quiet quietly +fortunate fortunately rapid rapidly +fortunate fortunately rare rarely +fortunate fortunately reluctant reluctantly +fortunate fortunately safe safely +fortunate fortunately serious seriously +fortunate fortunately slow slowly +fortunate fortunately sudden suddenly +fortunate fortunately swift swiftly +fortunate fortunately typical typically +fortunate fortunately unfortunate unfortunately +fortunate fortunately usual usually +fortunate fortunately amazing amazingly +fortunate fortunately apparent apparently +fortunate fortunately calm calmly +fortunate fortunately cheerful cheerfully +fortunate fortunately complete completely +fortunate fortunately efficient efficiently +free freely furious furiously +free freely happy happily +free freely immediate immediately +free freely infrequent infrequently +free freely lucky luckily +free freely most mostly +free freely obvious obviously +free freely occasional occasionally +free freely possible possibly +free freely precise precisely +free freely professional professionally +free freely quick quickly +free freely quiet quietly +free freely rapid rapidly +free freely rare rarely +free freely reluctant reluctantly +free freely safe safely +free freely serious seriously +free freely slow slowly +free freely sudden suddenly +free freely swift swiftly +free freely typical typically +free freely unfortunate unfortunately +free freely usual usually +free freely amazing amazingly +free freely apparent apparently +free freely calm calmly +free freely cheerful cheerfully +free freely complete completely +free freely efficient efficiently +free freely fortunate fortunately +furious furiously happy happily +furious furiously immediate immediately +furious furiously infrequent infrequently +furious furiously lucky luckily +furious furiously most mostly +furious furiously obvious obviously +furious furiously occasional occasionally +furious furiously possible possibly +furious furiously precise precisely +furious furiously professional professionally +furious furiously quick quickly +furious furiously quiet quietly +furious furiously rapid rapidly +furious furiously rare rarely +furious furiously reluctant reluctantly +furious furiously safe safely +furious furiously serious seriously +furious furiously slow slowly +furious furiously sudden suddenly +furious furiously swift swiftly +furious furiously typical typically +furious furiously unfortunate unfortunately +furious furiously usual usually +furious furiously amazing amazingly +furious furiously apparent apparently +furious furiously calm calmly +furious furiously cheerful cheerfully +furious furiously complete completely +furious furiously efficient efficiently +furious furiously fortunate fortunately +furious furiously free freely +happy happily immediate immediately +happy happily infrequent infrequently +happy happily lucky luckily +happy happily most mostly +happy happily obvious obviously +happy happily occasional occasionally +happy happily possible possibly +happy happily precise precisely +happy happily professional professionally +happy happily quick quickly +happy happily quiet quietly +happy happily rapid rapidly +happy happily rare rarely +happy happily reluctant reluctantly +happy happily safe safely +happy happily serious seriously +happy happily slow slowly +happy happily sudden suddenly +happy happily swift swiftly +happy happily typical typically +happy happily unfortunate unfortunately +happy happily usual usually +happy happily amazing amazingly +happy happily apparent apparently +happy happily calm calmly +happy happily cheerful cheerfully +happy happily complete completely +happy happily efficient efficiently +happy happily fortunate fortunately +happy happily free freely +happy happily furious furiously +immediate immediately infrequent infrequently +immediate immediately lucky luckily +immediate immediately most mostly +immediate immediately obvious obviously +immediate immediately occasional occasionally +immediate immediately possible possibly +immediate immediately precise precisely +immediate immediately professional professionally +immediate immediately quick quickly +immediate immediately quiet quietly +immediate immediately rapid rapidly +immediate immediately rare rarely +immediate immediately reluctant reluctantly +immediate immediately safe safely +immediate immediately serious seriously +immediate immediately slow slowly +immediate immediately sudden suddenly +immediate immediately swift swiftly +immediate immediately typical typically +immediate immediately unfortunate unfortunately +immediate immediately usual usually +immediate immediately amazing amazingly +immediate immediately apparent apparently +immediate immediately calm calmly +immediate immediately cheerful cheerfully +immediate immediately complete completely +immediate immediately efficient efficiently +immediate immediately fortunate fortunately +immediate immediately free freely +immediate immediately furious furiously +immediate immediately happy happily +infrequent infrequently lucky luckily +infrequent infrequently most mostly +infrequent infrequently obvious obviously +infrequent infrequently occasional occasionally +infrequent infrequently possible possibly +infrequent infrequently precise precisely +infrequent infrequently professional professionally +infrequent infrequently quick quickly +infrequent infrequently quiet quietly +infrequent infrequently rapid rapidly +infrequent infrequently rare rarely +infrequent infrequently reluctant reluctantly +infrequent infrequently safe safely +infrequent infrequently serious seriously +infrequent infrequently slow slowly +infrequent infrequently sudden suddenly +infrequent infrequently swift swiftly +infrequent infrequently typical typically +infrequent infrequently unfortunate unfortunately +infrequent infrequently usual usually +infrequent infrequently amazing amazingly +infrequent infrequently apparent apparently +infrequent infrequently calm calmly +infrequent infrequently cheerful cheerfully +infrequent infrequently complete completely +infrequent infrequently efficient efficiently +infrequent infrequently fortunate fortunately +infrequent infrequently free freely +infrequent infrequently furious furiously +infrequent infrequently happy happily +infrequent infrequently immediate immediately +lucky luckily most mostly +lucky luckily obvious obviously +lucky luckily occasional occasionally +lucky luckily possible possibly +lucky luckily precise precisely +lucky luckily professional professionally +lucky luckily quick quickly +lucky luckily quiet quietly +lucky luckily rapid rapidly +lucky luckily rare rarely +lucky luckily reluctant reluctantly +lucky luckily safe safely +lucky luckily serious seriously +lucky luckily slow slowly +lucky luckily sudden suddenly +lucky luckily swift swiftly +lucky luckily typical typically +lucky luckily unfortunate unfortunately +lucky luckily usual usually +lucky luckily amazing amazingly +lucky luckily apparent apparently +lucky luckily calm calmly +lucky luckily cheerful cheerfully +lucky luckily complete completely +lucky luckily efficient efficiently +lucky luckily fortunate fortunately +lucky luckily free freely +lucky luckily furious furiously +lucky luckily happy happily +lucky luckily immediate immediately +lucky luckily infrequent infrequently +most mostly obvious obviously +most mostly occasional occasionally +most mostly possible possibly +most mostly precise precisely +most mostly professional professionally +most mostly quick quickly +most mostly quiet quietly +most mostly rapid rapidly +most mostly rare rarely +most mostly reluctant reluctantly +most mostly safe safely +most mostly serious seriously +most mostly slow slowly +most mostly sudden suddenly +most mostly swift swiftly +most mostly typical typically +most mostly unfortunate unfortunately +most mostly usual usually +most mostly amazing amazingly +most mostly apparent apparently +most mostly calm calmly +most mostly cheerful cheerfully +most mostly complete completely +most mostly efficient efficiently +most mostly fortunate fortunately +most mostly free freely +most mostly furious furiously +most mostly happy happily +most mostly immediate immediately +most mostly infrequent infrequently +most mostly lucky luckily +obvious obviously occasional occasionally +obvious obviously possible possibly +obvious obviously precise precisely +obvious obviously professional professionally +obvious obviously quick quickly +obvious obviously quiet quietly +obvious obviously rapid rapidly +obvious obviously rare rarely +obvious obviously reluctant reluctantly +obvious obviously safe safely +obvious obviously serious seriously +obvious obviously slow slowly +obvious obviously sudden suddenly +obvious obviously swift swiftly +obvious obviously typical typically +obvious obviously unfortunate unfortunately +obvious obviously usual usually +obvious obviously amazing amazingly +obvious obviously apparent apparently +obvious obviously calm calmly +obvious obviously cheerful cheerfully +obvious obviously complete completely +obvious obviously efficient efficiently +obvious obviously fortunate fortunately +obvious obviously free freely +obvious obviously furious furiously +obvious obviously happy happily +obvious obviously immediate immediately +obvious obviously infrequent infrequently +obvious obviously lucky luckily +obvious obviously most mostly +occasional occasionally possible possibly +occasional occasionally precise precisely +occasional occasionally professional professionally +occasional occasionally quick quickly +occasional occasionally quiet quietly +occasional occasionally rapid rapidly +occasional occasionally rare rarely +occasional occasionally reluctant reluctantly +occasional occasionally safe safely +occasional occasionally serious seriously +occasional occasionally slow slowly +occasional occasionally sudden suddenly +occasional occasionally swift swiftly +occasional occasionally typical typically +occasional occasionally unfortunate unfortunately +occasional occasionally usual usually +occasional occasionally amazing amazingly +occasional occasionally apparent apparently +occasional occasionally calm calmly +occasional occasionally cheerful cheerfully +occasional occasionally complete completely +occasional occasionally efficient efficiently +occasional occasionally fortunate fortunately +occasional occasionally free freely +occasional occasionally furious furiously +occasional occasionally happy happily +occasional occasionally immediate immediately +occasional occasionally infrequent infrequently +occasional occasionally lucky luckily +occasional occasionally most mostly +occasional occasionally obvious obviously +possible possibly precise precisely +possible possibly professional professionally +possible possibly quick quickly +possible possibly quiet quietly +possible possibly rapid rapidly +possible possibly rare rarely +possible possibly reluctant reluctantly +possible possibly safe safely +possible possibly serious seriously +possible possibly slow slowly +possible possibly sudden suddenly +possible possibly swift swiftly +possible possibly typical typically +possible possibly unfortunate unfortunately +possible possibly usual usually +possible possibly amazing amazingly +possible possibly apparent apparently +possible possibly calm calmly +possible possibly cheerful cheerfully +possible possibly complete completely +possible possibly efficient efficiently +possible possibly fortunate fortunately +possible possibly free freely +possible possibly furious furiously +possible possibly happy happily +possible possibly immediate immediately +possible possibly infrequent infrequently +possible possibly lucky luckily +possible possibly most mostly +possible possibly obvious obviously +possible possibly occasional occasionally +precise precisely professional professionally +precise precisely quick quickly +precise precisely quiet quietly +precise precisely rapid rapidly +precise precisely rare rarely +precise precisely reluctant reluctantly +precise precisely safe safely +precise precisely serious seriously +precise precisely slow slowly +precise precisely sudden suddenly +precise precisely swift swiftly +precise precisely typical typically +precise precisely unfortunate unfortunately +precise precisely usual usually +precise precisely amazing amazingly +precise precisely apparent apparently +precise precisely calm calmly +precise precisely cheerful cheerfully +precise precisely complete completely +precise precisely efficient efficiently +precise precisely fortunate fortunately +precise precisely free freely +precise precisely furious furiously +precise precisely happy happily +precise precisely immediate immediately +precise precisely infrequent infrequently +precise precisely lucky luckily +precise precisely most mostly +precise precisely obvious obviously +precise precisely occasional occasionally +precise precisely possible possibly +professional professionally quick quickly +professional professionally quiet quietly +professional professionally rapid rapidly +professional professionally rare rarely +professional professionally reluctant reluctantly +professional professionally safe safely +professional professionally serious seriously +professional professionally slow slowly +professional professionally sudden suddenly +professional professionally swift swiftly +professional professionally typical typically +professional professionally unfortunate unfortunately +professional professionally usual usually +professional professionally amazing amazingly +professional professionally apparent apparently +professional professionally calm calmly +professional professionally cheerful cheerfully +professional professionally complete completely +professional professionally efficient efficiently +professional professionally fortunate fortunately +professional professionally free freely +professional professionally furious furiously +professional professionally happy happily +professional professionally immediate immediately +professional professionally infrequent infrequently +professional professionally lucky luckily +professional professionally most mostly +professional professionally obvious obviously +professional professionally occasional occasionally +professional professionally possible possibly +professional professionally precise precisely +quick quickly quiet quietly +quick quickly rapid rapidly +quick quickly rare rarely +quick quickly reluctant reluctantly +quick quickly safe safely +quick quickly serious seriously +quick quickly slow slowly +quick quickly sudden suddenly +quick quickly swift swiftly +quick quickly typical typically +quick quickly unfortunate unfortunately +quick quickly usual usually +quick quickly amazing amazingly +quick quickly apparent apparently +quick quickly calm calmly +quick quickly cheerful cheerfully +quick quickly complete completely +quick quickly efficient efficiently +quick quickly fortunate fortunately +quick quickly free freely +quick quickly furious furiously +quick quickly happy happily +quick quickly immediate immediately +quick quickly infrequent infrequently +quick quickly lucky luckily +quick quickly most mostly +quick quickly obvious obviously +quick quickly occasional occasionally +quick quickly possible possibly +quick quickly precise precisely +quick quickly professional professionally +quiet quietly rapid rapidly +quiet quietly rare rarely +quiet quietly reluctant reluctantly +quiet quietly safe safely +quiet quietly serious seriously +quiet quietly slow slowly +quiet quietly sudden suddenly +quiet quietly swift swiftly +quiet quietly typical typically +quiet quietly unfortunate unfortunately +quiet quietly usual usually +quiet quietly amazing amazingly +quiet quietly apparent apparently +quiet quietly calm calmly +quiet quietly cheerful cheerfully +quiet quietly complete completely +quiet quietly efficient efficiently +quiet quietly fortunate fortunately +quiet quietly free freely +quiet quietly furious furiously +quiet quietly happy happily +quiet quietly immediate immediately +quiet quietly infrequent infrequently +quiet quietly lucky luckily +quiet quietly most mostly +quiet quietly obvious obviously +quiet quietly occasional occasionally +quiet quietly possible possibly +quiet quietly precise precisely +quiet quietly professional professionally +quiet quietly quick quickly +rapid rapidly rare rarely +rapid rapidly reluctant reluctantly +rapid rapidly safe safely +rapid rapidly serious seriously +rapid rapidly slow slowly +rapid rapidly sudden suddenly +rapid rapidly swift swiftly +rapid rapidly typical typically +rapid rapidly unfortunate unfortunately +rapid rapidly usual usually +rapid rapidly amazing amazingly +rapid rapidly apparent apparently +rapid rapidly calm calmly +rapid rapidly cheerful cheerfully +rapid rapidly complete completely +rapid rapidly efficient efficiently +rapid rapidly fortunate fortunately +rapid rapidly free freely +rapid rapidly furious furiously +rapid rapidly happy happily +rapid rapidly immediate immediately +rapid rapidly infrequent infrequently +rapid rapidly lucky luckily +rapid rapidly most mostly +rapid rapidly obvious obviously +rapid rapidly occasional occasionally +rapid rapidly possible possibly +rapid rapidly precise precisely +rapid rapidly professional professionally +rapid rapidly quick quickly +rapid rapidly quiet quietly +rare rarely reluctant reluctantly +rare rarely safe safely +rare rarely serious seriously +rare rarely slow slowly +rare rarely sudden suddenly +rare rarely swift swiftly +rare rarely typical typically +rare rarely unfortunate unfortunately +rare rarely usual usually +rare rarely amazing amazingly +rare rarely apparent apparently +rare rarely calm calmly +rare rarely cheerful cheerfully +rare rarely complete completely +rare rarely efficient efficiently +rare rarely fortunate fortunately +rare rarely free freely +rare rarely furious furiously +rare rarely happy happily +rare rarely immediate immediately +rare rarely infrequent infrequently +rare rarely lucky luckily +rare rarely most mostly +rare rarely obvious obviously +rare rarely occasional occasionally +rare rarely possible possibly +rare rarely precise precisely +rare rarely professional professionally +rare rarely quick quickly +rare rarely quiet quietly +rare rarely rapid rapidly +reluctant reluctantly safe safely +reluctant reluctantly serious seriously +reluctant reluctantly slow slowly +reluctant reluctantly sudden suddenly +reluctant reluctantly swift swiftly +reluctant reluctantly typical typically +reluctant reluctantly unfortunate unfortunately +reluctant reluctantly usual usually +reluctant reluctantly amazing amazingly +reluctant reluctantly apparent apparently +reluctant reluctantly calm calmly +reluctant reluctantly cheerful cheerfully +reluctant reluctantly complete completely +reluctant reluctantly efficient efficiently +reluctant reluctantly fortunate fortunately +reluctant reluctantly free freely +reluctant reluctantly furious furiously +reluctant reluctantly happy happily +reluctant reluctantly immediate immediately +reluctant reluctantly infrequent infrequently +reluctant reluctantly lucky luckily +reluctant reluctantly most mostly +reluctant reluctantly obvious obviously +reluctant reluctantly occasional occasionally +reluctant reluctantly possible possibly +reluctant reluctantly precise precisely +reluctant reluctantly professional professionally +reluctant reluctantly quick quickly +reluctant reluctantly quiet quietly +reluctant reluctantly rapid rapidly +reluctant reluctantly rare rarely +safe safely serious seriously +safe safely slow slowly +safe safely sudden suddenly +safe safely swift swiftly +safe safely typical typically +safe safely unfortunate unfortunately +safe safely usual usually +safe safely amazing amazingly +safe safely apparent apparently +safe safely calm calmly +safe safely cheerful cheerfully +safe safely complete completely +safe safely efficient efficiently +safe safely fortunate fortunately +safe safely free freely +safe safely furious furiously +safe safely happy happily +safe safely immediate immediately +safe safely infrequent infrequently +safe safely lucky luckily +safe safely most mostly +safe safely obvious obviously +safe safely occasional occasionally +safe safely possible possibly +safe safely precise precisely +safe safely professional professionally +safe safely quick quickly +safe safely quiet quietly +safe safely rapid rapidly +safe safely rare rarely +safe safely reluctant reluctantly +serious seriously slow slowly +serious seriously sudden suddenly +serious seriously swift swiftly +serious seriously typical typically +serious seriously unfortunate unfortunately +serious seriously usual usually +serious seriously amazing amazingly +serious seriously apparent apparently +serious seriously calm calmly +serious seriously cheerful cheerfully +serious seriously complete completely +serious seriously efficient efficiently +serious seriously fortunate fortunately +serious seriously free freely +serious seriously furious furiously +serious seriously happy happily +serious seriously immediate immediately +serious seriously infrequent infrequently +serious seriously lucky luckily +serious seriously most mostly +serious seriously obvious obviously +serious seriously occasional occasionally +serious seriously possible possibly +serious seriously precise precisely +serious seriously professional professionally +serious seriously quick quickly +serious seriously quiet quietly +serious seriously rapid rapidly +serious seriously rare rarely +serious seriously reluctant reluctantly +serious seriously safe safely +slow slowly sudden suddenly +slow slowly swift swiftly +slow slowly typical typically +slow slowly unfortunate unfortunately +slow slowly usual usually +slow slowly amazing amazingly +slow slowly apparent apparently +slow slowly calm calmly +slow slowly cheerful cheerfully +slow slowly complete completely +slow slowly efficient efficiently +slow slowly fortunate fortunately +slow slowly free freely +slow slowly furious furiously +slow slowly happy happily +slow slowly immediate immediately +slow slowly infrequent infrequently +slow slowly lucky luckily +slow slowly most mostly +slow slowly obvious obviously +slow slowly occasional occasionally +slow slowly possible possibly +slow slowly precise precisely +slow slowly professional professionally +slow slowly quick quickly +slow slowly quiet quietly +slow slowly rapid rapidly +slow slowly rare rarely +slow slowly reluctant reluctantly +slow slowly safe safely +slow slowly serious seriously +sudden suddenly swift swiftly +sudden suddenly typical typically +sudden suddenly unfortunate unfortunately +sudden suddenly usual usually +sudden suddenly amazing amazingly +sudden suddenly apparent apparently +sudden suddenly calm calmly +sudden suddenly cheerful cheerfully +sudden suddenly complete completely +sudden suddenly efficient efficiently +sudden suddenly fortunate fortunately +sudden suddenly free freely +sudden suddenly furious furiously +sudden suddenly happy happily +sudden suddenly immediate immediately +sudden suddenly infrequent infrequently +sudden suddenly lucky luckily +sudden suddenly most mostly +sudden suddenly obvious obviously +sudden suddenly occasional occasionally +sudden suddenly possible possibly +sudden suddenly precise precisely +sudden suddenly professional professionally +sudden suddenly quick quickly +sudden suddenly quiet quietly +sudden suddenly rapid rapidly +sudden suddenly rare rarely +sudden suddenly reluctant reluctantly +sudden suddenly safe safely +sudden suddenly serious seriously +sudden suddenly slow slowly +swift swiftly typical typically +swift swiftly unfortunate unfortunately +swift swiftly usual usually +swift swiftly amazing amazingly +swift swiftly apparent apparently +swift swiftly calm calmly +swift swiftly cheerful cheerfully +swift swiftly complete completely +swift swiftly efficient efficiently +swift swiftly fortunate fortunately +swift swiftly free freely +swift swiftly furious furiously +swift swiftly happy happily +swift swiftly immediate immediately +swift swiftly infrequent infrequently +swift swiftly lucky luckily +swift swiftly most mostly +swift swiftly obvious obviously +swift swiftly occasional occasionally +swift swiftly possible possibly +swift swiftly precise precisely +swift swiftly professional professionally +swift swiftly quick quickly +swift swiftly quiet quietly +swift swiftly rapid rapidly +swift swiftly rare rarely +swift swiftly reluctant reluctantly +swift swiftly safe safely +swift swiftly serious seriously +swift swiftly slow slowly +swift swiftly sudden suddenly +typical typically unfortunate unfortunately +typical typically usual usually +typical typically amazing amazingly +typical typically apparent apparently +typical typically calm calmly +typical typically cheerful cheerfully +typical typically complete completely +typical typically efficient efficiently +typical typically fortunate fortunately +typical typically free freely +typical typically furious furiously +typical typically happy happily +typical typically immediate immediately +typical typically infrequent infrequently +typical typically lucky luckily +typical typically most mostly +typical typically obvious obviously +typical typically occasional occasionally +typical typically possible possibly +typical typically precise precisely +typical typically professional professionally +typical typically quick quickly +typical typically quiet quietly +typical typically rapid rapidly +typical typically rare rarely +typical typically reluctant reluctantly +typical typically safe safely +typical typically serious seriously +typical typically slow slowly +typical typically sudden suddenly +typical typically swift swiftly +unfortunate unfortunately usual usually +unfortunate unfortunately amazing amazingly +unfortunate unfortunately apparent apparently +unfortunate unfortunately calm calmly +unfortunate unfortunately cheerful cheerfully +unfortunate unfortunately complete completely +unfortunate unfortunately efficient efficiently +unfortunate unfortunately fortunate fortunately +unfortunate unfortunately free freely +unfortunate unfortunately furious furiously +unfortunate unfortunately happy happily +unfortunate unfortunately immediate immediately +unfortunate unfortunately infrequent infrequently +unfortunate unfortunately lucky luckily +unfortunate unfortunately most mostly +unfortunate unfortunately obvious obviously +unfortunate unfortunately occasional occasionally +unfortunate unfortunately possible possibly +unfortunate unfortunately precise precisely +unfortunate unfortunately professional professionally +unfortunate unfortunately quick quickly +unfortunate unfortunately quiet quietly +unfortunate unfortunately rapid rapidly +unfortunate unfortunately rare rarely +unfortunate unfortunately reluctant reluctantly +unfortunate unfortunately safe safely +unfortunate unfortunately serious seriously +unfortunate unfortunately slow slowly +unfortunate unfortunately sudden suddenly +unfortunate unfortunately swift swiftly +unfortunate unfortunately typical typically +usual usually amazing amazingly +usual usually apparent apparently +usual usually calm calmly +usual usually cheerful cheerfully +usual usually complete completely +usual usually efficient efficiently +usual usually fortunate fortunately +usual usually free freely +usual usually furious furiously +usual usually happy happily +usual usually immediate immediately +usual usually infrequent infrequently +usual usually lucky luckily +usual usually most mostly +usual usually obvious obviously +usual usually occasional occasionally +usual usually possible possibly +usual usually precise precisely +usual usually professional professionally +usual usually quick quickly +usual usually quiet quietly +usual usually rapid rapidly +usual usually rare rarely +usual usually reluctant reluctantly +usual usually safe safely +usual usually serious seriously +usual usually slow slowly +usual usually sudden suddenly +usual usually swift swiftly +usual usually typical typically +usual usually unfortunate unfortunately +: gram2-opposite +acceptable unacceptable aware unaware +acceptable unacceptable certain uncertain +acceptable unacceptable clear unclear +acceptable unacceptable comfortable uncomfortable +acceptable unacceptable competitive uncompetitive +acceptable unacceptable consistent inconsistent +acceptable unacceptable convincing unconvincing +acceptable unacceptable convenient inconvenient +acceptable unacceptable decided undecided +acceptable unacceptable efficient inefficient +acceptable unacceptable ethical unethical +acceptable unacceptable fortunate unfortunate +acceptable unacceptable honest dishonest +acceptable unacceptable impressive unimpressive +acceptable unacceptable informative uninformative +acceptable unacceptable informed uninformed +acceptable unacceptable known unknown +acceptable unacceptable likely unlikely +acceptable unacceptable logical illogical +acceptable unacceptable pleasant unpleasant +acceptable unacceptable possible impossible +acceptable unacceptable possibly impossibly +acceptable unacceptable productive unproductive +acceptable unacceptable rational irrational +acceptable unacceptable reasonable unreasonable +acceptable unacceptable responsible irresponsible +acceptable unacceptable sure unsure +acceptable unacceptable tasteful distasteful +aware unaware certain uncertain +aware unaware clear unclear +aware unaware comfortable uncomfortable +aware unaware competitive uncompetitive +aware unaware consistent inconsistent +aware unaware convincing unconvincing +aware unaware convenient inconvenient +aware unaware decided undecided +aware unaware efficient inefficient +aware unaware ethical unethical +aware unaware fortunate unfortunate +aware unaware honest dishonest +aware unaware impressive unimpressive +aware unaware informative uninformative +aware unaware informed uninformed +aware unaware known unknown +aware unaware likely unlikely +aware unaware logical illogical +aware unaware pleasant unpleasant +aware unaware possible impossible +aware unaware possibly impossibly +aware unaware productive unproductive +aware unaware rational irrational +aware unaware reasonable unreasonable +aware unaware responsible irresponsible +aware unaware sure unsure +aware unaware tasteful distasteful +aware unaware acceptable unacceptable +certain uncertain clear unclear +certain uncertain comfortable uncomfortable +certain uncertain competitive uncompetitive +certain uncertain consistent inconsistent +certain uncertain convincing unconvincing +certain uncertain convenient inconvenient +certain uncertain decided undecided +certain uncertain efficient inefficient +certain uncertain ethical unethical +certain uncertain fortunate unfortunate +certain uncertain honest dishonest +certain uncertain impressive unimpressive +certain uncertain informative uninformative +certain uncertain informed uninformed +certain uncertain known unknown +certain uncertain likely unlikely +certain uncertain logical illogical +certain uncertain pleasant unpleasant +certain uncertain possible impossible +certain uncertain possibly impossibly +certain uncertain productive unproductive +certain uncertain rational irrational +certain uncertain reasonable unreasonable +certain uncertain responsible irresponsible +certain uncertain sure unsure +certain uncertain tasteful distasteful +certain uncertain acceptable unacceptable +certain uncertain aware unaware +clear unclear comfortable uncomfortable +clear unclear competitive uncompetitive +clear unclear consistent inconsistent +clear unclear convincing unconvincing +clear unclear convenient inconvenient +clear unclear decided undecided +clear unclear efficient inefficient +clear unclear ethical unethical +clear unclear fortunate unfortunate +clear unclear honest dishonest +clear unclear impressive unimpressive +clear unclear informative uninformative +clear unclear informed uninformed +clear unclear known unknown +clear unclear likely unlikely +clear unclear logical illogical +clear unclear pleasant unpleasant +clear unclear possible impossible +clear unclear possibly impossibly +clear unclear productive unproductive +clear unclear rational irrational +clear unclear reasonable unreasonable +clear unclear responsible irresponsible +clear unclear sure unsure +clear unclear tasteful distasteful +clear unclear acceptable unacceptable +clear unclear aware unaware +clear unclear certain uncertain +comfortable uncomfortable competitive uncompetitive +comfortable uncomfortable consistent inconsistent +comfortable uncomfortable convincing unconvincing +comfortable uncomfortable convenient inconvenient +comfortable uncomfortable decided undecided +comfortable uncomfortable efficient inefficient +comfortable uncomfortable ethical unethical +comfortable uncomfortable fortunate unfortunate +comfortable uncomfortable honest dishonest +comfortable uncomfortable impressive unimpressive +comfortable uncomfortable informative uninformative +comfortable uncomfortable informed uninformed +comfortable uncomfortable known unknown +comfortable uncomfortable likely unlikely +comfortable uncomfortable logical illogical +comfortable uncomfortable pleasant unpleasant +comfortable uncomfortable possible impossible +comfortable uncomfortable possibly impossibly +comfortable uncomfortable productive unproductive +comfortable uncomfortable rational irrational +comfortable uncomfortable reasonable unreasonable +comfortable uncomfortable responsible irresponsible +comfortable uncomfortable sure unsure +comfortable uncomfortable tasteful distasteful +comfortable uncomfortable acceptable unacceptable +comfortable uncomfortable aware unaware +comfortable uncomfortable certain uncertain +comfortable uncomfortable clear unclear +competitive uncompetitive consistent inconsistent +competitive uncompetitive convincing unconvincing +competitive uncompetitive convenient inconvenient +competitive uncompetitive decided undecided +competitive uncompetitive efficient inefficient +competitive uncompetitive ethical unethical +competitive uncompetitive fortunate unfortunate +competitive uncompetitive honest dishonest +competitive uncompetitive impressive unimpressive +competitive uncompetitive informative uninformative +competitive uncompetitive informed uninformed +competitive uncompetitive known unknown +competitive uncompetitive likely unlikely +competitive uncompetitive logical illogical +competitive uncompetitive pleasant unpleasant +competitive uncompetitive possible impossible +competitive uncompetitive possibly impossibly +competitive uncompetitive productive unproductive +competitive uncompetitive rational irrational +competitive uncompetitive reasonable unreasonable +competitive uncompetitive responsible irresponsible +competitive uncompetitive sure unsure +competitive uncompetitive tasteful distasteful +competitive uncompetitive acceptable unacceptable +competitive uncompetitive aware unaware +competitive uncompetitive certain uncertain +competitive uncompetitive clear unclear +competitive uncompetitive comfortable uncomfortable +consistent inconsistent convincing unconvincing +consistent inconsistent convenient inconvenient +consistent inconsistent decided undecided +consistent inconsistent efficient inefficient +consistent inconsistent ethical unethical +consistent inconsistent fortunate unfortunate +consistent inconsistent honest dishonest +consistent inconsistent impressive unimpressive +consistent inconsistent informative uninformative +consistent inconsistent informed uninformed +consistent inconsistent known unknown +consistent inconsistent likely unlikely +consistent inconsistent logical illogical +consistent inconsistent pleasant unpleasant +consistent inconsistent possible impossible +consistent inconsistent possibly impossibly +consistent inconsistent productive unproductive +consistent inconsistent rational irrational +consistent inconsistent reasonable unreasonable +consistent inconsistent responsible irresponsible +consistent inconsistent sure unsure +consistent inconsistent tasteful distasteful +consistent inconsistent acceptable unacceptable +consistent inconsistent aware unaware +consistent inconsistent certain uncertain +consistent inconsistent clear unclear +consistent inconsistent comfortable uncomfortable +consistent inconsistent competitive uncompetitive +convincing unconvincing convenient inconvenient +convincing unconvincing decided undecided +convincing unconvincing efficient inefficient +convincing unconvincing ethical unethical +convincing unconvincing fortunate unfortunate +convincing unconvincing honest dishonest +convincing unconvincing impressive unimpressive +convincing unconvincing informative uninformative +convincing unconvincing informed uninformed +convincing unconvincing known unknown +convincing unconvincing likely unlikely +convincing unconvincing logical illogical +convincing unconvincing pleasant unpleasant +convincing unconvincing possible impossible +convincing unconvincing possibly impossibly +convincing unconvincing productive unproductive +convincing unconvincing rational irrational +convincing unconvincing reasonable unreasonable +convincing unconvincing responsible irresponsible +convincing unconvincing sure unsure +convincing unconvincing tasteful distasteful +convincing unconvincing acceptable unacceptable +convincing unconvincing aware unaware +convincing unconvincing certain uncertain +convincing unconvincing clear unclear +convincing unconvincing comfortable uncomfortable +convincing unconvincing competitive uncompetitive +convincing unconvincing consistent inconsistent +convenient inconvenient decided undecided +convenient inconvenient efficient inefficient +convenient inconvenient ethical unethical +convenient inconvenient fortunate unfortunate +convenient inconvenient honest dishonest +convenient inconvenient impressive unimpressive +convenient inconvenient informative uninformative +convenient inconvenient informed uninformed +convenient inconvenient known unknown +convenient inconvenient likely unlikely +convenient inconvenient logical illogical +convenient inconvenient pleasant unpleasant +convenient inconvenient possible impossible +convenient inconvenient possibly impossibly +convenient inconvenient productive unproductive +convenient inconvenient rational irrational +convenient inconvenient reasonable unreasonable +convenient inconvenient responsible irresponsible +convenient inconvenient sure unsure +convenient inconvenient tasteful distasteful +convenient inconvenient acceptable unacceptable +convenient inconvenient aware unaware +convenient inconvenient certain uncertain +convenient inconvenient clear unclear +convenient inconvenient comfortable uncomfortable +convenient inconvenient competitive uncompetitive +convenient inconvenient consistent inconsistent +convenient inconvenient convincing unconvincing +decided undecided efficient inefficient +decided undecided ethical unethical +decided undecided fortunate unfortunate +decided undecided honest dishonest +decided undecided impressive unimpressive +decided undecided informative uninformative +decided undecided informed uninformed +decided undecided known unknown +decided undecided likely unlikely +decided undecided logical illogical +decided undecided pleasant unpleasant +decided undecided possible impossible +decided undecided possibly impossibly +decided undecided productive unproductive +decided undecided rational irrational +decided undecided reasonable unreasonable +decided undecided responsible irresponsible +decided undecided sure unsure +decided undecided tasteful distasteful +decided undecided acceptable unacceptable +decided undecided aware unaware +decided undecided certain uncertain +decided undecided clear unclear +decided undecided comfortable uncomfortable +decided undecided competitive uncompetitive +decided undecided consistent inconsistent +decided undecided convincing unconvincing +decided undecided convenient inconvenient +efficient inefficient ethical unethical +efficient inefficient fortunate unfortunate +efficient inefficient honest dishonest +efficient inefficient impressive unimpressive +efficient inefficient informative uninformative +efficient inefficient informed uninformed +efficient inefficient known unknown +efficient inefficient likely unlikely +efficient inefficient logical illogical +efficient inefficient pleasant unpleasant +efficient inefficient possible impossible +efficient inefficient possibly impossibly +efficient inefficient productive unproductive +efficient inefficient rational irrational +efficient inefficient reasonable unreasonable +efficient inefficient responsible irresponsible +efficient inefficient sure unsure +efficient inefficient tasteful distasteful +efficient inefficient acceptable unacceptable +efficient inefficient aware unaware +efficient inefficient certain uncertain +efficient inefficient clear unclear +efficient inefficient comfortable uncomfortable +efficient inefficient competitive uncompetitive +efficient inefficient consistent inconsistent +efficient inefficient convincing unconvincing +efficient inefficient convenient inconvenient +efficient inefficient decided undecided +ethical unethical fortunate unfortunate +ethical unethical honest dishonest +ethical unethical impressive unimpressive +ethical unethical informative uninformative +ethical unethical informed uninformed +ethical unethical known unknown +ethical unethical likely unlikely +ethical unethical logical illogical +ethical unethical pleasant unpleasant +ethical unethical possible impossible +ethical unethical possibly impossibly +ethical unethical productive unproductive +ethical unethical rational irrational +ethical unethical reasonable unreasonable +ethical unethical responsible irresponsible +ethical unethical sure unsure +ethical unethical tasteful distasteful +ethical unethical acceptable unacceptable +ethical unethical aware unaware +ethical unethical certain uncertain +ethical unethical clear unclear +ethical unethical comfortable uncomfortable +ethical unethical competitive uncompetitive +ethical unethical consistent inconsistent +ethical unethical convincing unconvincing +ethical unethical convenient inconvenient +ethical unethical decided undecided +ethical unethical efficient inefficient +fortunate unfortunate honest dishonest +fortunate unfortunate impressive unimpressive +fortunate unfortunate informative uninformative +fortunate unfortunate informed uninformed +fortunate unfortunate known unknown +fortunate unfortunate likely unlikely +fortunate unfortunate logical illogical +fortunate unfortunate pleasant unpleasant +fortunate unfortunate possible impossible +fortunate unfortunate possibly impossibly +fortunate unfortunate productive unproductive +fortunate unfortunate rational irrational +fortunate unfortunate reasonable unreasonable +fortunate unfortunate responsible irresponsible +fortunate unfortunate sure unsure +fortunate unfortunate tasteful distasteful +fortunate unfortunate acceptable unacceptable +fortunate unfortunate aware unaware +fortunate unfortunate certain uncertain +fortunate unfortunate clear unclear +fortunate unfortunate comfortable uncomfortable +fortunate unfortunate competitive uncompetitive +fortunate unfortunate consistent inconsistent +fortunate unfortunate convincing unconvincing +fortunate unfortunate convenient inconvenient +fortunate unfortunate decided undecided +fortunate unfortunate efficient inefficient +fortunate unfortunate ethical unethical +honest dishonest impressive unimpressive +honest dishonest informative uninformative +honest dishonest informed uninformed +honest dishonest known unknown +honest dishonest likely unlikely +honest dishonest logical illogical +honest dishonest pleasant unpleasant +honest dishonest possible impossible +honest dishonest possibly impossibly +honest dishonest productive unproductive +honest dishonest rational irrational +honest dishonest reasonable unreasonable +honest dishonest responsible irresponsible +honest dishonest sure unsure +honest dishonest tasteful distasteful +honest dishonest acceptable unacceptable +honest dishonest aware unaware +honest dishonest certain uncertain +honest dishonest clear unclear +honest dishonest comfortable uncomfortable +honest dishonest competitive uncompetitive +honest dishonest consistent inconsistent +honest dishonest convincing unconvincing +honest dishonest convenient inconvenient +honest dishonest decided undecided +honest dishonest efficient inefficient +honest dishonest ethical unethical +honest dishonest fortunate unfortunate +impressive unimpressive informative uninformative +impressive unimpressive informed uninformed +impressive unimpressive known unknown +impressive unimpressive likely unlikely +impressive unimpressive logical illogical +impressive unimpressive pleasant unpleasant +impressive unimpressive possible impossible +impressive unimpressive possibly impossibly +impressive unimpressive productive unproductive +impressive unimpressive rational irrational +impressive unimpressive reasonable unreasonable +impressive unimpressive responsible irresponsible +impressive unimpressive sure unsure +impressive unimpressive tasteful distasteful +impressive unimpressive acceptable unacceptable +impressive unimpressive aware unaware +impressive unimpressive certain uncertain +impressive unimpressive clear unclear +impressive unimpressive comfortable uncomfortable +impressive unimpressive competitive uncompetitive +impressive unimpressive consistent inconsistent +impressive unimpressive convincing unconvincing +impressive unimpressive convenient inconvenient +impressive unimpressive decided undecided +impressive unimpressive efficient inefficient +impressive unimpressive ethical unethical +impressive unimpressive fortunate unfortunate +impressive unimpressive honest dishonest +informative uninformative informed uninformed +informative uninformative known unknown +informative uninformative likely unlikely +informative uninformative logical illogical +informative uninformative pleasant unpleasant +informative uninformative possible impossible +informative uninformative possibly impossibly +informative uninformative productive unproductive +informative uninformative rational irrational +informative uninformative reasonable unreasonable +informative uninformative responsible irresponsible +informative uninformative sure unsure +informative uninformative tasteful distasteful +informative uninformative acceptable unacceptable +informative uninformative aware unaware +informative uninformative certain uncertain +informative uninformative clear unclear +informative uninformative comfortable uncomfortable +informative uninformative competitive uncompetitive +informative uninformative consistent inconsistent +informative uninformative convincing unconvincing +informative uninformative convenient inconvenient +informative uninformative decided undecided +informative uninformative efficient inefficient +informative uninformative ethical unethical +informative uninformative fortunate unfortunate +informative uninformative honest dishonest +informative uninformative impressive unimpressive +informed uninformed known unknown +informed uninformed likely unlikely +informed uninformed logical illogical +informed uninformed pleasant unpleasant +informed uninformed possible impossible +informed uninformed possibly impossibly +informed uninformed productive unproductive +informed uninformed rational irrational +informed uninformed reasonable unreasonable +informed uninformed responsible irresponsible +informed uninformed sure unsure +informed uninformed tasteful distasteful +informed uninformed acceptable unacceptable +informed uninformed aware unaware +informed uninformed certain uncertain +informed uninformed clear unclear +informed uninformed comfortable uncomfortable +informed uninformed competitive uncompetitive +informed uninformed consistent inconsistent +informed uninformed convincing unconvincing +informed uninformed convenient inconvenient +informed uninformed decided undecided +informed uninformed efficient inefficient +informed uninformed ethical unethical +informed uninformed fortunate unfortunate +informed uninformed honest dishonest +informed uninformed impressive unimpressive +informed uninformed informative uninformative +known unknown likely unlikely +known unknown logical illogical +known unknown pleasant unpleasant +known unknown possible impossible +known unknown possibly impossibly +known unknown productive unproductive +known unknown rational irrational +known unknown reasonable unreasonable +known unknown responsible irresponsible +known unknown sure unsure +known unknown tasteful distasteful +known unknown acceptable unacceptable +known unknown aware unaware +known unknown certain uncertain +known unknown clear unclear +known unknown comfortable uncomfortable +known unknown competitive uncompetitive +known unknown consistent inconsistent +known unknown convincing unconvincing +known unknown convenient inconvenient +known unknown decided undecided +known unknown efficient inefficient +known unknown ethical unethical +known unknown fortunate unfortunate +known unknown honest dishonest +known unknown impressive unimpressive +known unknown informative uninformative +known unknown informed uninformed +likely unlikely logical illogical +likely unlikely pleasant unpleasant +likely unlikely possible impossible +likely unlikely possibly impossibly +likely unlikely productive unproductive +likely unlikely rational irrational +likely unlikely reasonable unreasonable +likely unlikely responsible irresponsible +likely unlikely sure unsure +likely unlikely tasteful distasteful +likely unlikely acceptable unacceptable +likely unlikely aware unaware +likely unlikely certain uncertain +likely unlikely clear unclear +likely unlikely comfortable uncomfortable +likely unlikely competitive uncompetitive +likely unlikely consistent inconsistent +likely unlikely convincing unconvincing +likely unlikely convenient inconvenient +likely unlikely decided undecided +likely unlikely efficient inefficient +likely unlikely ethical unethical +likely unlikely fortunate unfortunate +likely unlikely honest dishonest +likely unlikely impressive unimpressive +likely unlikely informative uninformative +likely unlikely informed uninformed +likely unlikely known unknown +logical illogical pleasant unpleasant +logical illogical possible impossible +logical illogical possibly impossibly +logical illogical productive unproductive +logical illogical rational irrational +logical illogical reasonable unreasonable +logical illogical responsible irresponsible +logical illogical sure unsure +logical illogical tasteful distasteful +logical illogical acceptable unacceptable +logical illogical aware unaware +logical illogical certain uncertain +logical illogical clear unclear +logical illogical comfortable uncomfortable +logical illogical competitive uncompetitive +logical illogical consistent inconsistent +logical illogical convincing unconvincing +logical illogical convenient inconvenient +logical illogical decided undecided +logical illogical efficient inefficient +logical illogical ethical unethical +logical illogical fortunate unfortunate +logical illogical honest dishonest +logical illogical impressive unimpressive +logical illogical informative uninformative +logical illogical informed uninformed +logical illogical known unknown +logical illogical likely unlikely +pleasant unpleasant possible impossible +pleasant unpleasant possibly impossibly +pleasant unpleasant productive unproductive +pleasant unpleasant rational irrational +pleasant unpleasant reasonable unreasonable +pleasant unpleasant responsible irresponsible +pleasant unpleasant sure unsure +pleasant unpleasant tasteful distasteful +pleasant unpleasant acceptable unacceptable +pleasant unpleasant aware unaware +pleasant unpleasant certain uncertain +pleasant unpleasant clear unclear +pleasant unpleasant comfortable uncomfortable +pleasant unpleasant competitive uncompetitive +pleasant unpleasant consistent inconsistent +pleasant unpleasant convincing unconvincing +pleasant unpleasant convenient inconvenient +pleasant unpleasant decided undecided +pleasant unpleasant efficient inefficient +pleasant unpleasant ethical unethical +pleasant unpleasant fortunate unfortunate +pleasant unpleasant honest dishonest +pleasant unpleasant impressive unimpressive +pleasant unpleasant informative uninformative +pleasant unpleasant informed uninformed +pleasant unpleasant known unknown +pleasant unpleasant likely unlikely +pleasant unpleasant logical illogical +possible impossible possibly impossibly +possible impossible productive unproductive +possible impossible rational irrational +possible impossible reasonable unreasonable +possible impossible responsible irresponsible +possible impossible sure unsure +possible impossible tasteful distasteful +possible impossible acceptable unacceptable +possible impossible aware unaware +possible impossible certain uncertain +possible impossible clear unclear +possible impossible comfortable uncomfortable +possible impossible competitive uncompetitive +possible impossible consistent inconsistent +possible impossible convincing unconvincing +possible impossible convenient inconvenient +possible impossible decided undecided +possible impossible efficient inefficient +possible impossible ethical unethical +possible impossible fortunate unfortunate +possible impossible honest dishonest +possible impossible impressive unimpressive +possible impossible informative uninformative +possible impossible informed uninformed +possible impossible known unknown +possible impossible likely unlikely +possible impossible logical illogical +possible impossible pleasant unpleasant +possibly impossibly productive unproductive +possibly impossibly rational irrational +possibly impossibly reasonable unreasonable +possibly impossibly responsible irresponsible +possibly impossibly sure unsure +possibly impossibly tasteful distasteful +possibly impossibly acceptable unacceptable +possibly impossibly aware unaware +possibly impossibly certain uncertain +possibly impossibly clear unclear +possibly impossibly comfortable uncomfortable +possibly impossibly competitive uncompetitive +possibly impossibly consistent inconsistent +possibly impossibly convincing unconvincing +possibly impossibly convenient inconvenient +possibly impossibly decided undecided +possibly impossibly efficient inefficient +possibly impossibly ethical unethical +possibly impossibly fortunate unfortunate +possibly impossibly honest dishonest +possibly impossibly impressive unimpressive +possibly impossibly informative uninformative +possibly impossibly informed uninformed +possibly impossibly known unknown +possibly impossibly likely unlikely +possibly impossibly logical illogical +possibly impossibly pleasant unpleasant +possibly impossibly possible impossible +productive unproductive rational irrational +productive unproductive reasonable unreasonable +productive unproductive responsible irresponsible +productive unproductive sure unsure +productive unproductive tasteful distasteful +productive unproductive acceptable unacceptable +productive unproductive aware unaware +productive unproductive certain uncertain +productive unproductive clear unclear +productive unproductive comfortable uncomfortable +productive unproductive competitive uncompetitive +productive unproductive consistent inconsistent +productive unproductive convincing unconvincing +productive unproductive convenient inconvenient +productive unproductive decided undecided +productive unproductive efficient inefficient +productive unproductive ethical unethical +productive unproductive fortunate unfortunate +productive unproductive honest dishonest +productive unproductive impressive unimpressive +productive unproductive informative uninformative +productive unproductive informed uninformed +productive unproductive known unknown +productive unproductive likely unlikely +productive unproductive logical illogical +productive unproductive pleasant unpleasant +productive unproductive possible impossible +productive unproductive possibly impossibly +rational irrational reasonable unreasonable +rational irrational responsible irresponsible +rational irrational sure unsure +rational irrational tasteful distasteful +rational irrational acceptable unacceptable +rational irrational aware unaware +rational irrational certain uncertain +rational irrational clear unclear +rational irrational comfortable uncomfortable +rational irrational competitive uncompetitive +rational irrational consistent inconsistent +rational irrational convincing unconvincing +rational irrational convenient inconvenient +rational irrational decided undecided +rational irrational efficient inefficient +rational irrational ethical unethical +rational irrational fortunate unfortunate +rational irrational honest dishonest +rational irrational impressive unimpressive +rational irrational informative uninformative +rational irrational informed uninformed +rational irrational known unknown +rational irrational likely unlikely +rational irrational logical illogical +rational irrational pleasant unpleasant +rational irrational possible impossible +rational irrational possibly impossibly +rational irrational productive unproductive +reasonable unreasonable responsible irresponsible +reasonable unreasonable sure unsure +reasonable unreasonable tasteful distasteful +reasonable unreasonable acceptable unacceptable +reasonable unreasonable aware unaware +reasonable unreasonable certain uncertain +reasonable unreasonable clear unclear +reasonable unreasonable comfortable uncomfortable +reasonable unreasonable competitive uncompetitive +reasonable unreasonable consistent inconsistent +reasonable unreasonable convincing unconvincing +reasonable unreasonable convenient inconvenient +reasonable unreasonable decided undecided +reasonable unreasonable efficient inefficient +reasonable unreasonable ethical unethical +reasonable unreasonable fortunate unfortunate +reasonable unreasonable honest dishonest +reasonable unreasonable impressive unimpressive +reasonable unreasonable informative uninformative +reasonable unreasonable informed uninformed +reasonable unreasonable known unknown +reasonable unreasonable likely unlikely +reasonable unreasonable logical illogical +reasonable unreasonable pleasant unpleasant +reasonable unreasonable possible impossible +reasonable unreasonable possibly impossibly +reasonable unreasonable productive unproductive +reasonable unreasonable rational irrational +responsible irresponsible sure unsure +responsible irresponsible tasteful distasteful +responsible irresponsible acceptable unacceptable +responsible irresponsible aware unaware +responsible irresponsible certain uncertain +responsible irresponsible clear unclear +responsible irresponsible comfortable uncomfortable +responsible irresponsible competitive uncompetitive +responsible irresponsible consistent inconsistent +responsible irresponsible convincing unconvincing +responsible irresponsible convenient inconvenient +responsible irresponsible decided undecided +responsible irresponsible efficient inefficient +responsible irresponsible ethical unethical +responsible irresponsible fortunate unfortunate +responsible irresponsible honest dishonest +responsible irresponsible impressive unimpressive +responsible irresponsible informative uninformative +responsible irresponsible informed uninformed +responsible irresponsible known unknown +responsible irresponsible likely unlikely +responsible irresponsible logical illogical +responsible irresponsible pleasant unpleasant +responsible irresponsible possible impossible +responsible irresponsible possibly impossibly +responsible irresponsible productive unproductive +responsible irresponsible rational irrational +responsible irresponsible reasonable unreasonable +sure unsure tasteful distasteful +sure unsure acceptable unacceptable +sure unsure aware unaware +sure unsure certain uncertain +sure unsure clear unclear +sure unsure comfortable uncomfortable +sure unsure competitive uncompetitive +sure unsure consistent inconsistent +sure unsure convincing unconvincing +sure unsure convenient inconvenient +sure unsure decided undecided +sure unsure efficient inefficient +sure unsure ethical unethical +sure unsure fortunate unfortunate +sure unsure honest dishonest +sure unsure impressive unimpressive +sure unsure informative uninformative +sure unsure informed uninformed +sure unsure known unknown +sure unsure likely unlikely +sure unsure logical illogical +sure unsure pleasant unpleasant +sure unsure possible impossible +sure unsure possibly impossibly +sure unsure productive unproductive +sure unsure rational irrational +sure unsure reasonable unreasonable +sure unsure responsible irresponsible +tasteful distasteful acceptable unacceptable +tasteful distasteful aware unaware +tasteful distasteful certain uncertain +tasteful distasteful clear unclear +tasteful distasteful comfortable uncomfortable +tasteful distasteful competitive uncompetitive +tasteful distasteful consistent inconsistent +tasteful distasteful convincing unconvincing +tasteful distasteful convenient inconvenient +tasteful distasteful decided undecided +tasteful distasteful efficient inefficient +tasteful distasteful ethical unethical +tasteful distasteful fortunate unfortunate +tasteful distasteful honest dishonest +tasteful distasteful impressive unimpressive +tasteful distasteful informative uninformative +tasteful distasteful informed uninformed +tasteful distasteful known unknown +tasteful distasteful likely unlikely +tasteful distasteful logical illogical +tasteful distasteful pleasant unpleasant +tasteful distasteful possible impossible +tasteful distasteful possibly impossibly +tasteful distasteful productive unproductive +tasteful distasteful rational irrational +tasteful distasteful reasonable unreasonable +tasteful distasteful responsible irresponsible +tasteful distasteful sure unsure +: gram3-comparative +bad worse big bigger +bad worse bright brighter +bad worse cheap cheaper +bad worse cold colder +bad worse cool cooler +bad worse deep deeper +bad worse easy easier +bad worse fast faster +bad worse good better +bad worse great greater +bad worse hard harder +bad worse heavy heavier +bad worse high higher +bad worse hot hotter +bad worse large larger +bad worse long longer +bad worse loud louder +bad worse low lower +bad worse new newer +bad worse old older +bad worse quick quicker +bad worse safe safer +bad worse sharp sharper +bad worse short shorter +bad worse simple simpler +bad worse slow slower +bad worse small smaller +bad worse smart smarter +bad worse strong stronger +bad worse tall taller +bad worse tight tighter +bad worse tough tougher +bad worse warm warmer +bad worse weak weaker +bad worse wide wider +bad worse young younger +big bigger bright brighter +big bigger cheap cheaper +big bigger cold colder +big bigger cool cooler +big bigger deep deeper +big bigger easy easier +big bigger fast faster +big bigger good better +big bigger great greater +big bigger hard harder +big bigger heavy heavier +big bigger high higher +big bigger hot hotter +big bigger large larger +big bigger long longer +big bigger loud louder +big bigger low lower +big bigger new newer +big bigger old older +big bigger quick quicker +big bigger safe safer +big bigger sharp sharper +big bigger short shorter +big bigger simple simpler +big bigger slow slower +big bigger small smaller +big bigger smart smarter +big bigger strong stronger +big bigger tall taller +big bigger tight tighter +big bigger tough tougher +big bigger warm warmer +big bigger weak weaker +big bigger wide wider +big bigger young younger +big bigger bad worse +bright brighter cheap cheaper +bright brighter cold colder +bright brighter cool cooler +bright brighter deep deeper +bright brighter easy easier +bright brighter fast faster +bright brighter good better +bright brighter great greater +bright brighter hard harder +bright brighter heavy heavier +bright brighter high higher +bright brighter hot hotter +bright brighter large larger +bright brighter long longer +bright brighter loud louder +bright brighter low lower +bright brighter new newer +bright brighter old older +bright brighter quick quicker +bright brighter safe safer +bright brighter sharp sharper +bright brighter short shorter +bright brighter simple simpler +bright brighter slow slower +bright brighter small smaller +bright brighter smart smarter +bright brighter strong stronger +bright brighter tall taller +bright brighter tight tighter +bright brighter tough tougher +bright brighter warm warmer +bright brighter weak weaker +bright brighter wide wider +bright brighter young younger +bright brighter bad worse +bright brighter big bigger +cheap cheaper cold colder +cheap cheaper cool cooler +cheap cheaper deep deeper +cheap cheaper easy easier +cheap cheaper fast faster +cheap cheaper good better +cheap cheaper great greater +cheap cheaper hard harder +cheap cheaper heavy heavier +cheap cheaper high higher +cheap cheaper hot hotter +cheap cheaper large larger +cheap cheaper long longer +cheap cheaper loud louder +cheap cheaper low lower +cheap cheaper new newer +cheap cheaper old older +cheap cheaper quick quicker +cheap cheaper safe safer +cheap cheaper sharp sharper +cheap cheaper short shorter +cheap cheaper simple simpler +cheap cheaper slow slower +cheap cheaper small smaller +cheap cheaper smart smarter +cheap cheaper strong stronger +cheap cheaper tall taller +cheap cheaper tight tighter +cheap cheaper tough tougher +cheap cheaper warm warmer +cheap cheaper weak weaker +cheap cheaper wide wider +cheap cheaper young younger +cheap cheaper bad worse +cheap cheaper big bigger +cheap cheaper bright brighter +cold colder cool cooler +cold colder deep deeper +cold colder easy easier +cold colder fast faster +cold colder good better +cold colder great greater +cold colder hard harder +cold colder heavy heavier +cold colder high higher +cold colder hot hotter +cold colder large larger +cold colder long longer +cold colder loud louder +cold colder low lower +cold colder new newer +cold colder old older +cold colder quick quicker +cold colder safe safer +cold colder sharp sharper +cold colder short shorter +cold colder simple simpler +cold colder slow slower +cold colder small smaller +cold colder smart smarter +cold colder strong stronger +cold colder tall taller +cold colder tight tighter +cold colder tough tougher +cold colder warm warmer +cold colder weak weaker +cold colder wide wider +cold colder young younger +cold colder bad worse +cold colder big bigger +cold colder bright brighter +cold colder cheap cheaper +cool cooler deep deeper +cool cooler easy easier +cool cooler fast faster +cool cooler good better +cool cooler great greater +cool cooler hard harder +cool cooler heavy heavier +cool cooler high higher +cool cooler hot hotter +cool cooler large larger +cool cooler long longer +cool cooler loud louder +cool cooler low lower +cool cooler new newer +cool cooler old older +cool cooler quick quicker +cool cooler safe safer +cool cooler sharp sharper +cool cooler short shorter +cool cooler simple simpler +cool cooler slow slower +cool cooler small smaller +cool cooler smart smarter +cool cooler strong stronger +cool cooler tall taller +cool cooler tight tighter +cool cooler tough tougher +cool cooler warm warmer +cool cooler weak weaker +cool cooler wide wider +cool cooler young younger +cool cooler bad worse +cool cooler big bigger +cool cooler bright brighter +cool cooler cheap cheaper +cool cooler cold colder +deep deeper easy easier +deep deeper fast faster +deep deeper good better +deep deeper great greater +deep deeper hard harder +deep deeper heavy heavier +deep deeper high higher +deep deeper hot hotter +deep deeper large larger +deep deeper long longer +deep deeper loud louder +deep deeper low lower +deep deeper new newer +deep deeper old older +deep deeper quick quicker +deep deeper safe safer +deep deeper sharp sharper +deep deeper short shorter +deep deeper simple simpler +deep deeper slow slower +deep deeper small smaller +deep deeper smart smarter +deep deeper strong stronger +deep deeper tall taller +deep deeper tight tighter +deep deeper tough tougher +deep deeper warm warmer +deep deeper weak weaker +deep deeper wide wider +deep deeper young younger +deep deeper bad worse +deep deeper big bigger +deep deeper bright brighter +deep deeper cheap cheaper +deep deeper cold colder +deep deeper cool cooler +easy easier fast faster +easy easier good better +easy easier great greater +easy easier hard harder +easy easier heavy heavier +easy easier high higher +easy easier hot hotter +easy easier large larger +easy easier long longer +easy easier loud louder +easy easier low lower +easy easier new newer +easy easier old older +easy easier quick quicker +easy easier safe safer +easy easier sharp sharper +easy easier short shorter +easy easier simple simpler +easy easier slow slower +easy easier small smaller +easy easier smart smarter +easy easier strong stronger +easy easier tall taller +easy easier tight tighter +easy easier tough tougher +easy easier warm warmer +easy easier weak weaker +easy easier wide wider +easy easier young younger +easy easier bad worse +easy easier big bigger +easy easier bright brighter +easy easier cheap cheaper +easy easier cold colder +easy easier cool cooler +easy easier deep deeper +fast faster good better +fast faster great greater +fast faster hard harder +fast faster heavy heavier +fast faster high higher +fast faster hot hotter +fast faster large larger +fast faster long longer +fast faster loud louder +fast faster low lower +fast faster new newer +fast faster old older +fast faster quick quicker +fast faster safe safer +fast faster sharp sharper +fast faster short shorter +fast faster simple simpler +fast faster slow slower +fast faster small smaller +fast faster smart smarter +fast faster strong stronger +fast faster tall taller +fast faster tight tighter +fast faster tough tougher +fast faster warm warmer +fast faster weak weaker +fast faster wide wider +fast faster young younger +fast faster bad worse +fast faster big bigger +fast faster bright brighter +fast faster cheap cheaper +fast faster cold colder +fast faster cool cooler +fast faster deep deeper +fast faster easy easier +good better great greater +good better hard harder +good better heavy heavier +good better high higher +good better hot hotter +good better large larger +good better long longer +good better loud louder +good better low lower +good better new newer +good better old older +good better quick quicker +good better safe safer +good better sharp sharper +good better short shorter +good better simple simpler +good better slow slower +good better small smaller +good better smart smarter +good better strong stronger +good better tall taller +good better tight tighter +good better tough tougher +good better warm warmer +good better weak weaker +good better wide wider +good better young younger +good better bad worse +good better big bigger +good better bright brighter +good better cheap cheaper +good better cold colder +good better cool cooler +good better deep deeper +good better easy easier +good better fast faster +great greater hard harder +great greater heavy heavier +great greater high higher +great greater hot hotter +great greater large larger +great greater long longer +great greater loud louder +great greater low lower +great greater new newer +great greater old older +great greater quick quicker +great greater safe safer +great greater sharp sharper +great greater short shorter +great greater simple simpler +great greater slow slower +great greater small smaller +great greater smart smarter +great greater strong stronger +great greater tall taller +great greater tight tighter +great greater tough tougher +great greater warm warmer +great greater weak weaker +great greater wide wider +great greater young younger +great greater bad worse +great greater big bigger +great greater bright brighter +great greater cheap cheaper +great greater cold colder +great greater cool cooler +great greater deep deeper +great greater easy easier +great greater fast faster +great greater good better +hard harder heavy heavier +hard harder high higher +hard harder hot hotter +hard harder large larger +hard harder long longer +hard harder loud louder +hard harder low lower +hard harder new newer +hard harder old older +hard harder quick quicker +hard harder safe safer +hard harder sharp sharper +hard harder short shorter +hard harder simple simpler +hard harder slow slower +hard harder small smaller +hard harder smart smarter +hard harder strong stronger +hard harder tall taller +hard harder tight tighter +hard harder tough tougher +hard harder warm warmer +hard harder weak weaker +hard harder wide wider +hard harder young younger +hard harder bad worse +hard harder big bigger +hard harder bright brighter +hard harder cheap cheaper +hard harder cold colder +hard harder cool cooler +hard harder deep deeper +hard harder easy easier +hard harder fast faster +hard harder good better +hard harder great greater +heavy heavier high higher +heavy heavier hot hotter +heavy heavier large larger +heavy heavier long longer +heavy heavier loud louder +heavy heavier low lower +heavy heavier new newer +heavy heavier old older +heavy heavier quick quicker +heavy heavier safe safer +heavy heavier sharp sharper +heavy heavier short shorter +heavy heavier simple simpler +heavy heavier slow slower +heavy heavier small smaller +heavy heavier smart smarter +heavy heavier strong stronger +heavy heavier tall taller +heavy heavier tight tighter +heavy heavier tough tougher +heavy heavier warm warmer +heavy heavier weak weaker +heavy heavier wide wider +heavy heavier young younger +heavy heavier bad worse +heavy heavier big bigger +heavy heavier bright brighter +heavy heavier cheap cheaper +heavy heavier cold colder +heavy heavier cool cooler +heavy heavier deep deeper +heavy heavier easy easier +heavy heavier fast faster +heavy heavier good better +heavy heavier great greater +heavy heavier hard harder +high higher hot hotter +high higher large larger +high higher long longer +high higher loud louder +high higher low lower +high higher new newer +high higher old older +high higher quick quicker +high higher safe safer +high higher sharp sharper +high higher short shorter +high higher simple simpler +high higher slow slower +high higher small smaller +high higher smart smarter +high higher strong stronger +high higher tall taller +high higher tight tighter +high higher tough tougher +high higher warm warmer +high higher weak weaker +high higher wide wider +high higher young younger +high higher bad worse +high higher big bigger +high higher bright brighter +high higher cheap cheaper +high higher cold colder +high higher cool cooler +high higher deep deeper +high higher easy easier +high higher fast faster +high higher good better +high higher great greater +high higher hard harder +high higher heavy heavier +hot hotter large larger +hot hotter long longer +hot hotter loud louder +hot hotter low lower +hot hotter new newer +hot hotter old older +hot hotter quick quicker +hot hotter safe safer +hot hotter sharp sharper +hot hotter short shorter +hot hotter simple simpler +hot hotter slow slower +hot hotter small smaller +hot hotter smart smarter +hot hotter strong stronger +hot hotter tall taller +hot hotter tight tighter +hot hotter tough tougher +hot hotter warm warmer +hot hotter weak weaker +hot hotter wide wider +hot hotter young younger +hot hotter bad worse +hot hotter big bigger +hot hotter bright brighter +hot hotter cheap cheaper +hot hotter cold colder +hot hotter cool cooler +hot hotter deep deeper +hot hotter easy easier +hot hotter fast faster +hot hotter good better +hot hotter great greater +hot hotter hard harder +hot hotter heavy heavier +hot hotter high higher +large larger long longer +large larger loud louder +large larger low lower +large larger new newer +large larger old older +large larger quick quicker +large larger safe safer +large larger sharp sharper +large larger short shorter +large larger simple simpler +large larger slow slower +large larger small smaller +large larger smart smarter +large larger strong stronger +large larger tall taller +large larger tight tighter +large larger tough tougher +large larger warm warmer +large larger weak weaker +large larger wide wider +large larger young younger +large larger bad worse +large larger big bigger +large larger bright brighter +large larger cheap cheaper +large larger cold colder +large larger cool cooler +large larger deep deeper +large larger easy easier +large larger fast faster +large larger good better +large larger great greater +large larger hard harder +large larger heavy heavier +large larger high higher +large larger hot hotter +long longer loud louder +long longer low lower +long longer new newer +long longer old older +long longer quick quicker +long longer safe safer +long longer sharp sharper +long longer short shorter +long longer simple simpler +long longer slow slower +long longer small smaller +long longer smart smarter +long longer strong stronger +long longer tall taller +long longer tight tighter +long longer tough tougher +long longer warm warmer +long longer weak weaker +long longer wide wider +long longer young younger +long longer bad worse +long longer big bigger +long longer bright brighter +long longer cheap cheaper +long longer cold colder +long longer cool cooler +long longer deep deeper +long longer easy easier +long longer fast faster +long longer good better +long longer great greater +long longer hard harder +long longer heavy heavier +long longer high higher +long longer hot hotter +long longer large larger +loud louder low lower +loud louder new newer +loud louder old older +loud louder quick quicker +loud louder safe safer +loud louder sharp sharper +loud louder short shorter +loud louder simple simpler +loud louder slow slower +loud louder small smaller +loud louder smart smarter +loud louder strong stronger +loud louder tall taller +loud louder tight tighter +loud louder tough tougher +loud louder warm warmer +loud louder weak weaker +loud louder wide wider +loud louder young younger +loud louder bad worse +loud louder big bigger +loud louder bright brighter +loud louder cheap cheaper +loud louder cold colder +loud louder cool cooler +loud louder deep deeper +loud louder easy easier +loud louder fast faster +loud louder good better +loud louder great greater +loud louder hard harder +loud louder heavy heavier +loud louder high higher +loud louder hot hotter +loud louder large larger +loud louder long longer +low lower new newer +low lower old older +low lower quick quicker +low lower safe safer +low lower sharp sharper +low lower short shorter +low lower simple simpler +low lower slow slower +low lower small smaller +low lower smart smarter +low lower strong stronger +low lower tall taller +low lower tight tighter +low lower tough tougher +low lower warm warmer +low lower weak weaker +low lower wide wider +low lower young younger +low lower bad worse +low lower big bigger +low lower bright brighter +low lower cheap cheaper +low lower cold colder +low lower cool cooler +low lower deep deeper +low lower easy easier +low lower fast faster +low lower good better +low lower great greater +low lower hard harder +low lower heavy heavier +low lower high higher +low lower hot hotter +low lower large larger +low lower long longer +low lower loud louder +new newer old older +new newer quick quicker +new newer safe safer +new newer sharp sharper +new newer short shorter +new newer simple simpler +new newer slow slower +new newer small smaller +new newer smart smarter +new newer strong stronger +new newer tall taller +new newer tight tighter +new newer tough tougher +new newer warm warmer +new newer weak weaker +new newer wide wider +new newer young younger +new newer bad worse +new newer big bigger +new newer bright brighter +new newer cheap cheaper +new newer cold colder +new newer cool cooler +new newer deep deeper +new newer easy easier +new newer fast faster +new newer good better +new newer great greater +new newer hard harder +new newer heavy heavier +new newer high higher +new newer hot hotter +new newer large larger +new newer long longer +new newer loud louder +new newer low lower +old older quick quicker +old older safe safer +old older sharp sharper +old older short shorter +old older simple simpler +old older slow slower +old older small smaller +old older smart smarter +old older strong stronger +old older tall taller +old older tight tighter +old older tough tougher +old older warm warmer +old older weak weaker +old older wide wider +old older young younger +old older bad worse +old older big bigger +old older bright brighter +old older cheap cheaper +old older cold colder +old older cool cooler +old older deep deeper +old older easy easier +old older fast faster +old older good better +old older great greater +old older hard harder +old older heavy heavier +old older high higher +old older hot hotter +old older large larger +old older long longer +old older loud louder +old older low lower +old older new newer +quick quicker safe safer +quick quicker sharp sharper +quick quicker short shorter +quick quicker simple simpler +quick quicker slow slower +quick quicker small smaller +quick quicker smart smarter +quick quicker strong stronger +quick quicker tall taller +quick quicker tight tighter +quick quicker tough tougher +quick quicker warm warmer +quick quicker weak weaker +quick quicker wide wider +quick quicker young younger +quick quicker bad worse +quick quicker big bigger +quick quicker bright brighter +quick quicker cheap cheaper +quick quicker cold colder +quick quicker cool cooler +quick quicker deep deeper +quick quicker easy easier +quick quicker fast faster +quick quicker good better +quick quicker great greater +quick quicker hard harder +quick quicker heavy heavier +quick quicker high higher +quick quicker hot hotter +quick quicker large larger +quick quicker long longer +quick quicker loud louder +quick quicker low lower +quick quicker new newer +quick quicker old older +safe safer sharp sharper +safe safer short shorter +safe safer simple simpler +safe safer slow slower +safe safer small smaller +safe safer smart smarter +safe safer strong stronger +safe safer tall taller +safe safer tight tighter +safe safer tough tougher +safe safer warm warmer +safe safer weak weaker +safe safer wide wider +safe safer young younger +safe safer bad worse +safe safer big bigger +safe safer bright brighter +safe safer cheap cheaper +safe safer cold colder +safe safer cool cooler +safe safer deep deeper +safe safer easy easier +safe safer fast faster +safe safer good better +safe safer great greater +safe safer hard harder +safe safer heavy heavier +safe safer high higher +safe safer hot hotter +safe safer large larger +safe safer long longer +safe safer loud louder +safe safer low lower +safe safer new newer +safe safer old older +safe safer quick quicker +sharp sharper short shorter +sharp sharper simple simpler +sharp sharper slow slower +sharp sharper small smaller +sharp sharper smart smarter +sharp sharper strong stronger +sharp sharper tall taller +sharp sharper tight tighter +sharp sharper tough tougher +sharp sharper warm warmer +sharp sharper weak weaker +sharp sharper wide wider +sharp sharper young younger +sharp sharper bad worse +sharp sharper big bigger +sharp sharper bright brighter +sharp sharper cheap cheaper +sharp sharper cold colder +sharp sharper cool cooler +sharp sharper deep deeper +sharp sharper easy easier +sharp sharper fast faster +sharp sharper good better +sharp sharper great greater +sharp sharper hard harder +sharp sharper heavy heavier +sharp sharper high higher +sharp sharper hot hotter +sharp sharper large larger +sharp sharper long longer +sharp sharper loud louder +sharp sharper low lower +sharp sharper new newer +sharp sharper old older +sharp sharper quick quicker +sharp sharper safe safer +short shorter simple simpler +short shorter slow slower +short shorter small smaller +short shorter smart smarter +short shorter strong stronger +short shorter tall taller +short shorter tight tighter +short shorter tough tougher +short shorter warm warmer +short shorter weak weaker +short shorter wide wider +short shorter young younger +short shorter bad worse +short shorter big bigger +short shorter bright brighter +short shorter cheap cheaper +short shorter cold colder +short shorter cool cooler +short shorter deep deeper +short shorter easy easier +short shorter fast faster +short shorter good better +short shorter great greater +short shorter hard harder +short shorter heavy heavier +short shorter high higher +short shorter hot hotter +short shorter large larger +short shorter long longer +short shorter loud louder +short shorter low lower +short shorter new newer +short shorter old older +short shorter quick quicker +short shorter safe safer +short shorter sharp sharper +simple simpler slow slower +simple simpler small smaller +simple simpler smart smarter +simple simpler strong stronger +simple simpler tall taller +simple simpler tight tighter +simple simpler tough tougher +simple simpler warm warmer +simple simpler weak weaker +simple simpler wide wider +simple simpler young younger +simple simpler bad worse +simple simpler big bigger +simple simpler bright brighter +simple simpler cheap cheaper +simple simpler cold colder +simple simpler cool cooler +simple simpler deep deeper +simple simpler easy easier +simple simpler fast faster +simple simpler good better +simple simpler great greater +simple simpler hard harder +simple simpler heavy heavier +simple simpler high higher +simple simpler hot hotter +simple simpler large larger +simple simpler long longer +simple simpler loud louder +simple simpler low lower +simple simpler new newer +simple simpler old older +simple simpler quick quicker +simple simpler safe safer +simple simpler sharp sharper +simple simpler short shorter +slow slower small smaller +slow slower smart smarter +slow slower strong stronger +slow slower tall taller +slow slower tight tighter +slow slower tough tougher +slow slower warm warmer +slow slower weak weaker +slow slower wide wider +slow slower young younger +slow slower bad worse +slow slower big bigger +slow slower bright brighter +slow slower cheap cheaper +slow slower cold colder +slow slower cool cooler +slow slower deep deeper +slow slower easy easier +slow slower fast faster +slow slower good better +slow slower great greater +slow slower hard harder +slow slower heavy heavier +slow slower high higher +slow slower hot hotter +slow slower large larger +slow slower long longer +slow slower loud louder +slow slower low lower +slow slower new newer +slow slower old older +slow slower quick quicker +slow slower safe safer +slow slower sharp sharper +slow slower short shorter +slow slower simple simpler +small smaller smart smarter +small smaller strong stronger +small smaller tall taller +small smaller tight tighter +small smaller tough tougher +small smaller warm warmer +small smaller weak weaker +small smaller wide wider +small smaller young younger +small smaller bad worse +small smaller big bigger +small smaller bright brighter +small smaller cheap cheaper +small smaller cold colder +small smaller cool cooler +small smaller deep deeper +small smaller easy easier +small smaller fast faster +small smaller good better +small smaller great greater +small smaller hard harder +small smaller heavy heavier +small smaller high higher +small smaller hot hotter +small smaller large larger +small smaller long longer +small smaller loud louder +small smaller low lower +small smaller new newer +small smaller old older +small smaller quick quicker +small smaller safe safer +small smaller sharp sharper +small smaller short shorter +small smaller simple simpler +small smaller slow slower +smart smarter strong stronger +smart smarter tall taller +smart smarter tight tighter +smart smarter tough tougher +smart smarter warm warmer +smart smarter weak weaker +smart smarter wide wider +smart smarter young younger +smart smarter bad worse +smart smarter big bigger +smart smarter bright brighter +smart smarter cheap cheaper +smart smarter cold colder +smart smarter cool cooler +smart smarter deep deeper +smart smarter easy easier +smart smarter fast faster +smart smarter good better +smart smarter great greater +smart smarter hard harder +smart smarter heavy heavier +smart smarter high higher +smart smarter hot hotter +smart smarter large larger +smart smarter long longer +smart smarter loud louder +smart smarter low lower +smart smarter new newer +smart smarter old older +smart smarter quick quicker +smart smarter safe safer +smart smarter sharp sharper +smart smarter short shorter +smart smarter simple simpler +smart smarter slow slower +smart smarter small smaller +strong stronger tall taller +strong stronger tight tighter +strong stronger tough tougher +strong stronger warm warmer +strong stronger weak weaker +strong stronger wide wider +strong stronger young younger +strong stronger bad worse +strong stronger big bigger +strong stronger bright brighter +strong stronger cheap cheaper +strong stronger cold colder +strong stronger cool cooler +strong stronger deep deeper +strong stronger easy easier +strong stronger fast faster +strong stronger good better +strong stronger great greater +strong stronger hard harder +strong stronger heavy heavier +strong stronger high higher +strong stronger hot hotter +strong stronger large larger +strong stronger long longer +strong stronger loud louder +strong stronger low lower +strong stronger new newer +strong stronger old older +strong stronger quick quicker +strong stronger safe safer +strong stronger sharp sharper +strong stronger short shorter +strong stronger simple simpler +strong stronger slow slower +strong stronger small smaller +strong stronger smart smarter +tall taller tight tighter +tall taller tough tougher +tall taller warm warmer +tall taller weak weaker +tall taller wide wider +tall taller young younger +tall taller bad worse +tall taller big bigger +tall taller bright brighter +tall taller cheap cheaper +tall taller cold colder +tall taller cool cooler +tall taller deep deeper +tall taller easy easier +tall taller fast faster +tall taller good better +tall taller great greater +tall taller hard harder +tall taller heavy heavier +tall taller high higher +tall taller hot hotter +tall taller large larger +tall taller long longer +tall taller loud louder +tall taller low lower +tall taller new newer +tall taller old older +tall taller quick quicker +tall taller safe safer +tall taller sharp sharper +tall taller short shorter +tall taller simple simpler +tall taller slow slower +tall taller small smaller +tall taller smart smarter +tall taller strong stronger +tight tighter tough tougher +tight tighter warm warmer +tight tighter weak weaker +tight tighter wide wider +tight tighter young younger +tight tighter bad worse +tight tighter big bigger +tight tighter bright brighter +tight tighter cheap cheaper +tight tighter cold colder +tight tighter cool cooler +tight tighter deep deeper +tight tighter easy easier +tight tighter fast faster +tight tighter good better +tight tighter great greater +tight tighter hard harder +tight tighter heavy heavier +tight tighter high higher +tight tighter hot hotter +tight tighter large larger +tight tighter long longer +tight tighter loud louder +tight tighter low lower +tight tighter new newer +tight tighter old older +tight tighter quick quicker +tight tighter safe safer +tight tighter sharp sharper +tight tighter short shorter +tight tighter simple simpler +tight tighter slow slower +tight tighter small smaller +tight tighter smart smarter +tight tighter strong stronger +tight tighter tall taller +tough tougher warm warmer +tough tougher weak weaker +tough tougher wide wider +tough tougher young younger +tough tougher bad worse +tough tougher big bigger +tough tougher bright brighter +tough tougher cheap cheaper +tough tougher cold colder +tough tougher cool cooler +tough tougher deep deeper +tough tougher easy easier +tough tougher fast faster +tough tougher good better +tough tougher great greater +tough tougher hard harder +tough tougher heavy heavier +tough tougher high higher +tough tougher hot hotter +tough tougher large larger +tough tougher long longer +tough tougher loud louder +tough tougher low lower +tough tougher new newer +tough tougher old older +tough tougher quick quicker +tough tougher safe safer +tough tougher sharp sharper +tough tougher short shorter +tough tougher simple simpler +tough tougher slow slower +tough tougher small smaller +tough tougher smart smarter +tough tougher strong stronger +tough tougher tall taller +tough tougher tight tighter +warm warmer weak weaker +warm warmer wide wider +warm warmer young younger +warm warmer bad worse +warm warmer big bigger +warm warmer bright brighter +warm warmer cheap cheaper +warm warmer cold colder +warm warmer cool cooler +warm warmer deep deeper +warm warmer easy easier +warm warmer fast faster +warm warmer good better +warm warmer great greater +warm warmer hard harder +warm warmer heavy heavier +warm warmer high higher +warm warmer hot hotter +warm warmer large larger +warm warmer long longer +warm warmer loud louder +warm warmer low lower +warm warmer new newer +warm warmer old older +warm warmer quick quicker +warm warmer safe safer +warm warmer sharp sharper +warm warmer short shorter +warm warmer simple simpler +warm warmer slow slower +warm warmer small smaller +warm warmer smart smarter +warm warmer strong stronger +warm warmer tall taller +warm warmer tight tighter +warm warmer tough tougher +weak weaker wide wider +weak weaker young younger +weak weaker bad worse +weak weaker big bigger +weak weaker bright brighter +weak weaker cheap cheaper +weak weaker cold colder +weak weaker cool cooler +weak weaker deep deeper +weak weaker easy easier +weak weaker fast faster +weak weaker good better +weak weaker great greater +weak weaker hard harder +weak weaker heavy heavier +weak weaker high higher +weak weaker hot hotter +weak weaker large larger +weak weaker long longer +weak weaker loud louder +weak weaker low lower +weak weaker new newer +weak weaker old older +weak weaker quick quicker +weak weaker safe safer +weak weaker sharp sharper +weak weaker short shorter +weak weaker simple simpler +weak weaker slow slower +weak weaker small smaller +weak weaker smart smarter +weak weaker strong stronger +weak weaker tall taller +weak weaker tight tighter +weak weaker tough tougher +weak weaker warm warmer +wide wider young younger +wide wider bad worse +wide wider big bigger +wide wider bright brighter +wide wider cheap cheaper +wide wider cold colder +wide wider cool cooler +wide wider deep deeper +wide wider easy easier +wide wider fast faster +wide wider good better +wide wider great greater +wide wider hard harder +wide wider heavy heavier +wide wider high higher +wide wider hot hotter +wide wider large larger +wide wider long longer +wide wider loud louder +wide wider low lower +wide wider new newer +wide wider old older +wide wider quick quicker +wide wider safe safer +wide wider sharp sharper +wide wider short shorter +wide wider simple simpler +wide wider slow slower +wide wider small smaller +wide wider smart smarter +wide wider strong stronger +wide wider tall taller +wide wider tight tighter +wide wider tough tougher +wide wider warm warmer +wide wider weak weaker +young younger bad worse +young younger big bigger +young younger bright brighter +young younger cheap cheaper +young younger cold colder +young younger cool cooler +young younger deep deeper +young younger easy easier +young younger fast faster +young younger good better +young younger great greater +young younger hard harder +young younger heavy heavier +young younger high higher +young younger hot hotter +young younger large larger +young younger long longer +young younger loud louder +young younger low lower +young younger new newer +young younger old older +young younger quick quicker +young younger safe safer +young younger sharp sharper +young younger short shorter +young younger simple simpler +young younger slow slower +young younger small smaller +young younger smart smarter +young younger strong stronger +young younger tall taller +young younger tight tighter +young younger tough tougher +young younger warm warmer +young younger weak weaker +young younger wide wider +: gram4-superlative +bad worst big biggest +bad worst bright brightest +bad worst cold coldest +bad worst cool coolest +bad worst dark darkest +bad worst easy easiest +bad worst fast fastest +bad worst good best +bad worst great greatest +bad worst high highest +bad worst hot hottest +bad worst large largest +bad worst long longest +bad worst low lowest +bad worst lucky luckiest +bad worst old oldest +bad worst quick quickest +bad worst sharp sharpest +bad worst simple simplest +bad worst short shortest +bad worst slow slowest +bad worst small smallest +bad worst smart smartest +bad worst strange strangest +bad worst strong strongest +bad worst sweet sweetest +bad worst tall tallest +bad worst tasty tastiest +bad worst warm warmest +bad worst weak weakest +bad worst weird weirdest +bad worst wide widest +bad worst young youngest +big biggest bright brightest +big biggest cold coldest +big biggest cool coolest +big biggest dark darkest +big biggest easy easiest +big biggest fast fastest +big biggest good best +big biggest great greatest +big biggest high highest +big biggest hot hottest +big biggest large largest +big biggest long longest +big biggest low lowest +big biggest lucky luckiest +big biggest old oldest +big biggest quick quickest +big biggest sharp sharpest +big biggest simple simplest +big biggest short shortest +big biggest slow slowest +big biggest small smallest +big biggest smart smartest +big biggest strange strangest +big biggest strong strongest +big biggest sweet sweetest +big biggest tall tallest +big biggest tasty tastiest +big biggest warm warmest +big biggest weak weakest +big biggest weird weirdest +big biggest wide widest +big biggest young youngest +big biggest bad worst +bright brightest cold coldest +bright brightest cool coolest +bright brightest dark darkest +bright brightest easy easiest +bright brightest fast fastest +bright brightest good best +bright brightest great greatest +bright brightest high highest +bright brightest hot hottest +bright brightest large largest +bright brightest long longest +bright brightest low lowest +bright brightest lucky luckiest +bright brightest old oldest +bright brightest quick quickest +bright brightest sharp sharpest +bright brightest simple simplest +bright brightest short shortest +bright brightest slow slowest +bright brightest small smallest +bright brightest smart smartest +bright brightest strange strangest +bright brightest strong strongest +bright brightest sweet sweetest +bright brightest tall tallest +bright brightest tasty tastiest +bright brightest warm warmest +bright brightest weak weakest +bright brightest weird weirdest +bright brightest wide widest +bright brightest young youngest +bright brightest bad worst +bright brightest big biggest +cold coldest cool coolest +cold coldest dark darkest +cold coldest easy easiest +cold coldest fast fastest +cold coldest good best +cold coldest great greatest +cold coldest high highest +cold coldest hot hottest +cold coldest large largest +cold coldest long longest +cold coldest low lowest +cold coldest lucky luckiest +cold coldest old oldest +cold coldest quick quickest +cold coldest sharp sharpest +cold coldest simple simplest +cold coldest short shortest +cold coldest slow slowest +cold coldest small smallest +cold coldest smart smartest +cold coldest strange strangest +cold coldest strong strongest +cold coldest sweet sweetest +cold coldest tall tallest +cold coldest tasty tastiest +cold coldest warm warmest +cold coldest weak weakest +cold coldest weird weirdest +cold coldest wide widest +cold coldest young youngest +cold coldest bad worst +cold coldest big biggest +cold coldest bright brightest +cool coolest dark darkest +cool coolest easy easiest +cool coolest fast fastest +cool coolest good best +cool coolest great greatest +cool coolest high highest +cool coolest hot hottest +cool coolest large largest +cool coolest long longest +cool coolest low lowest +cool coolest lucky luckiest +cool coolest old oldest +cool coolest quick quickest +cool coolest sharp sharpest +cool coolest simple simplest +cool coolest short shortest +cool coolest slow slowest +cool coolest small smallest +cool coolest smart smartest +cool coolest strange strangest +cool coolest strong strongest +cool coolest sweet sweetest +cool coolest tall tallest +cool coolest tasty tastiest +cool coolest warm warmest +cool coolest weak weakest +cool coolest weird weirdest +cool coolest wide widest +cool coolest young youngest +cool coolest bad worst +cool coolest big biggest +cool coolest bright brightest +cool coolest cold coldest +dark darkest easy easiest +dark darkest fast fastest +dark darkest good best +dark darkest great greatest +dark darkest high highest +dark darkest hot hottest +dark darkest large largest +dark darkest long longest +dark darkest low lowest +dark darkest lucky luckiest +dark darkest old oldest +dark darkest quick quickest +dark darkest sharp sharpest +dark darkest simple simplest +dark darkest short shortest +dark darkest slow slowest +dark darkest small smallest +dark darkest smart smartest +dark darkest strange strangest +dark darkest strong strongest +dark darkest sweet sweetest +dark darkest tall tallest +dark darkest tasty tastiest +dark darkest warm warmest +dark darkest weak weakest +dark darkest weird weirdest +dark darkest wide widest +dark darkest young youngest +dark darkest bad worst +dark darkest big biggest +dark darkest bright brightest +dark darkest cold coldest +dark darkest cool coolest +easy easiest fast fastest +easy easiest good best +easy easiest great greatest +easy easiest high highest +easy easiest hot hottest +easy easiest large largest +easy easiest long longest +easy easiest low lowest +easy easiest lucky luckiest +easy easiest old oldest +easy easiest quick quickest +easy easiest sharp sharpest +easy easiest simple simplest +easy easiest short shortest +easy easiest slow slowest +easy easiest small smallest +easy easiest smart smartest +easy easiest strange strangest +easy easiest strong strongest +easy easiest sweet sweetest +easy easiest tall tallest +easy easiest tasty tastiest +easy easiest warm warmest +easy easiest weak weakest +easy easiest weird weirdest +easy easiest wide widest +easy easiest young youngest +easy easiest bad worst +easy easiest big biggest +easy easiest bright brightest +easy easiest cold coldest +easy easiest cool coolest +easy easiest dark darkest +fast fastest good best +fast fastest great greatest +fast fastest high highest +fast fastest hot hottest +fast fastest large largest +fast fastest long longest +fast fastest low lowest +fast fastest lucky luckiest +fast fastest old oldest +fast fastest quick quickest +fast fastest sharp sharpest +fast fastest simple simplest +fast fastest short shortest +fast fastest slow slowest +fast fastest small smallest +fast fastest smart smartest +fast fastest strange strangest +fast fastest strong strongest +fast fastest sweet sweetest +fast fastest tall tallest +fast fastest tasty tastiest +fast fastest warm warmest +fast fastest weak weakest +fast fastest weird weirdest +fast fastest wide widest +fast fastest young youngest +fast fastest bad worst +fast fastest big biggest +fast fastest bright brightest +fast fastest cold coldest +fast fastest cool coolest +fast fastest dark darkest +fast fastest easy easiest +good best great greatest +good best high highest +good best hot hottest +good best large largest +good best long longest +good best low lowest +good best lucky luckiest +good best old oldest +good best quick quickest +good best sharp sharpest +good best simple simplest +good best short shortest +good best slow slowest +good best small smallest +good best smart smartest +good best strange strangest +good best strong strongest +good best sweet sweetest +good best tall tallest +good best tasty tastiest +good best warm warmest +good best weak weakest +good best weird weirdest +good best wide widest +good best young youngest +good best bad worst +good best big biggest +good best bright brightest +good best cold coldest +good best cool coolest +good best dark darkest +good best easy easiest +good best fast fastest +great greatest high highest +great greatest hot hottest +great greatest large largest +great greatest long longest +great greatest low lowest +great greatest lucky luckiest +great greatest old oldest +great greatest quick quickest +great greatest sharp sharpest +great greatest simple simplest +great greatest short shortest +great greatest slow slowest +great greatest small smallest +great greatest smart smartest +great greatest strange strangest +great greatest strong strongest +great greatest sweet sweetest +great greatest tall tallest +great greatest tasty tastiest +great greatest warm warmest +great greatest weak weakest +great greatest weird weirdest +great greatest wide widest +great greatest young youngest +great greatest bad worst +great greatest big biggest +great greatest bright brightest +great greatest cold coldest +great greatest cool coolest +great greatest dark darkest +great greatest easy easiest +great greatest fast fastest +great greatest good best +high highest hot hottest +high highest large largest +high highest long longest +high highest low lowest +high highest lucky luckiest +high highest old oldest +high highest quick quickest +high highest sharp sharpest +high highest simple simplest +high highest short shortest +high highest slow slowest +high highest small smallest +high highest smart smartest +high highest strange strangest +high highest strong strongest +high highest sweet sweetest +high highest tall tallest +high highest tasty tastiest +high highest warm warmest +high highest weak weakest +high highest weird weirdest +high highest wide widest +high highest young youngest +high highest bad worst +high highest big biggest +high highest bright brightest +high highest cold coldest +high highest cool coolest +high highest dark darkest +high highest easy easiest +high highest fast fastest +high highest good best +high highest great greatest +hot hottest large largest +hot hottest long longest +hot hottest low lowest +hot hottest lucky luckiest +hot hottest old oldest +hot hottest quick quickest +hot hottest sharp sharpest +hot hottest simple simplest +hot hottest short shortest +hot hottest slow slowest +hot hottest small smallest +hot hottest smart smartest +hot hottest strange strangest +hot hottest strong strongest +hot hottest sweet sweetest +hot hottest tall tallest +hot hottest tasty tastiest +hot hottest warm warmest +hot hottest weak weakest +hot hottest weird weirdest +hot hottest wide widest +hot hottest young youngest +hot hottest bad worst +hot hottest big biggest +hot hottest bright brightest +hot hottest cold coldest +hot hottest cool coolest +hot hottest dark darkest +hot hottest easy easiest +hot hottest fast fastest +hot hottest good best +hot hottest great greatest +hot hottest high highest +large largest long longest +large largest low lowest +large largest lucky luckiest +large largest old oldest +large largest quick quickest +large largest sharp sharpest +large largest simple simplest +large largest short shortest +large largest slow slowest +large largest small smallest +large largest smart smartest +large largest strange strangest +large largest strong strongest +large largest sweet sweetest +large largest tall tallest +large largest tasty tastiest +large largest warm warmest +large largest weak weakest +large largest weird weirdest +large largest wide widest +large largest young youngest +large largest bad worst +large largest big biggest +large largest bright brightest +large largest cold coldest +large largest cool coolest +large largest dark darkest +large largest easy easiest +large largest fast fastest +large largest good best +large largest great greatest +large largest high highest +large largest hot hottest +long longest low lowest +long longest lucky luckiest +long longest old oldest +long longest quick quickest +long longest sharp sharpest +long longest simple simplest +long longest short shortest +long longest slow slowest +long longest small smallest +long longest smart smartest +long longest strange strangest +long longest strong strongest +long longest sweet sweetest +long longest tall tallest +long longest tasty tastiest +long longest warm warmest +long longest weak weakest +long longest weird weirdest +long longest wide widest +long longest young youngest +long longest bad worst +long longest big biggest +long longest bright brightest +long longest cold coldest +long longest cool coolest +long longest dark darkest +long longest easy easiest +long longest fast fastest +long longest good best +long longest great greatest +long longest high highest +long longest hot hottest +long longest large largest +low lowest lucky luckiest +low lowest old oldest +low lowest quick quickest +low lowest sharp sharpest +low lowest simple simplest +low lowest short shortest +low lowest slow slowest +low lowest small smallest +low lowest smart smartest +low lowest strange strangest +low lowest strong strongest +low lowest sweet sweetest +low lowest tall tallest +low lowest tasty tastiest +low lowest warm warmest +low lowest weak weakest +low lowest weird weirdest +low lowest wide widest +low lowest young youngest +low lowest bad worst +low lowest big biggest +low lowest bright brightest +low lowest cold coldest +low lowest cool coolest +low lowest dark darkest +low lowest easy easiest +low lowest fast fastest +low lowest good best +low lowest great greatest +low lowest high highest +low lowest hot hottest +low lowest large largest +low lowest long longest +lucky luckiest old oldest +lucky luckiest quick quickest +lucky luckiest sharp sharpest +lucky luckiest simple simplest +lucky luckiest short shortest +lucky luckiest slow slowest +lucky luckiest small smallest +lucky luckiest smart smartest +lucky luckiest strange strangest +lucky luckiest strong strongest +lucky luckiest sweet sweetest +lucky luckiest tall tallest +lucky luckiest tasty tastiest +lucky luckiest warm warmest +lucky luckiest weak weakest +lucky luckiest weird weirdest +lucky luckiest wide widest +lucky luckiest young youngest +lucky luckiest bad worst +lucky luckiest big biggest +lucky luckiest bright brightest +lucky luckiest cold coldest +lucky luckiest cool coolest +lucky luckiest dark darkest +lucky luckiest easy easiest +lucky luckiest fast fastest +lucky luckiest good best +lucky luckiest great greatest +lucky luckiest high highest +lucky luckiest hot hottest +lucky luckiest large largest +lucky luckiest long longest +lucky luckiest low lowest +old oldest quick quickest +old oldest sharp sharpest +old oldest simple simplest +old oldest short shortest +old oldest slow slowest +old oldest small smallest +old oldest smart smartest +old oldest strange strangest +old oldest strong strongest +old oldest sweet sweetest +old oldest tall tallest +old oldest tasty tastiest +old oldest warm warmest +old oldest weak weakest +old oldest weird weirdest +old oldest wide widest +old oldest young youngest +old oldest bad worst +old oldest big biggest +old oldest bright brightest +old oldest cold coldest +old oldest cool coolest +old oldest dark darkest +old oldest easy easiest +old oldest fast fastest +old oldest good best +old oldest great greatest +old oldest high highest +old oldest hot hottest +old oldest large largest +old oldest long longest +old oldest low lowest +old oldest lucky luckiest +quick quickest sharp sharpest +quick quickest simple simplest +quick quickest short shortest +quick quickest slow slowest +quick quickest small smallest +quick quickest smart smartest +quick quickest strange strangest +quick quickest strong strongest +quick quickest sweet sweetest +quick quickest tall tallest +quick quickest tasty tastiest +quick quickest warm warmest +quick quickest weak weakest +quick quickest weird weirdest +quick quickest wide widest +quick quickest young youngest +quick quickest bad worst +quick quickest big biggest +quick quickest bright brightest +quick quickest cold coldest +quick quickest cool coolest +quick quickest dark darkest +quick quickest easy easiest +quick quickest fast fastest +quick quickest good best +quick quickest great greatest +quick quickest high highest +quick quickest hot hottest +quick quickest large largest +quick quickest long longest +quick quickest low lowest +quick quickest lucky luckiest +quick quickest old oldest +sharp sharpest simple simplest +sharp sharpest short shortest +sharp sharpest slow slowest +sharp sharpest small smallest +sharp sharpest smart smartest +sharp sharpest strange strangest +sharp sharpest strong strongest +sharp sharpest sweet sweetest +sharp sharpest tall tallest +sharp sharpest tasty tastiest +sharp sharpest warm warmest +sharp sharpest weak weakest +sharp sharpest weird weirdest +sharp sharpest wide widest +sharp sharpest young youngest +sharp sharpest bad worst +sharp sharpest big biggest +sharp sharpest bright brightest +sharp sharpest cold coldest +sharp sharpest cool coolest +sharp sharpest dark darkest +sharp sharpest easy easiest +sharp sharpest fast fastest +sharp sharpest good best +sharp sharpest great greatest +sharp sharpest high highest +sharp sharpest hot hottest +sharp sharpest large largest +sharp sharpest long longest +sharp sharpest low lowest +sharp sharpest lucky luckiest +sharp sharpest old oldest +sharp sharpest quick quickest +simple simplest short shortest +simple simplest slow slowest +simple simplest small smallest +simple simplest smart smartest +simple simplest strange strangest +simple simplest strong strongest +simple simplest sweet sweetest +simple simplest tall tallest +simple simplest tasty tastiest +simple simplest warm warmest +simple simplest weak weakest +simple simplest weird weirdest +simple simplest wide widest +simple simplest young youngest +simple simplest bad worst +simple simplest big biggest +simple simplest bright brightest +simple simplest cold coldest +simple simplest cool coolest +simple simplest dark darkest +simple simplest easy easiest +simple simplest fast fastest +simple simplest good best +simple simplest great greatest +simple simplest high highest +simple simplest hot hottest +simple simplest large largest +simple simplest long longest +simple simplest low lowest +simple simplest lucky luckiest +simple simplest old oldest +simple simplest quick quickest +simple simplest sharp sharpest +short shortest slow slowest +short shortest small smallest +short shortest smart smartest +short shortest strange strangest +short shortest strong strongest +short shortest sweet sweetest +short shortest tall tallest +short shortest tasty tastiest +short shortest warm warmest +short shortest weak weakest +short shortest weird weirdest +short shortest wide widest +short shortest young youngest +short shortest bad worst +short shortest big biggest +short shortest bright brightest +short shortest cold coldest +short shortest cool coolest +short shortest dark darkest +short shortest easy easiest +short shortest fast fastest +short shortest good best +short shortest great greatest +short shortest high highest +short shortest hot hottest +short shortest large largest +short shortest long longest +short shortest low lowest +short shortest lucky luckiest +short shortest old oldest +short shortest quick quickest +short shortest sharp sharpest +short shortest simple simplest +slow slowest small smallest +slow slowest smart smartest +slow slowest strange strangest +slow slowest strong strongest +slow slowest sweet sweetest +slow slowest tall tallest +slow slowest tasty tastiest +slow slowest warm warmest +slow slowest weak weakest +slow slowest weird weirdest +slow slowest wide widest +slow slowest young youngest +slow slowest bad worst +slow slowest big biggest +slow slowest bright brightest +slow slowest cold coldest +slow slowest cool coolest +slow slowest dark darkest +slow slowest easy easiest +slow slowest fast fastest +slow slowest good best +slow slowest great greatest +slow slowest high highest +slow slowest hot hottest +slow slowest large largest +slow slowest long longest +slow slowest low lowest +slow slowest lucky luckiest +slow slowest old oldest +slow slowest quick quickest +slow slowest sharp sharpest +slow slowest simple simplest +slow slowest short shortest +small smallest smart smartest +small smallest strange strangest +small smallest strong strongest +small smallest sweet sweetest +small smallest tall tallest +small smallest tasty tastiest +small smallest warm warmest +small smallest weak weakest +small smallest weird weirdest +small smallest wide widest +small smallest young youngest +small smallest bad worst +small smallest big biggest +small smallest bright brightest +small smallest cold coldest +small smallest cool coolest +small smallest dark darkest +small smallest easy easiest +small smallest fast fastest +small smallest good best +small smallest great greatest +small smallest high highest +small smallest hot hottest +small smallest large largest +small smallest long longest +small smallest low lowest +small smallest lucky luckiest +small smallest old oldest +small smallest quick quickest +small smallest sharp sharpest +small smallest simple simplest +small smallest short shortest +small smallest slow slowest +smart smartest strange strangest +smart smartest strong strongest +smart smartest sweet sweetest +smart smartest tall tallest +smart smartest tasty tastiest +smart smartest warm warmest +smart smartest weak weakest +smart smartest weird weirdest +smart smartest wide widest +smart smartest young youngest +smart smartest bad worst +smart smartest big biggest +smart smartest bright brightest +smart smartest cold coldest +smart smartest cool coolest +smart smartest dark darkest +smart smartest easy easiest +smart smartest fast fastest +smart smartest good best +smart smartest great greatest +smart smartest high highest +smart smartest hot hottest +smart smartest large largest +smart smartest long longest +smart smartest low lowest +smart smartest lucky luckiest +smart smartest old oldest +smart smartest quick quickest +smart smartest sharp sharpest +smart smartest simple simplest +smart smartest short shortest +smart smartest slow slowest +smart smartest small smallest +strange strangest strong strongest +strange strangest sweet sweetest +strange strangest tall tallest +strange strangest tasty tastiest +strange strangest warm warmest +strange strangest weak weakest +strange strangest weird weirdest +strange strangest wide widest +strange strangest young youngest +strange strangest bad worst +strange strangest big biggest +strange strangest bright brightest +strange strangest cold coldest +strange strangest cool coolest +strange strangest dark darkest +strange strangest easy easiest +strange strangest fast fastest +strange strangest good best +strange strangest great greatest +strange strangest high highest +strange strangest hot hottest +strange strangest large largest +strange strangest long longest +strange strangest low lowest +strange strangest lucky luckiest +strange strangest old oldest +strange strangest quick quickest +strange strangest sharp sharpest +strange strangest simple simplest +strange strangest short shortest +strange strangest slow slowest +strange strangest small smallest +strange strangest smart smartest +strong strongest sweet sweetest +strong strongest tall tallest +strong strongest tasty tastiest +strong strongest warm warmest +strong strongest weak weakest +strong strongest weird weirdest +strong strongest wide widest +strong strongest young youngest +strong strongest bad worst +strong strongest big biggest +strong strongest bright brightest +strong strongest cold coldest +strong strongest cool coolest +strong strongest dark darkest +strong strongest easy easiest +strong strongest fast fastest +strong strongest good best +strong strongest great greatest +strong strongest high highest +strong strongest hot hottest +strong strongest large largest +strong strongest long longest +strong strongest low lowest +strong strongest lucky luckiest +strong strongest old oldest +strong strongest quick quickest +strong strongest sharp sharpest +strong strongest simple simplest +strong strongest short shortest +strong strongest slow slowest +strong strongest small smallest +strong strongest smart smartest +strong strongest strange strangest +sweet sweetest tall tallest +sweet sweetest tasty tastiest +sweet sweetest warm warmest +sweet sweetest weak weakest +sweet sweetest weird weirdest +sweet sweetest wide widest +sweet sweetest young youngest +sweet sweetest bad worst +sweet sweetest big biggest +sweet sweetest bright brightest +sweet sweetest cold coldest +sweet sweetest cool coolest +sweet sweetest dark darkest +sweet sweetest easy easiest +sweet sweetest fast fastest +sweet sweetest good best +sweet sweetest great greatest +sweet sweetest high highest +sweet sweetest hot hottest +sweet sweetest large largest +sweet sweetest long longest +sweet sweetest low lowest +sweet sweetest lucky luckiest +sweet sweetest old oldest +sweet sweetest quick quickest +sweet sweetest sharp sharpest +sweet sweetest simple simplest +sweet sweetest short shortest +sweet sweetest slow slowest +sweet sweetest small smallest +sweet sweetest smart smartest +sweet sweetest strange strangest +sweet sweetest strong strongest +tall tallest tasty tastiest +tall tallest warm warmest +tall tallest weak weakest +tall tallest weird weirdest +tall tallest wide widest +tall tallest young youngest +tall tallest bad worst +tall tallest big biggest +tall tallest bright brightest +tall tallest cold coldest +tall tallest cool coolest +tall tallest dark darkest +tall tallest easy easiest +tall tallest fast fastest +tall tallest good best +tall tallest great greatest +tall tallest high highest +tall tallest hot hottest +tall tallest large largest +tall tallest long longest +tall tallest low lowest +tall tallest lucky luckiest +tall tallest old oldest +tall tallest quick quickest +tall tallest sharp sharpest +tall tallest simple simplest +tall tallest short shortest +tall tallest slow slowest +tall tallest small smallest +tall tallest smart smartest +tall tallest strange strangest +tall tallest strong strongest +tall tallest sweet sweetest +tasty tastiest warm warmest +tasty tastiest weak weakest +tasty tastiest weird weirdest +tasty tastiest wide widest +tasty tastiest young youngest +tasty tastiest bad worst +tasty tastiest big biggest +tasty tastiest bright brightest +tasty tastiest cold coldest +tasty tastiest cool coolest +tasty tastiest dark darkest +tasty tastiest easy easiest +tasty tastiest fast fastest +tasty tastiest good best +tasty tastiest great greatest +tasty tastiest high highest +tasty tastiest hot hottest +tasty tastiest large largest +tasty tastiest long longest +tasty tastiest low lowest +tasty tastiest lucky luckiest +tasty tastiest old oldest +tasty tastiest quick quickest +tasty tastiest sharp sharpest +tasty tastiest simple simplest +tasty tastiest short shortest +tasty tastiest slow slowest +tasty tastiest small smallest +tasty tastiest smart smartest +tasty tastiest strange strangest +tasty tastiest strong strongest +tasty tastiest sweet sweetest +tasty tastiest tall tallest +warm warmest weak weakest +warm warmest weird weirdest +warm warmest wide widest +warm warmest young youngest +warm warmest bad worst +warm warmest big biggest +warm warmest bright brightest +warm warmest cold coldest +warm warmest cool coolest +warm warmest dark darkest +warm warmest easy easiest +warm warmest fast fastest +warm warmest good best +warm warmest great greatest +warm warmest high highest +warm warmest hot hottest +warm warmest large largest +warm warmest long longest +warm warmest low lowest +warm warmest lucky luckiest +warm warmest old oldest +warm warmest quick quickest +warm warmest sharp sharpest +warm warmest simple simplest +warm warmest short shortest +warm warmest slow slowest +warm warmest small smallest +warm warmest smart smartest +warm warmest strange strangest +warm warmest strong strongest +warm warmest sweet sweetest +warm warmest tall tallest +warm warmest tasty tastiest +weak weakest weird weirdest +weak weakest wide widest +weak weakest young youngest +weak weakest bad worst +weak weakest big biggest +weak weakest bright brightest +weak weakest cold coldest +weak weakest cool coolest +weak weakest dark darkest +weak weakest easy easiest +weak weakest fast fastest +weak weakest good best +weak weakest great greatest +weak weakest high highest +weak weakest hot hottest +weak weakest large largest +weak weakest long longest +weak weakest low lowest +weak weakest lucky luckiest +weak weakest old oldest +weak weakest quick quickest +weak weakest sharp sharpest +weak weakest simple simplest +weak weakest short shortest +weak weakest slow slowest +weak weakest small smallest +weak weakest smart smartest +weak weakest strange strangest +weak weakest strong strongest +weak weakest sweet sweetest +weak weakest tall tallest +weak weakest tasty tastiest +weak weakest warm warmest +weird weirdest wide widest +weird weirdest young youngest +weird weirdest bad worst +weird weirdest big biggest +weird weirdest bright brightest +weird weirdest cold coldest +weird weirdest cool coolest +weird weirdest dark darkest +weird weirdest easy easiest +weird weirdest fast fastest +weird weirdest good best +weird weirdest great greatest +weird weirdest high highest +weird weirdest hot hottest +weird weirdest large largest +weird weirdest long longest +weird weirdest low lowest +weird weirdest lucky luckiest +weird weirdest old oldest +weird weirdest quick quickest +weird weirdest sharp sharpest +weird weirdest simple simplest +weird weirdest short shortest +weird weirdest slow slowest +weird weirdest small smallest +weird weirdest smart smartest +weird weirdest strange strangest +weird weirdest strong strongest +weird weirdest sweet sweetest +weird weirdest tall tallest +weird weirdest tasty tastiest +weird weirdest warm warmest +weird weirdest weak weakest +wide widest young youngest +wide widest bad worst +wide widest big biggest +wide widest bright brightest +wide widest cold coldest +wide widest cool coolest +wide widest dark darkest +wide widest easy easiest +wide widest fast fastest +wide widest good best +wide widest great greatest +wide widest high highest +wide widest hot hottest +wide widest large largest +wide widest long longest +wide widest low lowest +wide widest lucky luckiest +wide widest old oldest +wide widest quick quickest +wide widest sharp sharpest +wide widest simple simplest +wide widest short shortest +wide widest slow slowest +wide widest small smallest +wide widest smart smartest +wide widest strange strangest +wide widest strong strongest +wide widest sweet sweetest +wide widest tall tallest +wide widest tasty tastiest +wide widest warm warmest +wide widest weak weakest +wide widest weird weirdest +young youngest bad worst +young youngest big biggest +young youngest bright brightest +young youngest cold coldest +young youngest cool coolest +young youngest dark darkest +young youngest easy easiest +young youngest fast fastest +young youngest good best +young youngest great greatest +young youngest high highest +young youngest hot hottest +young youngest large largest +young youngest long longest +young youngest low lowest +young youngest lucky luckiest +young youngest old oldest +young youngest quick quickest +young youngest sharp sharpest +young youngest simple simplest +young youngest short shortest +young youngest slow slowest +young youngest small smallest +young youngest smart smartest +young youngest strange strangest +young youngest strong strongest +young youngest sweet sweetest +young youngest tall tallest +young youngest tasty tastiest +young youngest warm warmest +young youngest weak weakest +young youngest weird weirdest +young youngest wide widest +: gram5-present-participle +code coding dance dancing +code coding debug debugging +code coding decrease decreasing +code coding describe describing +code coding discover discovering +code coding enhance enhancing +code coding fly flying +code coding generate generating +code coding go going +code coding implement implementing +code coding increase increasing +code coding invent inventing +code coding jump jumping +code coding listen listening +code coding look looking +code coding move moving +code coding play playing +code coding predict predicting +code coding read reading +code coding run running +code coding say saying +code coding scream screaming +code coding see seeing +code coding shuffle shuffling +code coding sing singing +code coding sit sitting +code coding slow slowing +code coding swim swimming +code coding think thinking +code coding vanish vanishing +code coding walk walking +code coding write writing +dance dancing debug debugging +dance dancing decrease decreasing +dance dancing describe describing +dance dancing discover discovering +dance dancing enhance enhancing +dance dancing fly flying +dance dancing generate generating +dance dancing go going +dance dancing implement implementing +dance dancing increase increasing +dance dancing invent inventing +dance dancing jump jumping +dance dancing listen listening +dance dancing look looking +dance dancing move moving +dance dancing play playing +dance dancing predict predicting +dance dancing read reading +dance dancing run running +dance dancing say saying +dance dancing scream screaming +dance dancing see seeing +dance dancing shuffle shuffling +dance dancing sing singing +dance dancing sit sitting +dance dancing slow slowing +dance dancing swim swimming +dance dancing think thinking +dance dancing vanish vanishing +dance dancing walk walking +dance dancing write writing +dance dancing code coding +debug debugging decrease decreasing +debug debugging describe describing +debug debugging discover discovering +debug debugging enhance enhancing +debug debugging fly flying +debug debugging generate generating +debug debugging go going +debug debugging implement implementing +debug debugging increase increasing +debug debugging invent inventing +debug debugging jump jumping +debug debugging listen listening +debug debugging look looking +debug debugging move moving +debug debugging play playing +debug debugging predict predicting +debug debugging read reading +debug debugging run running +debug debugging say saying +debug debugging scream screaming +debug debugging see seeing +debug debugging shuffle shuffling +debug debugging sing singing +debug debugging sit sitting +debug debugging slow slowing +debug debugging swim swimming +debug debugging think thinking +debug debugging vanish vanishing +debug debugging walk walking +debug debugging write writing +debug debugging code coding +debug debugging dance dancing +decrease decreasing describe describing +decrease decreasing discover discovering +decrease decreasing enhance enhancing +decrease decreasing fly flying +decrease decreasing generate generating +decrease decreasing go going +decrease decreasing implement implementing +decrease decreasing increase increasing +decrease decreasing invent inventing +decrease decreasing jump jumping +decrease decreasing listen listening +decrease decreasing look looking +decrease decreasing move moving +decrease decreasing play playing +decrease decreasing predict predicting +decrease decreasing read reading +decrease decreasing run running +decrease decreasing say saying +decrease decreasing scream screaming +decrease decreasing see seeing +decrease decreasing shuffle shuffling +decrease decreasing sing singing +decrease decreasing sit sitting +decrease decreasing slow slowing +decrease decreasing swim swimming +decrease decreasing think thinking +decrease decreasing vanish vanishing +decrease decreasing walk walking +decrease decreasing write writing +decrease decreasing code coding +decrease decreasing dance dancing +decrease decreasing debug debugging +describe describing discover discovering +describe describing enhance enhancing +describe describing fly flying +describe describing generate generating +describe describing go going +describe describing implement implementing +describe describing increase increasing +describe describing invent inventing +describe describing jump jumping +describe describing listen listening +describe describing look looking +describe describing move moving +describe describing play playing +describe describing predict predicting +describe describing read reading +describe describing run running +describe describing say saying +describe describing scream screaming +describe describing see seeing +describe describing shuffle shuffling +describe describing sing singing +describe describing sit sitting +describe describing slow slowing +describe describing swim swimming +describe describing think thinking +describe describing vanish vanishing +describe describing walk walking +describe describing write writing +describe describing code coding +describe describing dance dancing +describe describing debug debugging +describe describing decrease decreasing +discover discovering enhance enhancing +discover discovering fly flying +discover discovering generate generating +discover discovering go going +discover discovering implement implementing +discover discovering increase increasing +discover discovering invent inventing +discover discovering jump jumping +discover discovering listen listening +discover discovering look looking +discover discovering move moving +discover discovering play playing +discover discovering predict predicting +discover discovering read reading +discover discovering run running +discover discovering say saying +discover discovering scream screaming +discover discovering see seeing +discover discovering shuffle shuffling +discover discovering sing singing +discover discovering sit sitting +discover discovering slow slowing +discover discovering swim swimming +discover discovering think thinking +discover discovering vanish vanishing +discover discovering walk walking +discover discovering write writing +discover discovering code coding +discover discovering dance dancing +discover discovering debug debugging +discover discovering decrease decreasing +discover discovering describe describing +enhance enhancing fly flying +enhance enhancing generate generating +enhance enhancing go going +enhance enhancing implement implementing +enhance enhancing increase increasing +enhance enhancing invent inventing +enhance enhancing jump jumping +enhance enhancing listen listening +enhance enhancing look looking +enhance enhancing move moving +enhance enhancing play playing +enhance enhancing predict predicting +enhance enhancing read reading +enhance enhancing run running +enhance enhancing say saying +enhance enhancing scream screaming +enhance enhancing see seeing +enhance enhancing shuffle shuffling +enhance enhancing sing singing +enhance enhancing sit sitting +enhance enhancing slow slowing +enhance enhancing swim swimming +enhance enhancing think thinking +enhance enhancing vanish vanishing +enhance enhancing walk walking +enhance enhancing write writing +enhance enhancing code coding +enhance enhancing dance dancing +enhance enhancing debug debugging +enhance enhancing decrease decreasing +enhance enhancing describe describing +enhance enhancing discover discovering +fly flying generate generating +fly flying go going +fly flying implement implementing +fly flying increase increasing +fly flying invent inventing +fly flying jump jumping +fly flying listen listening +fly flying look looking +fly flying move moving +fly flying play playing +fly flying predict predicting +fly flying read reading +fly flying run running +fly flying say saying +fly flying scream screaming +fly flying see seeing +fly flying shuffle shuffling +fly flying sing singing +fly flying sit sitting +fly flying slow slowing +fly flying swim swimming +fly flying think thinking +fly flying vanish vanishing +fly flying walk walking +fly flying write writing +fly flying code coding +fly flying dance dancing +fly flying debug debugging +fly flying decrease decreasing +fly flying describe describing +fly flying discover discovering +fly flying enhance enhancing +generate generating go going +generate generating implement implementing +generate generating increase increasing +generate generating invent inventing +generate generating jump jumping +generate generating listen listening +generate generating look looking +generate generating move moving +generate generating play playing +generate generating predict predicting +generate generating read reading +generate generating run running +generate generating say saying +generate generating scream screaming +generate generating see seeing +generate generating shuffle shuffling +generate generating sing singing +generate generating sit sitting +generate generating slow slowing +generate generating swim swimming +generate generating think thinking +generate generating vanish vanishing +generate generating walk walking +generate generating write writing +generate generating code coding +generate generating dance dancing +generate generating debug debugging +generate generating decrease decreasing +generate generating describe describing +generate generating discover discovering +generate generating enhance enhancing +generate generating fly flying +go going implement implementing +go going increase increasing +go going invent inventing +go going jump jumping +go going listen listening +go going look looking +go going move moving +go going play playing +go going predict predicting +go going read reading +go going run running +go going say saying +go going scream screaming +go going see seeing +go going shuffle shuffling +go going sing singing +go going sit sitting +go going slow slowing +go going swim swimming +go going think thinking +go going vanish vanishing +go going walk walking +go going write writing +go going code coding +go going dance dancing +go going debug debugging +go going decrease decreasing +go going describe describing +go going discover discovering +go going enhance enhancing +go going fly flying +go going generate generating +implement implementing increase increasing +implement implementing invent inventing +implement implementing jump jumping +implement implementing listen listening +implement implementing look looking +implement implementing move moving +implement implementing play playing +implement implementing predict predicting +implement implementing read reading +implement implementing run running +implement implementing say saying +implement implementing scream screaming +implement implementing see seeing +implement implementing shuffle shuffling +implement implementing sing singing +implement implementing sit sitting +implement implementing slow slowing +implement implementing swim swimming +implement implementing think thinking +implement implementing vanish vanishing +implement implementing walk walking +implement implementing write writing +implement implementing code coding +implement implementing dance dancing +implement implementing debug debugging +implement implementing decrease decreasing +implement implementing describe describing +implement implementing discover discovering +implement implementing enhance enhancing +implement implementing fly flying +implement implementing generate generating +implement implementing go going +increase increasing invent inventing +increase increasing jump jumping +increase increasing listen listening +increase increasing look looking +increase increasing move moving +increase increasing play playing +increase increasing predict predicting +increase increasing read reading +increase increasing run running +increase increasing say saying +increase increasing scream screaming +increase increasing see seeing +increase increasing shuffle shuffling +increase increasing sing singing +increase increasing sit sitting +increase increasing slow slowing +increase increasing swim swimming +increase increasing think thinking +increase increasing vanish vanishing +increase increasing walk walking +increase increasing write writing +increase increasing code coding +increase increasing dance dancing +increase increasing debug debugging +increase increasing decrease decreasing +increase increasing describe describing +increase increasing discover discovering +increase increasing enhance enhancing +increase increasing fly flying +increase increasing generate generating +increase increasing go going +increase increasing implement implementing +invent inventing jump jumping +invent inventing listen listening +invent inventing look looking +invent inventing move moving +invent inventing play playing +invent inventing predict predicting +invent inventing read reading +invent inventing run running +invent inventing say saying +invent inventing scream screaming +invent inventing see seeing +invent inventing shuffle shuffling +invent inventing sing singing +invent inventing sit sitting +invent inventing slow slowing +invent inventing swim swimming +invent inventing think thinking +invent inventing vanish vanishing +invent inventing walk walking +invent inventing write writing +invent inventing code coding +invent inventing dance dancing +invent inventing debug debugging +invent inventing decrease decreasing +invent inventing describe describing +invent inventing discover discovering +invent inventing enhance enhancing +invent inventing fly flying +invent inventing generate generating +invent inventing go going +invent inventing implement implementing +invent inventing increase increasing +jump jumping listen listening +jump jumping look looking +jump jumping move moving +jump jumping play playing +jump jumping predict predicting +jump jumping read reading +jump jumping run running +jump jumping say saying +jump jumping scream screaming +jump jumping see seeing +jump jumping shuffle shuffling +jump jumping sing singing +jump jumping sit sitting +jump jumping slow slowing +jump jumping swim swimming +jump jumping think thinking +jump jumping vanish vanishing +jump jumping walk walking +jump jumping write writing +jump jumping code coding +jump jumping dance dancing +jump jumping debug debugging +jump jumping decrease decreasing +jump jumping describe describing +jump jumping discover discovering +jump jumping enhance enhancing +jump jumping fly flying +jump jumping generate generating +jump jumping go going +jump jumping implement implementing +jump jumping increase increasing +jump jumping invent inventing +listen listening look looking +listen listening move moving +listen listening play playing +listen listening predict predicting +listen listening read reading +listen listening run running +listen listening say saying +listen listening scream screaming +listen listening see seeing +listen listening shuffle shuffling +listen listening sing singing +listen listening sit sitting +listen listening slow slowing +listen listening swim swimming +listen listening think thinking +listen listening vanish vanishing +listen listening walk walking +listen listening write writing +listen listening code coding +listen listening dance dancing +listen listening debug debugging +listen listening decrease decreasing +listen listening describe describing +listen listening discover discovering +listen listening enhance enhancing +listen listening fly flying +listen listening generate generating +listen listening go going +listen listening implement implementing +listen listening increase increasing +listen listening invent inventing +listen listening jump jumping +look looking move moving +look looking play playing +look looking predict predicting +look looking read reading +look looking run running +look looking say saying +look looking scream screaming +look looking see seeing +look looking shuffle shuffling +look looking sing singing +look looking sit sitting +look looking slow slowing +look looking swim swimming +look looking think thinking +look looking vanish vanishing +look looking walk walking +look looking write writing +look looking code coding +look looking dance dancing +look looking debug debugging +look looking decrease decreasing +look looking describe describing +look looking discover discovering +look looking enhance enhancing +look looking fly flying +look looking generate generating +look looking go going +look looking implement implementing +look looking increase increasing +look looking invent inventing +look looking jump jumping +look looking listen listening +move moving play playing +move moving predict predicting +move moving read reading +move moving run running +move moving say saying +move moving scream screaming +move moving see seeing +move moving shuffle shuffling +move moving sing singing +move moving sit sitting +move moving slow slowing +move moving swim swimming +move moving think thinking +move moving vanish vanishing +move moving walk walking +move moving write writing +move moving code coding +move moving dance dancing +move moving debug debugging +move moving decrease decreasing +move moving describe describing +move moving discover discovering +move moving enhance enhancing +move moving fly flying +move moving generate generating +move moving go going +move moving implement implementing +move moving increase increasing +move moving invent inventing +move moving jump jumping +move moving listen listening +move moving look looking +play playing predict predicting +play playing read reading +play playing run running +play playing say saying +play playing scream screaming +play playing see seeing +play playing shuffle shuffling +play playing sing singing +play playing sit sitting +play playing slow slowing +play playing swim swimming +play playing think thinking +play playing vanish vanishing +play playing walk walking +play playing write writing +play playing code coding +play playing dance dancing +play playing debug debugging +play playing decrease decreasing +play playing describe describing +play playing discover discovering +play playing enhance enhancing +play playing fly flying +play playing generate generating +play playing go going +play playing implement implementing +play playing increase increasing +play playing invent inventing +play playing jump jumping +play playing listen listening +play playing look looking +play playing move moving +predict predicting read reading +predict predicting run running +predict predicting say saying +predict predicting scream screaming +predict predicting see seeing +predict predicting shuffle shuffling +predict predicting sing singing +predict predicting sit sitting +predict predicting slow slowing +predict predicting swim swimming +predict predicting think thinking +predict predicting vanish vanishing +predict predicting walk walking +predict predicting write writing +predict predicting code coding +predict predicting dance dancing +predict predicting debug debugging +predict predicting decrease decreasing +predict predicting describe describing +predict predicting discover discovering +predict predicting enhance enhancing +predict predicting fly flying +predict predicting generate generating +predict predicting go going +predict predicting implement implementing +predict predicting increase increasing +predict predicting invent inventing +predict predicting jump jumping +predict predicting listen listening +predict predicting look looking +predict predicting move moving +predict predicting play playing +read reading run running +read reading say saying +read reading scream screaming +read reading see seeing +read reading shuffle shuffling +read reading sing singing +read reading sit sitting +read reading slow slowing +read reading swim swimming +read reading think thinking +read reading vanish vanishing +read reading walk walking +read reading write writing +read reading code coding +read reading dance dancing +read reading debug debugging +read reading decrease decreasing +read reading describe describing +read reading discover discovering +read reading enhance enhancing +read reading fly flying +read reading generate generating +read reading go going +read reading implement implementing +read reading increase increasing +read reading invent inventing +read reading jump jumping +read reading listen listening +read reading look looking +read reading move moving +read reading play playing +read reading predict predicting +run running say saying +run running scream screaming +run running see seeing +run running shuffle shuffling +run running sing singing +run running sit sitting +run running slow slowing +run running swim swimming +run running think thinking +run running vanish vanishing +run running walk walking +run running write writing +run running code coding +run running dance dancing +run running debug debugging +run running decrease decreasing +run running describe describing +run running discover discovering +run running enhance enhancing +run running fly flying +run running generate generating +run running go going +run running implement implementing +run running increase increasing +run running invent inventing +run running jump jumping +run running listen listening +run running look looking +run running move moving +run running play playing +run running predict predicting +run running read reading +say saying scream screaming +say saying see seeing +say saying shuffle shuffling +say saying sing singing +say saying sit sitting +say saying slow slowing +say saying swim swimming +say saying think thinking +say saying vanish vanishing +say saying walk walking +say saying write writing +say saying code coding +say saying dance dancing +say saying debug debugging +say saying decrease decreasing +say saying describe describing +say saying discover discovering +say saying enhance enhancing +say saying fly flying +say saying generate generating +say saying go going +say saying implement implementing +say saying increase increasing +say saying invent inventing +say saying jump jumping +say saying listen listening +say saying look looking +say saying move moving +say saying play playing +say saying predict predicting +say saying read reading +say saying run running +scream screaming see seeing +scream screaming shuffle shuffling +scream screaming sing singing +scream screaming sit sitting +scream screaming slow slowing +scream screaming swim swimming +scream screaming think thinking +scream screaming vanish vanishing +scream screaming walk walking +scream screaming write writing +scream screaming code coding +scream screaming dance dancing +scream screaming debug debugging +scream screaming decrease decreasing +scream screaming describe describing +scream screaming discover discovering +scream screaming enhance enhancing +scream screaming fly flying +scream screaming generate generating +scream screaming go going +scream screaming implement implementing +scream screaming increase increasing +scream screaming invent inventing +scream screaming jump jumping +scream screaming listen listening +scream screaming look looking +scream screaming move moving +scream screaming play playing +scream screaming predict predicting +scream screaming read reading +scream screaming run running +scream screaming say saying +see seeing shuffle shuffling +see seeing sing singing +see seeing sit sitting +see seeing slow slowing +see seeing swim swimming +see seeing think thinking +see seeing vanish vanishing +see seeing walk walking +see seeing write writing +see seeing code coding +see seeing dance dancing +see seeing debug debugging +see seeing decrease decreasing +see seeing describe describing +see seeing discover discovering +see seeing enhance enhancing +see seeing fly flying +see seeing generate generating +see seeing go going +see seeing implement implementing +see seeing increase increasing +see seeing invent inventing +see seeing jump jumping +see seeing listen listening +see seeing look looking +see seeing move moving +see seeing play playing +see seeing predict predicting +see seeing read reading +see seeing run running +see seeing say saying +see seeing scream screaming +shuffle shuffling sing singing +shuffle shuffling sit sitting +shuffle shuffling slow slowing +shuffle shuffling swim swimming +shuffle shuffling think thinking +shuffle shuffling vanish vanishing +shuffle shuffling walk walking +shuffle shuffling write writing +shuffle shuffling code coding +shuffle shuffling dance dancing +shuffle shuffling debug debugging +shuffle shuffling decrease decreasing +shuffle shuffling describe describing +shuffle shuffling discover discovering +shuffle shuffling enhance enhancing +shuffle shuffling fly flying +shuffle shuffling generate generating +shuffle shuffling go going +shuffle shuffling implement implementing +shuffle shuffling increase increasing +shuffle shuffling invent inventing +shuffle shuffling jump jumping +shuffle shuffling listen listening +shuffle shuffling look looking +shuffle shuffling move moving +shuffle shuffling play playing +shuffle shuffling predict predicting +shuffle shuffling read reading +shuffle shuffling run running +shuffle shuffling say saying +shuffle shuffling scream screaming +shuffle shuffling see seeing +sing singing sit sitting +sing singing slow slowing +sing singing swim swimming +sing singing think thinking +sing singing vanish vanishing +sing singing walk walking +sing singing write writing +sing singing code coding +sing singing dance dancing +sing singing debug debugging +sing singing decrease decreasing +sing singing describe describing +sing singing discover discovering +sing singing enhance enhancing +sing singing fly flying +sing singing generate generating +sing singing go going +sing singing implement implementing +sing singing increase increasing +sing singing invent inventing +sing singing jump jumping +sing singing listen listening +sing singing look looking +sing singing move moving +sing singing play playing +sing singing predict predicting +sing singing read reading +sing singing run running +sing singing say saying +sing singing scream screaming +sing singing see seeing +sing singing shuffle shuffling +sit sitting slow slowing +sit sitting swim swimming +sit sitting think thinking +sit sitting vanish vanishing +sit sitting walk walking +sit sitting write writing +sit sitting code coding +sit sitting dance dancing +sit sitting debug debugging +sit sitting decrease decreasing +sit sitting describe describing +sit sitting discover discovering +sit sitting enhance enhancing +sit sitting fly flying +sit sitting generate generating +sit sitting go going +sit sitting implement implementing +sit sitting increase increasing +sit sitting invent inventing +sit sitting jump jumping +sit sitting listen listening +sit sitting look looking +sit sitting move moving +sit sitting play playing +sit sitting predict predicting +sit sitting read reading +sit sitting run running +sit sitting say saying +sit sitting scream screaming +sit sitting see seeing +sit sitting shuffle shuffling +sit sitting sing singing +slow slowing swim swimming +slow slowing think thinking +slow slowing vanish vanishing +slow slowing walk walking +slow slowing write writing +slow slowing code coding +slow slowing dance dancing +slow slowing debug debugging +slow slowing decrease decreasing +slow slowing describe describing +slow slowing discover discovering +slow slowing enhance enhancing +slow slowing fly flying +slow slowing generate generating +slow slowing go going +slow slowing implement implementing +slow slowing increase increasing +slow slowing invent inventing +slow slowing jump jumping +slow slowing listen listening +slow slowing look looking +slow slowing move moving +slow slowing play playing +slow slowing predict predicting +slow slowing read reading +slow slowing run running +slow slowing say saying +slow slowing scream screaming +slow slowing see seeing +slow slowing shuffle shuffling +slow slowing sing singing +slow slowing sit sitting +swim swimming think thinking +swim swimming vanish vanishing +swim swimming walk walking +swim swimming write writing +swim swimming code coding +swim swimming dance dancing +swim swimming debug debugging +swim swimming decrease decreasing +swim swimming describe describing +swim swimming discover discovering +swim swimming enhance enhancing +swim swimming fly flying +swim swimming generate generating +swim swimming go going +swim swimming implement implementing +swim swimming increase increasing +swim swimming invent inventing +swim swimming jump jumping +swim swimming listen listening +swim swimming look looking +swim swimming move moving +swim swimming play playing +swim swimming predict predicting +swim swimming read reading +swim swimming run running +swim swimming say saying +swim swimming scream screaming +swim swimming see seeing +swim swimming shuffle shuffling +swim swimming sing singing +swim swimming sit sitting +swim swimming slow slowing +think thinking vanish vanishing +think thinking walk walking +think thinking write writing +think thinking code coding +think thinking dance dancing +think thinking debug debugging +think thinking decrease decreasing +think thinking describe describing +think thinking discover discovering +think thinking enhance enhancing +think thinking fly flying +think thinking generate generating +think thinking go going +think thinking implement implementing +think thinking increase increasing +think thinking invent inventing +think thinking jump jumping +think thinking listen listening +think thinking look looking +think thinking move moving +think thinking play playing +think thinking predict predicting +think thinking read reading +think thinking run running +think thinking say saying +think thinking scream screaming +think thinking see seeing +think thinking shuffle shuffling +think thinking sing singing +think thinking sit sitting +think thinking slow slowing +think thinking swim swimming +vanish vanishing walk walking +vanish vanishing write writing +vanish vanishing code coding +vanish vanishing dance dancing +vanish vanishing debug debugging +vanish vanishing decrease decreasing +vanish vanishing describe describing +vanish vanishing discover discovering +vanish vanishing enhance enhancing +vanish vanishing fly flying +vanish vanishing generate generating +vanish vanishing go going +vanish vanishing implement implementing +vanish vanishing increase increasing +vanish vanishing invent inventing +vanish vanishing jump jumping +vanish vanishing listen listening +vanish vanishing look looking +vanish vanishing move moving +vanish vanishing play playing +vanish vanishing predict predicting +vanish vanishing read reading +vanish vanishing run running +vanish vanishing say saying +vanish vanishing scream screaming +vanish vanishing see seeing +vanish vanishing shuffle shuffling +vanish vanishing sing singing +vanish vanishing sit sitting +vanish vanishing slow slowing +vanish vanishing swim swimming +vanish vanishing think thinking +walk walking write writing +walk walking code coding +walk walking dance dancing +walk walking debug debugging +walk walking decrease decreasing +walk walking describe describing +walk walking discover discovering +walk walking enhance enhancing +walk walking fly flying +walk walking generate generating +walk walking go going +walk walking implement implementing +walk walking increase increasing +walk walking invent inventing +walk walking jump jumping +walk walking listen listening +walk walking look looking +walk walking move moving +walk walking play playing +walk walking predict predicting +walk walking read reading +walk walking run running +walk walking say saying +walk walking scream screaming +walk walking see seeing +walk walking shuffle shuffling +walk walking sing singing +walk walking sit sitting +walk walking slow slowing +walk walking swim swimming +walk walking think thinking +walk walking vanish vanishing +write writing code coding +write writing dance dancing +write writing debug debugging +write writing decrease decreasing +write writing describe describing +write writing discover discovering +write writing enhance enhancing +write writing fly flying +write writing generate generating +write writing go going +write writing implement implementing +write writing increase increasing +write writing invent inventing +write writing jump jumping +write writing listen listening +write writing look looking +write writing move moving +write writing play playing +write writing predict predicting +write writing read reading +write writing run running +write writing say saying +write writing scream screaming +write writing see seeing +write writing shuffle shuffling +write writing sing singing +write writing sit sitting +write writing slow slowing +write writing swim swimming +write writing think thinking +write writing vanish vanishing +write writing walk walking +: gram6-nationality-adjective +Albania Albanian Argentina Argentinean +Albania Albanian Australia Australian +Albania Albanian Austria Austrian +Albania Albanian Belarus Belorussian +Albania Albanian Brazil Brazilian +Albania Albanian Bulgaria Bulgarian +Albania Albanian Cambodia Cambodian +Albania Albanian Chile Chilean +Albania Albanian China Chinese +Albania Albanian Colombia Colombian +Albania Albanian Croatia Croatian +Albania Albanian Denmark Danish +Albania Albanian Egypt Egyptian +Albania Albanian England English +Albania Albanian France French +Albania Albanian Germany German +Albania Albanian Greece Greek +Albania Albanian Iceland Icelandic +Albania Albanian India Indian +Albania Albanian Ireland Irish +Albania Albanian Israel Israeli +Albania Albanian Italy Italian +Albania Albanian Japan Japanese +Albania Albanian Korea Korean +Albania Albanian Macedonia Macedonian +Albania Albanian Malta Maltese +Albania Albanian Mexico Mexican +Albania Albanian Moldova Moldovan +Albania Albanian Netherlands Dutch +Albania Albanian Norway Norwegian +Albania Albanian Peru Peruvian +Albania Albanian Poland Polish +Albania Albanian Portugal Portuguese +Albania Albanian Russia Russian +Albania Albanian Slovakia Slovakian +Albania Albanian Spain Spanish +Albania Albanian Sweden Swedish +Albania Albanian Switzerland Swiss +Albania Albanian Thailand Thai +Argentina Argentinean Australia Australian +Argentina Argentinean Austria Austrian +Argentina Argentinean Belarus Belorussian +Argentina Argentinean Brazil Brazilian +Argentina Argentinean Bulgaria Bulgarian +Argentina Argentinean Cambodia Cambodian +Argentina Argentinean Chile Chilean +Argentina Argentinean China Chinese +Argentina Argentinean Colombia Colombian +Argentina Argentinean Croatia Croatian +Argentina Argentinean Denmark Danish +Argentina Argentinean Egypt Egyptian +Argentina Argentinean England English +Argentina Argentinean France French +Argentina Argentinean Germany German +Argentina Argentinean Greece Greek +Argentina Argentinean Iceland Icelandic +Argentina Argentinean India Indian +Argentina Argentinean Ireland Irish +Argentina Argentinean Israel Israeli +Argentina Argentinean Italy Italian +Argentina Argentinean Japan Japanese +Argentina Argentinean Korea Korean +Argentina Argentinean Macedonia Macedonian +Argentina Argentinean Malta Maltese +Argentina Argentinean Mexico Mexican +Argentina Argentinean Moldova Moldovan +Argentina Argentinean Netherlands Dutch +Argentina Argentinean Norway Norwegian +Argentina Argentinean Peru Peruvian +Argentina Argentinean Poland Polish +Argentina Argentinean Portugal Portuguese +Argentina Argentinean Russia Russian +Argentina Argentinean Slovakia Slovakian +Argentina Argentinean Spain Spanish +Argentina Argentinean Sweden Swedish +Argentina Argentinean Switzerland Swiss +Argentina Argentinean Thailand Thai +Argentina Argentinean Ukraine Ukrainian +Australia Australian Austria Austrian +Australia Australian Belarus Belorussian +Australia Australian Brazil Brazilian +Australia Australian Bulgaria Bulgarian +Australia Australian Cambodia Cambodian +Australia Australian Chile Chilean +Australia Australian China Chinese +Australia Australian Colombia Colombian +Australia Australian Croatia Croatian +Australia Australian Denmark Danish +Australia Australian Egypt Egyptian +Australia Australian England English +Australia Australian France French +Australia Australian Germany German +Australia Australian Greece Greek +Australia Australian Iceland Icelandic +Australia Australian India Indian +Australia Australian Ireland Irish +Australia Australian Israel Israeli +Australia Australian Italy Italian +Australia Australian Japan Japanese +Australia Australian Korea Korean +Australia Australian Macedonia Macedonian +Australia Australian Malta Maltese +Australia Australian Mexico Mexican +Australia Australian Moldova Moldovan +Australia Australian Netherlands Dutch +Australia Australian Norway Norwegian +Australia Australian Peru Peruvian +Australia Australian Poland Polish +Australia Australian Portugal Portuguese +Australia Australian Russia Russian +Australia Australian Slovakia Slovakian +Australia Australian Spain Spanish +Australia Australian Sweden Swedish +Australia Australian Switzerland Swiss +Australia Australian Thailand Thai +Australia Australian Ukraine Ukrainian +Australia Australian Albania Albanian +Austria Austrian Belarus Belorussian +Austria Austrian Brazil Brazilian +Austria Austrian Bulgaria Bulgarian +Austria Austrian Cambodia Cambodian +Austria Austrian Chile Chilean +Austria Austrian China Chinese +Austria Austrian Colombia Colombian +Austria Austrian Croatia Croatian +Austria Austrian Denmark Danish +Austria Austrian Egypt Egyptian +Austria Austrian England English +Austria Austrian France French +Austria Austrian Germany German +Austria Austrian Greece Greek +Austria Austrian Iceland Icelandic +Austria Austrian India Indian +Austria Austrian Ireland Irish +Austria Austrian Israel Israeli +Austria Austrian Italy Italian +Austria Austrian Japan Japanese +Austria Austrian Korea Korean +Austria Austrian Macedonia Macedonian +Austria Austrian Malta Maltese +Austria Austrian Mexico Mexican +Austria Austrian Moldova Moldovan +Austria Austrian Netherlands Dutch +Austria Austrian Norway Norwegian +Austria Austrian Peru Peruvian +Austria Austrian Poland Polish +Austria Austrian Portugal Portuguese +Austria Austrian Russia Russian +Austria Austrian Slovakia Slovakian +Austria Austrian Spain Spanish +Austria Austrian Sweden Swedish +Austria Austrian Switzerland Swiss +Austria Austrian Thailand Thai +Austria Austrian Ukraine Ukrainian +Austria Austrian Albania Albanian +Austria Austrian Argentina Argentinean +Belarus Belorussian Brazil Brazilian +Belarus Belorussian Bulgaria Bulgarian +Belarus Belorussian Cambodia Cambodian +Belarus Belorussian Chile Chilean +Belarus Belorussian China Chinese +Belarus Belorussian Colombia Colombian +Belarus Belorussian Croatia Croatian +Belarus Belorussian Denmark Danish +Belarus Belorussian Egypt Egyptian +Belarus Belorussian England English +Belarus Belorussian France French +Belarus Belorussian Germany German +Belarus Belorussian Greece Greek +Belarus Belorussian Iceland Icelandic +Belarus Belorussian India Indian +Belarus Belorussian Ireland Irish +Belarus Belorussian Israel Israeli +Belarus Belorussian Italy Italian +Belarus Belorussian Japan Japanese +Belarus Belorussian Korea Korean +Belarus Belorussian Macedonia Macedonian +Belarus Belorussian Malta Maltese +Belarus Belorussian Mexico Mexican +Belarus Belorussian Moldova Moldovan +Belarus Belorussian Netherlands Dutch +Belarus Belorussian Norway Norwegian +Belarus Belorussian Peru Peruvian +Belarus Belorussian Poland Polish +Belarus Belorussian Portugal Portuguese +Belarus Belorussian Russia Russian +Belarus Belorussian Slovakia Slovakian +Belarus Belorussian Spain Spanish +Belarus Belorussian Sweden Swedish +Belarus Belorussian Switzerland Swiss +Belarus Belorussian Thailand Thai +Belarus Belorussian Ukraine Ukrainian +Belarus Belorussian Albania Albanian +Belarus Belorussian Argentina Argentinean +Belarus Belorussian Australia Australian +Brazil Brazilian Bulgaria Bulgarian +Brazil Brazilian Cambodia Cambodian +Brazil Brazilian Chile Chilean +Brazil Brazilian China Chinese +Brazil Brazilian Colombia Colombian +Brazil Brazilian Croatia Croatian +Brazil Brazilian Denmark Danish +Brazil Brazilian Egypt Egyptian +Brazil Brazilian England English +Brazil Brazilian France French +Brazil Brazilian Germany German +Brazil Brazilian Greece Greek +Brazil Brazilian Iceland Icelandic +Brazil Brazilian India Indian +Brazil Brazilian Ireland Irish +Brazil Brazilian Israel Israeli +Brazil Brazilian Italy Italian +Brazil Brazilian Japan Japanese +Brazil Brazilian Korea Korean +Brazil Brazilian Macedonia Macedonian +Brazil Brazilian Malta Maltese +Brazil Brazilian Mexico Mexican +Brazil Brazilian Moldova Moldovan +Brazil Brazilian Netherlands Dutch +Brazil Brazilian Norway Norwegian +Brazil Brazilian Peru Peruvian +Brazil Brazilian Poland Polish +Brazil Brazilian Portugal Portuguese +Brazil Brazilian Russia Russian +Brazil Brazilian Slovakia Slovakian +Brazil Brazilian Spain Spanish +Brazil Brazilian Sweden Swedish +Brazil Brazilian Switzerland Swiss +Brazil Brazilian Thailand Thai +Brazil Brazilian Ukraine Ukrainian +Brazil Brazilian Albania Albanian +Brazil Brazilian Argentina Argentinean +Brazil Brazilian Australia Australian +Brazil Brazilian Austria Austrian +Bulgaria Bulgarian Cambodia Cambodian +Bulgaria Bulgarian Chile Chilean +Bulgaria Bulgarian China Chinese +Bulgaria Bulgarian Colombia Colombian +Bulgaria Bulgarian Croatia Croatian +Bulgaria Bulgarian Denmark Danish +Bulgaria Bulgarian Egypt Egyptian +Bulgaria Bulgarian England English +Bulgaria Bulgarian France French +Bulgaria Bulgarian Germany German +Bulgaria Bulgarian Greece Greek +Bulgaria Bulgarian Iceland Icelandic +Bulgaria Bulgarian India Indian +Bulgaria Bulgarian Ireland Irish +Bulgaria Bulgarian Israel Israeli +Bulgaria Bulgarian Italy Italian +Bulgaria Bulgarian Japan Japanese +Bulgaria Bulgarian Korea Korean +Bulgaria Bulgarian Macedonia Macedonian +Bulgaria Bulgarian Malta Maltese +Bulgaria Bulgarian Mexico Mexican +Bulgaria Bulgarian Moldova Moldovan +Bulgaria Bulgarian Netherlands Dutch +Bulgaria Bulgarian Norway Norwegian +Bulgaria Bulgarian Peru Peruvian +Bulgaria Bulgarian Poland Polish +Bulgaria Bulgarian Portugal Portuguese +Bulgaria Bulgarian Russia Russian +Bulgaria Bulgarian Slovakia Slovakian +Bulgaria Bulgarian Spain Spanish +Bulgaria Bulgarian Sweden Swedish +Bulgaria Bulgarian Switzerland Swiss +Bulgaria Bulgarian Thailand Thai +Bulgaria Bulgarian Ukraine Ukrainian +Bulgaria Bulgarian Albania Albanian +Bulgaria Bulgarian Argentina Argentinean +Bulgaria Bulgarian Australia Australian +Bulgaria Bulgarian Austria Austrian +Bulgaria Bulgarian Belarus Belorussian +Cambodia Cambodian Chile Chilean +Cambodia Cambodian China Chinese +Cambodia Cambodian Colombia Colombian +Cambodia Cambodian Croatia Croatian +Cambodia Cambodian Denmark Danish +Cambodia Cambodian Egypt Egyptian +Cambodia Cambodian England English +Cambodia Cambodian France French +Cambodia Cambodian Germany German +Cambodia Cambodian Greece Greek +Cambodia Cambodian Iceland Icelandic +Cambodia Cambodian India Indian +Cambodia Cambodian Ireland Irish +Cambodia Cambodian Israel Israeli +Cambodia Cambodian Italy Italian +Cambodia Cambodian Japan Japanese +Cambodia Cambodian Korea Korean +Cambodia Cambodian Macedonia Macedonian +Cambodia Cambodian Malta Maltese +Cambodia Cambodian Mexico Mexican +Cambodia Cambodian Moldova Moldovan +Cambodia Cambodian Netherlands Dutch +Cambodia Cambodian Norway Norwegian +Cambodia Cambodian Peru Peruvian +Cambodia Cambodian Poland Polish +Cambodia Cambodian Portugal Portuguese +Cambodia Cambodian Russia Russian +Cambodia Cambodian Slovakia Slovakian +Cambodia Cambodian Spain Spanish +Cambodia Cambodian Sweden Swedish +Cambodia Cambodian Switzerland Swiss +Cambodia Cambodian Thailand Thai +Cambodia Cambodian Ukraine Ukrainian +Cambodia Cambodian Albania Albanian +Cambodia Cambodian Argentina Argentinean +Cambodia Cambodian Australia Australian +Cambodia Cambodian Austria Austrian +Cambodia Cambodian Belarus Belorussian +Cambodia Cambodian Brazil Brazilian +Chile Chilean China Chinese +Chile Chilean Colombia Colombian +Chile Chilean Croatia Croatian +Chile Chilean Denmark Danish +Chile Chilean Egypt Egyptian +Chile Chilean England English +Chile Chilean France French +Chile Chilean Germany German +Chile Chilean Greece Greek +Chile Chilean Iceland Icelandic +Chile Chilean India Indian +Chile Chilean Ireland Irish +Chile Chilean Israel Israeli +Chile Chilean Italy Italian +Chile Chilean Japan Japanese +Chile Chilean Korea Korean +Chile Chilean Macedonia Macedonian +Chile Chilean Malta Maltese +Chile Chilean Mexico Mexican +Chile Chilean Moldova Moldovan +Chile Chilean Netherlands Dutch +Chile Chilean Norway Norwegian +Chile Chilean Peru Peruvian +Chile Chilean Poland Polish +Chile Chilean Portugal Portuguese +Chile Chilean Russia Russian +Chile Chilean Slovakia Slovakian +Chile Chilean Spain Spanish +Chile Chilean Sweden Swedish +Chile Chilean Switzerland Swiss +Chile Chilean Thailand Thai +Chile Chilean Ukraine Ukrainian +Chile Chilean Albania Albanian +Chile Chilean Argentina Argentinean +Chile Chilean Australia Australian +Chile Chilean Austria Austrian +Chile Chilean Belarus Belorussian +Chile Chilean Brazil Brazilian +Chile Chilean Bulgaria Bulgarian +China Chinese Colombia Colombian +China Chinese Croatia Croatian +China Chinese Denmark Danish +China Chinese Egypt Egyptian +China Chinese England English +China Chinese France French +China Chinese Germany German +China Chinese Greece Greek +China Chinese Iceland Icelandic +China Chinese India Indian +China Chinese Ireland Irish +China Chinese Israel Israeli +China Chinese Italy Italian +China Chinese Japan Japanese +China Chinese Korea Korean +China Chinese Macedonia Macedonian +China Chinese Malta Maltese +China Chinese Mexico Mexican +China Chinese Moldova Moldovan +China Chinese Netherlands Dutch +China Chinese Norway Norwegian +China Chinese Peru Peruvian +China Chinese Poland Polish +China Chinese Portugal Portuguese +China Chinese Russia Russian +China Chinese Slovakia Slovakian +China Chinese Spain Spanish +China Chinese Sweden Swedish +China Chinese Switzerland Swiss +China Chinese Thailand Thai +China Chinese Ukraine Ukrainian +China Chinese Albania Albanian +China Chinese Argentina Argentinean +China Chinese Australia Australian +China Chinese Austria Austrian +China Chinese Belarus Belorussian +China Chinese Brazil Brazilian +China Chinese Bulgaria Bulgarian +China Chinese Cambodia Cambodian +Colombia Colombian Croatia Croatian +Colombia Colombian Denmark Danish +Colombia Colombian Egypt Egyptian +Colombia Colombian England English +Colombia Colombian France French +Colombia Colombian Germany German +Colombia Colombian Greece Greek +Colombia Colombian Iceland Icelandic +Colombia Colombian India Indian +Colombia Colombian Ireland Irish +Colombia Colombian Israel Israeli +Colombia Colombian Italy Italian +Colombia Colombian Japan Japanese +Colombia Colombian Korea Korean +Colombia Colombian Macedonia Macedonian +Colombia Colombian Malta Maltese +Colombia Colombian Mexico Mexican +Colombia Colombian Moldova Moldovan +Colombia Colombian Netherlands Dutch +Colombia Colombian Norway Norwegian +Colombia Colombian Peru Peruvian +Colombia Colombian Poland Polish +Colombia Colombian Portugal Portuguese +Colombia Colombian Russia Russian +Colombia Colombian Slovakia Slovakian +Colombia Colombian Spain Spanish +Colombia Colombian Sweden Swedish +Colombia Colombian Switzerland Swiss +Colombia Colombian Thailand Thai +Colombia Colombian Ukraine Ukrainian +Colombia Colombian Albania Albanian +Colombia Colombian Argentina Argentinean +Colombia Colombian Australia Australian +Colombia Colombian Austria Austrian +Colombia Colombian Belarus Belorussian +Colombia Colombian Brazil Brazilian +Colombia Colombian Bulgaria Bulgarian +Colombia Colombian Cambodia Cambodian +Colombia Colombian Chile Chilean +Croatia Croatian Denmark Danish +Croatia Croatian Egypt Egyptian +Croatia Croatian England English +Croatia Croatian France French +Croatia Croatian Germany German +Croatia Croatian Greece Greek +Croatia Croatian Iceland Icelandic +Croatia Croatian India Indian +Croatia Croatian Ireland Irish +Croatia Croatian Israel Israeli +Croatia Croatian Italy Italian +Croatia Croatian Japan Japanese +Croatia Croatian Korea Korean +Croatia Croatian Macedonia Macedonian +Croatia Croatian Malta Maltese +Croatia Croatian Mexico Mexican +Croatia Croatian Moldova Moldovan +Croatia Croatian Netherlands Dutch +Croatia Croatian Norway Norwegian +Croatia Croatian Peru Peruvian +Croatia Croatian Poland Polish +Croatia Croatian Portugal Portuguese +Croatia Croatian Russia Russian +Croatia Croatian Slovakia Slovakian +Croatia Croatian Spain Spanish +Croatia Croatian Sweden Swedish +Croatia Croatian Switzerland Swiss +Croatia Croatian Thailand Thai +Croatia Croatian Ukraine Ukrainian +Croatia Croatian Albania Albanian +Croatia Croatian Argentina Argentinean +Croatia Croatian Australia Australian +Croatia Croatian Austria Austrian +Croatia Croatian Belarus Belorussian +Croatia Croatian Brazil Brazilian +Croatia Croatian Bulgaria Bulgarian +Croatia Croatian Cambodia Cambodian +Croatia Croatian Chile Chilean +Croatia Croatian China Chinese +Denmark Danish Egypt Egyptian +Denmark Danish England English +Denmark Danish France French +Denmark Danish Germany German +Denmark Danish Greece Greek +Denmark Danish Iceland Icelandic +Denmark Danish India Indian +Denmark Danish Ireland Irish +Denmark Danish Israel Israeli +Denmark Danish Italy Italian +Denmark Danish Japan Japanese +Denmark Danish Korea Korean +Denmark Danish Macedonia Macedonian +Denmark Danish Malta Maltese +Denmark Danish Mexico Mexican +Denmark Danish Moldova Moldovan +Denmark Danish Netherlands Dutch +Denmark Danish Norway Norwegian +Denmark Danish Peru Peruvian +Denmark Danish Poland Polish +Denmark Danish Portugal Portuguese +Denmark Danish Russia Russian +Denmark Danish Slovakia Slovakian +Denmark Danish Spain Spanish +Denmark Danish Sweden Swedish +Denmark Danish Switzerland Swiss +Denmark Danish Thailand Thai +Denmark Danish Ukraine Ukrainian +Denmark Danish Albania Albanian +Denmark Danish Argentina Argentinean +Denmark Danish Australia Australian +Denmark Danish Austria Austrian +Denmark Danish Belarus Belorussian +Denmark Danish Brazil Brazilian +Denmark Danish Bulgaria Bulgarian +Denmark Danish Cambodia Cambodian +Denmark Danish Chile Chilean +Denmark Danish China Chinese +Denmark Danish Colombia Colombian +Egypt Egyptian England English +Egypt Egyptian France French +Egypt Egyptian Germany German +Egypt Egyptian Greece Greek +Egypt Egyptian Iceland Icelandic +Egypt Egyptian India Indian +Egypt Egyptian Ireland Irish +Egypt Egyptian Israel Israeli +Egypt Egyptian Italy Italian +Egypt Egyptian Japan Japanese +Egypt Egyptian Korea Korean +Egypt Egyptian Macedonia Macedonian +Egypt Egyptian Malta Maltese +Egypt Egyptian Mexico Mexican +Egypt Egyptian Moldova Moldovan +Egypt Egyptian Netherlands Dutch +Egypt Egyptian Norway Norwegian +Egypt Egyptian Peru Peruvian +Egypt Egyptian Poland Polish +Egypt Egyptian Portugal Portuguese +Egypt Egyptian Russia Russian +Egypt Egyptian Slovakia Slovakian +Egypt Egyptian Spain Spanish +Egypt Egyptian Sweden Swedish +Egypt Egyptian Switzerland Swiss +Egypt Egyptian Thailand Thai +Egypt Egyptian Ukraine Ukrainian +Egypt Egyptian Albania Albanian +Egypt Egyptian Argentina Argentinean +Egypt Egyptian Australia Australian +Egypt Egyptian Austria Austrian +Egypt Egyptian Belarus Belorussian +Egypt Egyptian Brazil Brazilian +Egypt Egyptian Bulgaria Bulgarian +Egypt Egyptian Cambodia Cambodian +Egypt Egyptian Chile Chilean +Egypt Egyptian China Chinese +Egypt Egyptian Colombia Colombian +Egypt Egyptian Croatia Croatian +England English France French +England English Germany German +England English Greece Greek +England English Iceland Icelandic +England English India Indian +England English Ireland Irish +England English Israel Israeli +England English Italy Italian +England English Japan Japanese +England English Korea Korean +England English Macedonia Macedonian +England English Malta Maltese +England English Mexico Mexican +England English Moldova Moldovan +England English Netherlands Dutch +England English Norway Norwegian +England English Peru Peruvian +England English Poland Polish +England English Portugal Portuguese +England English Russia Russian +England English Slovakia Slovakian +England English Spain Spanish +England English Sweden Swedish +England English Switzerland Swiss +England English Thailand Thai +England English Ukraine Ukrainian +England English Albania Albanian +England English Argentina Argentinean +England English Australia Australian +England English Austria Austrian +England English Belarus Belorussian +England English Brazil Brazilian +England English Bulgaria Bulgarian +England English Cambodia Cambodian +England English Chile Chilean +England English China Chinese +England English Colombia Colombian +England English Croatia Croatian +England English Denmark Danish +France French Germany German +France French Greece Greek +France French Iceland Icelandic +France French India Indian +France French Ireland Irish +France French Israel Israeli +France French Italy Italian +France French Japan Japanese +France French Korea Korean +France French Macedonia Macedonian +France French Malta Maltese +France French Mexico Mexican +France French Moldova Moldovan +France French Netherlands Dutch +France French Norway Norwegian +France French Peru Peruvian +France French Poland Polish +France French Portugal Portuguese +France French Russia Russian +France French Slovakia Slovakian +France French Spain Spanish +France French Sweden Swedish +France French Switzerland Swiss +France French Thailand Thai +France French Ukraine Ukrainian +France French Albania Albanian +France French Argentina Argentinean +France French Australia Australian +France French Austria Austrian +France French Belarus Belorussian +France French Brazil Brazilian +France French Bulgaria Bulgarian +France French Cambodia Cambodian +France French Chile Chilean +France French China Chinese +France French Colombia Colombian +France French Croatia Croatian +France French Denmark Danish +France French Egypt Egyptian +Germany German Greece Greek +Germany German Iceland Icelandic +Germany German India Indian +Germany German Ireland Irish +Germany German Israel Israeli +Germany German Italy Italian +Germany German Japan Japanese +Germany German Korea Korean +Germany German Macedonia Macedonian +Germany German Malta Maltese +Germany German Mexico Mexican +Germany German Moldova Moldovan +Germany German Netherlands Dutch +Germany German Norway Norwegian +Germany German Peru Peruvian +Germany German Poland Polish +Germany German Portugal Portuguese +Germany German Russia Russian +Germany German Slovakia Slovakian +Germany German Spain Spanish +Germany German Sweden Swedish +Germany German Switzerland Swiss +Germany German Thailand Thai +Germany German Ukraine Ukrainian +Germany German Albania Albanian +Germany German Argentina Argentinean +Germany German Australia Australian +Germany German Austria Austrian +Germany German Belarus Belorussian +Germany German Brazil Brazilian +Germany German Bulgaria Bulgarian +Germany German Cambodia Cambodian +Germany German Chile Chilean +Germany German China Chinese +Germany German Colombia Colombian +Germany German Croatia Croatian +Germany German Denmark Danish +Germany German Egypt Egyptian +Germany German England English +Greece Greek Iceland Icelandic +Greece Greek India Indian +Greece Greek Ireland Irish +Greece Greek Israel Israeli +Greece Greek Italy Italian +Greece Greek Japan Japanese +Greece Greek Korea Korean +Greece Greek Macedonia Macedonian +Greece Greek Malta Maltese +Greece Greek Mexico Mexican +Greece Greek Moldova Moldovan +Greece Greek Netherlands Dutch +Greece Greek Norway Norwegian +Greece Greek Peru Peruvian +Greece Greek Poland Polish +Greece Greek Portugal Portuguese +Greece Greek Russia Russian +Greece Greek Slovakia Slovakian +Greece Greek Spain Spanish +Greece Greek Sweden Swedish +Greece Greek Switzerland Swiss +Greece Greek Thailand Thai +Greece Greek Ukraine Ukrainian +Greece Greek Albania Albanian +Greece Greek Argentina Argentinean +Greece Greek Australia Australian +Greece Greek Austria Austrian +Greece Greek Belarus Belorussian +Greece Greek Brazil Brazilian +Greece Greek Bulgaria Bulgarian +Greece Greek Cambodia Cambodian +Greece Greek Chile Chilean +Greece Greek China Chinese +Greece Greek Colombia Colombian +Greece Greek Croatia Croatian +Greece Greek Denmark Danish +Greece Greek Egypt Egyptian +Greece Greek England English +Greece Greek France French +Iceland Icelandic India Indian +Iceland Icelandic Ireland Irish +Iceland Icelandic Israel Israeli +Iceland Icelandic Italy Italian +Iceland Icelandic Japan Japanese +Iceland Icelandic Korea Korean +Iceland Icelandic Macedonia Macedonian +Iceland Icelandic Malta Maltese +Iceland Icelandic Mexico Mexican +Iceland Icelandic Moldova Moldovan +Iceland Icelandic Netherlands Dutch +Iceland Icelandic Norway Norwegian +Iceland Icelandic Peru Peruvian +Iceland Icelandic Poland Polish +Iceland Icelandic Portugal Portuguese +Iceland Icelandic Russia Russian +Iceland Icelandic Slovakia Slovakian +Iceland Icelandic Spain Spanish +Iceland Icelandic Sweden Swedish +Iceland Icelandic Switzerland Swiss +Iceland Icelandic Thailand Thai +Iceland Icelandic Ukraine Ukrainian +Iceland Icelandic Albania Albanian +Iceland Icelandic Argentina Argentinean +Iceland Icelandic Australia Australian +Iceland Icelandic Austria Austrian +Iceland Icelandic Belarus Belorussian +Iceland Icelandic Brazil Brazilian +Iceland Icelandic Bulgaria Bulgarian +Iceland Icelandic Cambodia Cambodian +Iceland Icelandic Chile Chilean +Iceland Icelandic China Chinese +Iceland Icelandic Colombia Colombian +Iceland Icelandic Croatia Croatian +Iceland Icelandic Denmark Danish +Iceland Icelandic Egypt Egyptian +Iceland Icelandic England English +Iceland Icelandic France French +Iceland Icelandic Germany German +India Indian Ireland Irish +India Indian Israel Israeli +India Indian Italy Italian +India Indian Japan Japanese +India Indian Korea Korean +India Indian Macedonia Macedonian +India Indian Malta Maltese +India Indian Mexico Mexican +India Indian Moldova Moldovan +India Indian Netherlands Dutch +India Indian Norway Norwegian +India Indian Peru Peruvian +India Indian Poland Polish +India Indian Portugal Portuguese +India Indian Russia Russian +India Indian Slovakia Slovakian +India Indian Spain Spanish +India Indian Sweden Swedish +India Indian Switzerland Swiss +India Indian Thailand Thai +India Indian Ukraine Ukrainian +India Indian Albania Albanian +India Indian Argentina Argentinean +India Indian Australia Australian +India Indian Austria Austrian +India Indian Belarus Belorussian +India Indian Brazil Brazilian +India Indian Bulgaria Bulgarian +India Indian Cambodia Cambodian +India Indian Chile Chilean +India Indian China Chinese +India Indian Colombia Colombian +India Indian Croatia Croatian +India Indian Denmark Danish +India Indian Egypt Egyptian +India Indian England English +India Indian France French +India Indian Germany German +India Indian Greece Greek +Ireland Irish Israel Israeli +Ireland Irish Italy Italian +Ireland Irish Japan Japanese +Ireland Irish Korea Korean +Ireland Irish Macedonia Macedonian +Ireland Irish Malta Maltese +Ireland Irish Mexico Mexican +Ireland Irish Moldova Moldovan +Ireland Irish Netherlands Dutch +Ireland Irish Norway Norwegian +Ireland Irish Peru Peruvian +Ireland Irish Poland Polish +Ireland Irish Portugal Portuguese +Ireland Irish Russia Russian +Ireland Irish Slovakia Slovakian +Ireland Irish Spain Spanish +Ireland Irish Sweden Swedish +Ireland Irish Switzerland Swiss +Ireland Irish Thailand Thai +Ireland Irish Ukraine Ukrainian +Ireland Irish Albania Albanian +Ireland Irish Argentina Argentinean +Ireland Irish Australia Australian +Ireland Irish Austria Austrian +Ireland Irish Belarus Belorussian +Ireland Irish Brazil Brazilian +Ireland Irish Bulgaria Bulgarian +Ireland Irish Cambodia Cambodian +Ireland Irish Chile Chilean +Ireland Irish China Chinese +Ireland Irish Colombia Colombian +Ireland Irish Croatia Croatian +Ireland Irish Denmark Danish +Ireland Irish Egypt Egyptian +Ireland Irish England English +Ireland Irish France French +Ireland Irish Germany German +Ireland Irish Greece Greek +Ireland Irish Iceland Icelandic +Israel Israeli Italy Italian +Israel Israeli Japan Japanese +Israel Israeli Korea Korean +Israel Israeli Macedonia Macedonian +Israel Israeli Malta Maltese +Israel Israeli Mexico Mexican +Israel Israeli Moldova Moldovan +Israel Israeli Netherlands Dutch +Israel Israeli Norway Norwegian +Israel Israeli Peru Peruvian +Israel Israeli Poland Polish +Israel Israeli Portugal Portuguese +Israel Israeli Russia Russian +Israel Israeli Slovakia Slovakian +Israel Israeli Spain Spanish +Israel Israeli Sweden Swedish +Israel Israeli Switzerland Swiss +Israel Israeli Thailand Thai +Israel Israeli Ukraine Ukrainian +Israel Israeli Albania Albanian +Israel Israeli Argentina Argentinean +Israel Israeli Australia Australian +Israel Israeli Austria Austrian +Israel Israeli Belarus Belorussian +Israel Israeli Brazil Brazilian +Israel Israeli Bulgaria Bulgarian +Israel Israeli Cambodia Cambodian +Israel Israeli Chile Chilean +Israel Israeli China Chinese +Israel Israeli Colombia Colombian +Israel Israeli Croatia Croatian +Israel Israeli Denmark Danish +Israel Israeli Egypt Egyptian +Israel Israeli England English +Israel Israeli France French +Israel Israeli Germany German +Israel Israeli Greece Greek +Israel Israeli Iceland Icelandic +Israel Israeli India Indian +Italy Italian Japan Japanese +Italy Italian Korea Korean +Italy Italian Macedonia Macedonian +Italy Italian Malta Maltese +Italy Italian Mexico Mexican +Italy Italian Moldova Moldovan +Italy Italian Netherlands Dutch +Italy Italian Norway Norwegian +Italy Italian Peru Peruvian +Italy Italian Poland Polish +Italy Italian Portugal Portuguese +Italy Italian Russia Russian +Italy Italian Slovakia Slovakian +Italy Italian Spain Spanish +Italy Italian Sweden Swedish +Italy Italian Switzerland Swiss +Italy Italian Thailand Thai +Italy Italian Ukraine Ukrainian +Italy Italian Albania Albanian +Italy Italian Argentina Argentinean +Italy Italian Australia Australian +Italy Italian Austria Austrian +Italy Italian Belarus Belorussian +Italy Italian Brazil Brazilian +Italy Italian Bulgaria Bulgarian +Italy Italian Cambodia Cambodian +Italy Italian Chile Chilean +Italy Italian China Chinese +Italy Italian Colombia Colombian +Italy Italian Croatia Croatian +Italy Italian Denmark Danish +Italy Italian Egypt Egyptian +Italy Italian England English +Italy Italian France French +Italy Italian Germany German +Italy Italian Greece Greek +Italy Italian Iceland Icelandic +Italy Italian India Indian +Italy Italian Ireland Irish +Japan Japanese Korea Korean +Japan Japanese Macedonia Macedonian +Japan Japanese Malta Maltese +Japan Japanese Mexico Mexican +Japan Japanese Moldova Moldovan +Japan Japanese Netherlands Dutch +Japan Japanese Norway Norwegian +Japan Japanese Peru Peruvian +Japan Japanese Poland Polish +Japan Japanese Portugal Portuguese +Japan Japanese Russia Russian +Japan Japanese Slovakia Slovakian +Japan Japanese Spain Spanish +Japan Japanese Sweden Swedish +Japan Japanese Switzerland Swiss +Japan Japanese Thailand Thai +Japan Japanese Ukraine Ukrainian +Japan Japanese Albania Albanian +Japan Japanese Argentina Argentinean +Japan Japanese Australia Australian +Japan Japanese Austria Austrian +Japan Japanese Belarus Belorussian +Japan Japanese Brazil Brazilian +Japan Japanese Bulgaria Bulgarian +Japan Japanese Cambodia Cambodian +Japan Japanese Chile Chilean +Japan Japanese China Chinese +Japan Japanese Colombia Colombian +Japan Japanese Croatia Croatian +Japan Japanese Denmark Danish +Japan Japanese Egypt Egyptian +Japan Japanese England English +Japan Japanese France French +Japan Japanese Germany German +Japan Japanese Greece Greek +Japan Japanese Iceland Icelandic +Japan Japanese India Indian +Japan Japanese Ireland Irish +Japan Japanese Israel Israeli +Korea Korean Macedonia Macedonian +Korea Korean Malta Maltese +Korea Korean Mexico Mexican +Korea Korean Moldova Moldovan +Korea Korean Netherlands Dutch +Korea Korean Norway Norwegian +Korea Korean Peru Peruvian +Korea Korean Poland Polish +Korea Korean Portugal Portuguese +Korea Korean Russia Russian +Korea Korean Slovakia Slovakian +Korea Korean Spain Spanish +Korea Korean Sweden Swedish +Korea Korean Switzerland Swiss +Korea Korean Thailand Thai +Korea Korean Ukraine Ukrainian +Korea Korean Albania Albanian +Korea Korean Argentina Argentinean +Korea Korean Australia Australian +Korea Korean Austria Austrian +Korea Korean Belarus Belorussian +Korea Korean Brazil Brazilian +Korea Korean Bulgaria Bulgarian +Korea Korean Cambodia Cambodian +Korea Korean Chile Chilean +Korea Korean China Chinese +Korea Korean Colombia Colombian +Korea Korean Croatia Croatian +Korea Korean Denmark Danish +Korea Korean Egypt Egyptian +Korea Korean England English +Korea Korean France French +Korea Korean Germany German +Korea Korean Greece Greek +Korea Korean Iceland Icelandic +Korea Korean India Indian +Korea Korean Ireland Irish +Korea Korean Israel Israeli +Korea Korean Italy Italian +Macedonia Macedonian Malta Maltese +Macedonia Macedonian Mexico Mexican +Macedonia Macedonian Moldova Moldovan +Macedonia Macedonian Netherlands Dutch +Macedonia Macedonian Norway Norwegian +Macedonia Macedonian Peru Peruvian +Macedonia Macedonian Poland Polish +Macedonia Macedonian Portugal Portuguese +Macedonia Macedonian Russia Russian +Macedonia Macedonian Slovakia Slovakian +Macedonia Macedonian Spain Spanish +Macedonia Macedonian Sweden Swedish +Macedonia Macedonian Switzerland Swiss +Macedonia Macedonian Thailand Thai +Macedonia Macedonian Ukraine Ukrainian +Macedonia Macedonian Albania Albanian +Macedonia Macedonian Argentina Argentinean +Macedonia Macedonian Australia Australian +Macedonia Macedonian Austria Austrian +Macedonia Macedonian Belarus Belorussian +Macedonia Macedonian Brazil Brazilian +Macedonia Macedonian Bulgaria Bulgarian +Macedonia Macedonian Cambodia Cambodian +Macedonia Macedonian Chile Chilean +Macedonia Macedonian China Chinese +Macedonia Macedonian Colombia Colombian +Macedonia Macedonian Croatia Croatian +Macedonia Macedonian Denmark Danish +Macedonia Macedonian Egypt Egyptian +Macedonia Macedonian England English +Macedonia Macedonian France French +Macedonia Macedonian Germany German +Macedonia Macedonian Greece Greek +Macedonia Macedonian Iceland Icelandic +Macedonia Macedonian India Indian +Macedonia Macedonian Ireland Irish +Macedonia Macedonian Israel Israeli +Macedonia Macedonian Italy Italian +Macedonia Macedonian Japan Japanese +Malta Maltese Mexico Mexican +Malta Maltese Moldova Moldovan +Malta Maltese Netherlands Dutch +Malta Maltese Norway Norwegian +Malta Maltese Peru Peruvian +Malta Maltese Poland Polish +Malta Maltese Portugal Portuguese +Malta Maltese Russia Russian +Malta Maltese Slovakia Slovakian +Malta Maltese Spain Spanish +Malta Maltese Sweden Swedish +Malta Maltese Switzerland Swiss +Malta Maltese Thailand Thai +Malta Maltese Ukraine Ukrainian +Malta Maltese Albania Albanian +Malta Maltese Argentina Argentinean +Malta Maltese Australia Australian +Malta Maltese Austria Austrian +Malta Maltese Belarus Belorussian +Malta Maltese Brazil Brazilian +Malta Maltese Bulgaria Bulgarian +Malta Maltese Cambodia Cambodian +Malta Maltese Chile Chilean +Malta Maltese China Chinese +Malta Maltese Colombia Colombian +Malta Maltese Croatia Croatian +Malta Maltese Denmark Danish +Malta Maltese Egypt Egyptian +Malta Maltese England English +Malta Maltese France French +Malta Maltese Germany German +Malta Maltese Greece Greek +Malta Maltese Iceland Icelandic +Malta Maltese India Indian +Malta Maltese Ireland Irish +Malta Maltese Israel Israeli +Malta Maltese Italy Italian +Malta Maltese Japan Japanese +Malta Maltese Korea Korean +Mexico Mexican Moldova Moldovan +Mexico Mexican Netherlands Dutch +Mexico Mexican Norway Norwegian +Mexico Mexican Peru Peruvian +Mexico Mexican Poland Polish +Mexico Mexican Portugal Portuguese +Mexico Mexican Russia Russian +Mexico Mexican Slovakia Slovakian +Mexico Mexican Spain Spanish +Mexico Mexican Sweden Swedish +Mexico Mexican Switzerland Swiss +Mexico Mexican Thailand Thai +Mexico Mexican Ukraine Ukrainian +Mexico Mexican Albania Albanian +Mexico Mexican Argentina Argentinean +Mexico Mexican Australia Australian +Mexico Mexican Austria Austrian +Mexico Mexican Belarus Belorussian +Mexico Mexican Brazil Brazilian +Mexico Mexican Bulgaria Bulgarian +Mexico Mexican Cambodia Cambodian +Mexico Mexican Chile Chilean +Mexico Mexican China Chinese +Mexico Mexican Colombia Colombian +Mexico Mexican Croatia Croatian +Mexico Mexican Denmark Danish +Mexico Mexican Egypt Egyptian +Mexico Mexican England English +Mexico Mexican France French +Mexico Mexican Germany German +Mexico Mexican Greece Greek +Mexico Mexican Iceland Icelandic +Mexico Mexican India Indian +Mexico Mexican Ireland Irish +Mexico Mexican Israel Israeli +Mexico Mexican Italy Italian +Mexico Mexican Japan Japanese +Mexico Mexican Korea Korean +Mexico Mexican Macedonia Macedonian +Moldova Moldovan Netherlands Dutch +Moldova Moldovan Norway Norwegian +Moldova Moldovan Peru Peruvian +Moldova Moldovan Poland Polish +Moldova Moldovan Portugal Portuguese +Moldova Moldovan Russia Russian +Moldova Moldovan Slovakia Slovakian +Moldova Moldovan Spain Spanish +Moldova Moldovan Sweden Swedish +Moldova Moldovan Switzerland Swiss +Moldova Moldovan Thailand Thai +Moldova Moldovan Ukraine Ukrainian +Moldova Moldovan Albania Albanian +Moldova Moldovan Argentina Argentinean +Moldova Moldovan Australia Australian +Moldova Moldovan Austria Austrian +Moldova Moldovan Belarus Belorussian +Moldova Moldovan Brazil Brazilian +Moldova Moldovan Bulgaria Bulgarian +Moldova Moldovan Cambodia Cambodian +Moldova Moldovan Chile Chilean +Moldova Moldovan China Chinese +Moldova Moldovan Colombia Colombian +Moldova Moldovan Croatia Croatian +Moldova Moldovan Denmark Danish +Moldova Moldovan Egypt Egyptian +Moldova Moldovan England English +Moldova Moldovan France French +Moldova Moldovan Germany German +Moldova Moldovan Greece Greek +Moldova Moldovan Iceland Icelandic +Moldova Moldovan India Indian +Moldova Moldovan Ireland Irish +Moldova Moldovan Israel Israeli +Moldova Moldovan Italy Italian +Moldova Moldovan Japan Japanese +Moldova Moldovan Korea Korean +Moldova Moldovan Macedonia Macedonian +Moldova Moldovan Malta Maltese +Netherlands Dutch Norway Norwegian +Netherlands Dutch Peru Peruvian +Netherlands Dutch Poland Polish +Netherlands Dutch Portugal Portuguese +Netherlands Dutch Russia Russian +Netherlands Dutch Slovakia Slovakian +Netherlands Dutch Spain Spanish +Netherlands Dutch Sweden Swedish +Netherlands Dutch Switzerland Swiss +Netherlands Dutch Thailand Thai +Netherlands Dutch Ukraine Ukrainian +Netherlands Dutch Albania Albanian +Netherlands Dutch Argentina Argentinean +Netherlands Dutch Australia Australian +Netherlands Dutch Austria Austrian +Netherlands Dutch Belarus Belorussian +Netherlands Dutch Brazil Brazilian +Netherlands Dutch Bulgaria Bulgarian +Netherlands Dutch Cambodia Cambodian +Netherlands Dutch Chile Chilean +Netherlands Dutch China Chinese +Netherlands Dutch Colombia Colombian +Netherlands Dutch Croatia Croatian +Netherlands Dutch Denmark Danish +Netherlands Dutch Egypt Egyptian +Netherlands Dutch England English +Netherlands Dutch France French +Netherlands Dutch Germany German +Netherlands Dutch Greece Greek +Netherlands Dutch Iceland Icelandic +Netherlands Dutch India Indian +Netherlands Dutch Ireland Irish +Netherlands Dutch Israel Israeli +Netherlands Dutch Italy Italian +Netherlands Dutch Japan Japanese +Netherlands Dutch Korea Korean +Netherlands Dutch Macedonia Macedonian +Netherlands Dutch Malta Maltese +Netherlands Dutch Mexico Mexican +Norway Norwegian Peru Peruvian +Norway Norwegian Poland Polish +Norway Norwegian Portugal Portuguese +Norway Norwegian Russia Russian +Norway Norwegian Slovakia Slovakian +Norway Norwegian Spain Spanish +Norway Norwegian Sweden Swedish +Norway Norwegian Switzerland Swiss +Norway Norwegian Thailand Thai +Norway Norwegian Ukraine Ukrainian +Norway Norwegian Albania Albanian +Norway Norwegian Argentina Argentinean +Norway Norwegian Australia Australian +Norway Norwegian Austria Austrian +Norway Norwegian Belarus Belorussian +Norway Norwegian Brazil Brazilian +Norway Norwegian Bulgaria Bulgarian +Norway Norwegian Cambodia Cambodian +Norway Norwegian Chile Chilean +Norway Norwegian China Chinese +Norway Norwegian Colombia Colombian +Norway Norwegian Croatia Croatian +Norway Norwegian Denmark Danish +Norway Norwegian Egypt Egyptian +Norway Norwegian England English +Norway Norwegian France French +Norway Norwegian Germany German +Norway Norwegian Greece Greek +Norway Norwegian Iceland Icelandic +Norway Norwegian India Indian +Norway Norwegian Ireland Irish +Norway Norwegian Israel Israeli +Norway Norwegian Italy Italian +Norway Norwegian Japan Japanese +Norway Norwegian Korea Korean +Norway Norwegian Macedonia Macedonian +Norway Norwegian Malta Maltese +Norway Norwegian Mexico Mexican +Norway Norwegian Moldova Moldovan +Peru Peruvian Poland Polish +Peru Peruvian Portugal Portuguese +Peru Peruvian Russia Russian +Peru Peruvian Slovakia Slovakian +Peru Peruvian Spain Spanish +Peru Peruvian Sweden Swedish +Peru Peruvian Switzerland Swiss +Peru Peruvian Thailand Thai +Peru Peruvian Ukraine Ukrainian +Peru Peruvian Albania Albanian +Peru Peruvian Argentina Argentinean +Peru Peruvian Australia Australian +Peru Peruvian Austria Austrian +Peru Peruvian Belarus Belorussian +Peru Peruvian Brazil Brazilian +Peru Peruvian Bulgaria Bulgarian +Peru Peruvian Cambodia Cambodian +Peru Peruvian Chile Chilean +Peru Peruvian China Chinese +Peru Peruvian Colombia Colombian +Peru Peruvian Croatia Croatian +Peru Peruvian Denmark Danish +Peru Peruvian Egypt Egyptian +Peru Peruvian England English +Peru Peruvian France French +Peru Peruvian Germany German +Peru Peruvian Greece Greek +Peru Peruvian Iceland Icelandic +Peru Peruvian India Indian +Peru Peruvian Ireland Irish +Peru Peruvian Israel Israeli +Peru Peruvian Italy Italian +Peru Peruvian Japan Japanese +Peru Peruvian Korea Korean +Peru Peruvian Macedonia Macedonian +Peru Peruvian Malta Maltese +Peru Peruvian Mexico Mexican +Peru Peruvian Moldova Moldovan +Peru Peruvian Netherlands Dutch +Poland Polish Portugal Portuguese +Poland Polish Russia Russian +Poland Polish Slovakia Slovakian +Poland Polish Spain Spanish +Poland Polish Sweden Swedish +Poland Polish Switzerland Swiss +Poland Polish Thailand Thai +Poland Polish Ukraine Ukrainian +Poland Polish Albania Albanian +Poland Polish Argentina Argentinean +Poland Polish Australia Australian +Poland Polish Austria Austrian +Poland Polish Belarus Belorussian +Poland Polish Brazil Brazilian +Poland Polish Bulgaria Bulgarian +Poland Polish Cambodia Cambodian +Poland Polish Chile Chilean +Poland Polish China Chinese +Poland Polish Colombia Colombian +Poland Polish Croatia Croatian +Poland Polish Denmark Danish +Poland Polish Egypt Egyptian +Poland Polish England English +Poland Polish France French +Poland Polish Germany German +Poland Polish Greece Greek +Poland Polish Iceland Icelandic +Poland Polish India Indian +Poland Polish Ireland Irish +Poland Polish Israel Israeli +Poland Polish Italy Italian +Poland Polish Japan Japanese +Poland Polish Korea Korean +Poland Polish Macedonia Macedonian +Poland Polish Malta Maltese +Poland Polish Mexico Mexican +Poland Polish Moldova Moldovan +Poland Polish Netherlands Dutch +Poland Polish Norway Norwegian +Portugal Portuguese Russia Russian +Portugal Portuguese Slovakia Slovakian +Portugal Portuguese Spain Spanish +Portugal Portuguese Sweden Swedish +Portugal Portuguese Switzerland Swiss +Portugal Portuguese Thailand Thai +Portugal Portuguese Ukraine Ukrainian +Portugal Portuguese Albania Albanian +Portugal Portuguese Argentina Argentinean +Portugal Portuguese Australia Australian +Portugal Portuguese Austria Austrian +Portugal Portuguese Belarus Belorussian +Portugal Portuguese Brazil Brazilian +Portugal Portuguese Bulgaria Bulgarian +Portugal Portuguese Cambodia Cambodian +Portugal Portuguese Chile Chilean +Portugal Portuguese China Chinese +Portugal Portuguese Colombia Colombian +Portugal Portuguese Croatia Croatian +Portugal Portuguese Denmark Danish +Portugal Portuguese Egypt Egyptian +Portugal Portuguese England English +Portugal Portuguese France French +Portugal Portuguese Germany German +Portugal Portuguese Greece Greek +Portugal Portuguese Iceland Icelandic +Portugal Portuguese India Indian +Portugal Portuguese Ireland Irish +Portugal Portuguese Israel Israeli +Portugal Portuguese Italy Italian +Portugal Portuguese Japan Japanese +Portugal Portuguese Korea Korean +Portugal Portuguese Macedonia Macedonian +Portugal Portuguese Malta Maltese +Portugal Portuguese Mexico Mexican +Portugal Portuguese Moldova Moldovan +Portugal Portuguese Netherlands Dutch +Portugal Portuguese Norway Norwegian +Portugal Portuguese Peru Peruvian +Russia Russian Slovakia Slovakian +Russia Russian Spain Spanish +Russia Russian Sweden Swedish +Russia Russian Switzerland Swiss +Russia Russian Thailand Thai +Russia Russian Ukraine Ukrainian +Russia Russian Albania Albanian +Russia Russian Argentina Argentinean +Russia Russian Australia Australian +Russia Russian Austria Austrian +Russia Russian Belarus Belorussian +Russia Russian Brazil Brazilian +Russia Russian Bulgaria Bulgarian +Russia Russian Cambodia Cambodian +Russia Russian Chile Chilean +Russia Russian China Chinese +Russia Russian Colombia Colombian +Russia Russian Croatia Croatian +Russia Russian Denmark Danish +Russia Russian Egypt Egyptian +Russia Russian England English +Russia Russian France French +Russia Russian Germany German +Russia Russian Greece Greek +Russia Russian Iceland Icelandic +Russia Russian India Indian +Russia Russian Ireland Irish +Russia Russian Israel Israeli +Russia Russian Italy Italian +Russia Russian Japan Japanese +Russia Russian Korea Korean +Russia Russian Macedonia Macedonian +Russia Russian Malta Maltese +Russia Russian Mexico Mexican +Russia Russian Moldova Moldovan +Russia Russian Netherlands Dutch +Russia Russian Norway Norwegian +Russia Russian Peru Peruvian +Russia Russian Poland Polish +Slovakia Slovakian Spain Spanish +Slovakia Slovakian Sweden Swedish +Slovakia Slovakian Switzerland Swiss +Slovakia Slovakian Thailand Thai +Slovakia Slovakian Ukraine Ukrainian +Slovakia Slovakian Albania Albanian +Slovakia Slovakian Argentina Argentinean +Slovakia Slovakian Australia Australian +Slovakia Slovakian Austria Austrian +Slovakia Slovakian Belarus Belorussian +Slovakia Slovakian Brazil Brazilian +Slovakia Slovakian Bulgaria Bulgarian +Slovakia Slovakian Cambodia Cambodian +Slovakia Slovakian Chile Chilean +Slovakia Slovakian China Chinese +Slovakia Slovakian Colombia Colombian +Slovakia Slovakian Croatia Croatian +Slovakia Slovakian Denmark Danish +Slovakia Slovakian Egypt Egyptian +Slovakia Slovakian England English +Slovakia Slovakian France French +Slovakia Slovakian Germany German +Slovakia Slovakian Greece Greek +Slovakia Slovakian Iceland Icelandic +Slovakia Slovakian India Indian +Slovakia Slovakian Ireland Irish +Slovakia Slovakian Israel Israeli +Slovakia Slovakian Italy Italian +Slovakia Slovakian Japan Japanese +Slovakia Slovakian Korea Korean +Slovakia Slovakian Macedonia Macedonian +Slovakia Slovakian Malta Maltese +Slovakia Slovakian Mexico Mexican +Slovakia Slovakian Moldova Moldovan +Slovakia Slovakian Netherlands Dutch +Slovakia Slovakian Norway Norwegian +Slovakia Slovakian Peru Peruvian +Slovakia Slovakian Poland Polish +Slovakia Slovakian Portugal Portuguese +Spain Spanish Sweden Swedish +Spain Spanish Switzerland Swiss +Spain Spanish Thailand Thai +Spain Spanish Ukraine Ukrainian +Spain Spanish Albania Albanian +Spain Spanish Argentina Argentinean +Spain Spanish Australia Australian +Spain Spanish Austria Austrian +Spain Spanish Belarus Belorussian +Spain Spanish Brazil Brazilian +Spain Spanish Bulgaria Bulgarian +Spain Spanish Cambodia Cambodian +Spain Spanish Chile Chilean +Spain Spanish China Chinese +Spain Spanish Colombia Colombian +Spain Spanish Croatia Croatian +Spain Spanish Denmark Danish +Spain Spanish Egypt Egyptian +Spain Spanish England English +Spain Spanish France French +Spain Spanish Germany German +Spain Spanish Greece Greek +Spain Spanish Iceland Icelandic +Spain Spanish India Indian +Spain Spanish Ireland Irish +Spain Spanish Israel Israeli +Spain Spanish Italy Italian +Spain Spanish Japan Japanese +Spain Spanish Korea Korean +Spain Spanish Macedonia Macedonian +Spain Spanish Malta Maltese +Spain Spanish Mexico Mexican +Spain Spanish Moldova Moldovan +Spain Spanish Netherlands Dutch +Spain Spanish Norway Norwegian +Spain Spanish Peru Peruvian +Spain Spanish Poland Polish +Spain Spanish Portugal Portuguese +Spain Spanish Russia Russian +Sweden Swedish Switzerland Swiss +Sweden Swedish Thailand Thai +Sweden Swedish Ukraine Ukrainian +Sweden Swedish Albania Albanian +Sweden Swedish Argentina Argentinean +Sweden Swedish Australia Australian +Sweden Swedish Austria Austrian +Sweden Swedish Belarus Belorussian +Sweden Swedish Brazil Brazilian +Sweden Swedish Bulgaria Bulgarian +Sweden Swedish Cambodia Cambodian +Sweden Swedish Chile Chilean +Sweden Swedish China Chinese +Sweden Swedish Colombia Colombian +Sweden Swedish Croatia Croatian +Sweden Swedish Denmark Danish +Sweden Swedish Egypt Egyptian +Sweden Swedish England English +Sweden Swedish France French +Sweden Swedish Germany German +Sweden Swedish Greece Greek +Sweden Swedish Iceland Icelandic +Sweden Swedish India Indian +Sweden Swedish Ireland Irish +Sweden Swedish Israel Israeli +Sweden Swedish Italy Italian +Sweden Swedish Japan Japanese +Sweden Swedish Korea Korean +Sweden Swedish Macedonia Macedonian +Sweden Swedish Malta Maltese +Sweden Swedish Mexico Mexican +Sweden Swedish Moldova Moldovan +Sweden Swedish Netherlands Dutch +Sweden Swedish Norway Norwegian +Sweden Swedish Peru Peruvian +Sweden Swedish Poland Polish +Sweden Swedish Portugal Portuguese +Sweden Swedish Russia Russian +Sweden Swedish Slovakia Slovakian +Switzerland Swiss Thailand Thai +Switzerland Swiss Ukraine Ukrainian +Switzerland Swiss Albania Albanian +Switzerland Swiss Argentina Argentinean +Switzerland Swiss Australia Australian +Switzerland Swiss Austria Austrian +Switzerland Swiss Belarus Belorussian +Switzerland Swiss Brazil Brazilian +Switzerland Swiss Bulgaria Bulgarian +Switzerland Swiss Cambodia Cambodian +Switzerland Swiss Chile Chilean +Switzerland Swiss China Chinese +Switzerland Swiss Colombia Colombian +Switzerland Swiss Croatia Croatian +Switzerland Swiss Denmark Danish +Switzerland Swiss Egypt Egyptian +Switzerland Swiss England English +Switzerland Swiss France French +Switzerland Swiss Germany German +Switzerland Swiss Greece Greek +Switzerland Swiss Iceland Icelandic +Switzerland Swiss India Indian +Switzerland Swiss Ireland Irish +Switzerland Swiss Israel Israeli +Switzerland Swiss Italy Italian +Switzerland Swiss Japan Japanese +Switzerland Swiss Korea Korean +Switzerland Swiss Macedonia Macedonian +Switzerland Swiss Malta Maltese +Switzerland Swiss Mexico Mexican +Switzerland Swiss Moldova Moldovan +Switzerland Swiss Netherlands Dutch +Switzerland Swiss Norway Norwegian +Switzerland Swiss Peru Peruvian +Switzerland Swiss Poland Polish +Switzerland Swiss Portugal Portuguese +Switzerland Swiss Russia Russian +Switzerland Swiss Slovakia Slovakian +Switzerland Swiss Spain Spanish +Thailand Thai Ukraine Ukrainian +Thailand Thai Albania Albanian +Thailand Thai Argentina Argentinean +Thailand Thai Australia Australian +Thailand Thai Austria Austrian +Thailand Thai Belarus Belorussian +Thailand Thai Brazil Brazilian +Thailand Thai Bulgaria Bulgarian +Thailand Thai Cambodia Cambodian +Thailand Thai Chile Chilean +Thailand Thai China Chinese +Thailand Thai Colombia Colombian +Thailand Thai Croatia Croatian +Thailand Thai Denmark Danish +Thailand Thai Egypt Egyptian +Thailand Thai England English +Thailand Thai France French +Thailand Thai Germany German +Thailand Thai Greece Greek +Thailand Thai Iceland Icelandic +Thailand Thai India Indian +Thailand Thai Ireland Irish +Thailand Thai Israel Israeli +Thailand Thai Italy Italian +Thailand Thai Japan Japanese +Thailand Thai Korea Korean +Thailand Thai Macedonia Macedonian +Thailand Thai Malta Maltese +Thailand Thai Mexico Mexican +Thailand Thai Moldova Moldovan +Thailand Thai Netherlands Dutch +Thailand Thai Norway Norwegian +Thailand Thai Peru Peruvian +Thailand Thai Poland Polish +Thailand Thai Portugal Portuguese +Thailand Thai Russia Russian +Thailand Thai Slovakia Slovakian +Thailand Thai Spain Spanish +Thailand Thai Sweden Swedish +Ukraine Ukrainian Albania Albanian +Ukraine Ukrainian Argentina Argentinean +Ukraine Ukrainian Australia Australian +Ukraine Ukrainian Austria Austrian +Ukraine Ukrainian Belarus Belorussian +Ukraine Ukrainian Brazil Brazilian +Ukraine Ukrainian Bulgaria Bulgarian +Ukraine Ukrainian Cambodia Cambodian +Ukraine Ukrainian Chile Chilean +Ukraine Ukrainian China Chinese +Ukraine Ukrainian Colombia Colombian +Ukraine Ukrainian Croatia Croatian +Ukraine Ukrainian Denmark Danish +Ukraine Ukrainian Egypt Egyptian +Ukraine Ukrainian England English +Ukraine Ukrainian France French +Ukraine Ukrainian Germany German +Ukraine Ukrainian Greece Greek +Ukraine Ukrainian Iceland Icelandic +Ukraine Ukrainian India Indian +Ukraine Ukrainian Ireland Irish +Ukraine Ukrainian Israel Israeli +Ukraine Ukrainian Italy Italian +Ukraine Ukrainian Japan Japanese +Ukraine Ukrainian Korea Korean +Ukraine Ukrainian Macedonia Macedonian +Ukraine Ukrainian Malta Maltese +Ukraine Ukrainian Mexico Mexican +Ukraine Ukrainian Moldova Moldovan +Ukraine Ukrainian Netherlands Dutch +Ukraine Ukrainian Norway Norwegian +Ukraine Ukrainian Peru Peruvian +Ukraine Ukrainian Poland Polish +Ukraine Ukrainian Portugal Portuguese +Ukraine Ukrainian Russia Russian +Ukraine Ukrainian Slovakia Slovakian +Ukraine Ukrainian Spain Spanish +Ukraine Ukrainian Sweden Swedish +Ukraine Ukrainian Switzerland Swiss +: gram7-past-tense +dancing danced decreasing decreased +dancing danced describing described +dancing danced enhancing enhanced +dancing danced falling fell +dancing danced feeding fed +dancing danced flying flew +dancing danced generating generated +dancing danced going went +dancing danced hiding hid +dancing danced hitting hit +dancing danced implementing implemented +dancing danced increasing increased +dancing danced jumping jumped +dancing danced knowing knew +dancing danced listening listened +dancing danced looking looked +dancing danced moving moved +dancing danced paying paid +dancing danced playing played +dancing danced predicting predicted +dancing danced reading read +dancing danced running ran +dancing danced saying said +dancing danced screaming screamed +dancing danced seeing saw +dancing danced selling sold +dancing danced shrinking shrank +dancing danced singing sang +dancing danced sitting sat +dancing danced sleeping slept +dancing danced slowing slowed +dancing danced spending spent +dancing danced striking struck +dancing danced swimming swam +dancing danced taking took +dancing danced thinking thought +dancing danced vanishing vanished +dancing danced walking walked +dancing danced writing wrote +decreasing decreased describing described +decreasing decreased enhancing enhanced +decreasing decreased falling fell +decreasing decreased feeding fed +decreasing decreased flying flew +decreasing decreased generating generated +decreasing decreased going went +decreasing decreased hiding hid +decreasing decreased hitting hit +decreasing decreased implementing implemented +decreasing decreased increasing increased +decreasing decreased jumping jumped +decreasing decreased knowing knew +decreasing decreased listening listened +decreasing decreased looking looked +decreasing decreased moving moved +decreasing decreased paying paid +decreasing decreased playing played +decreasing decreased predicting predicted +decreasing decreased reading read +decreasing decreased running ran +decreasing decreased saying said +decreasing decreased screaming screamed +decreasing decreased seeing saw +decreasing decreased selling sold +decreasing decreased shrinking shrank +decreasing decreased singing sang +decreasing decreased sitting sat +decreasing decreased sleeping slept +decreasing decreased slowing slowed +decreasing decreased spending spent +decreasing decreased striking struck +decreasing decreased swimming swam +decreasing decreased taking took +decreasing decreased thinking thought +decreasing decreased vanishing vanished +decreasing decreased walking walked +decreasing decreased writing wrote +decreasing decreased dancing danced +describing described enhancing enhanced +describing described falling fell +describing described feeding fed +describing described flying flew +describing described generating generated +describing described going went +describing described hiding hid +describing described hitting hit +describing described implementing implemented +describing described increasing increased +describing described jumping jumped +describing described knowing knew +describing described listening listened +describing described looking looked +describing described moving moved +describing described paying paid +describing described playing played +describing described predicting predicted +describing described reading read +describing described running ran +describing described saying said +describing described screaming screamed +describing described seeing saw +describing described selling sold +describing described shrinking shrank +describing described singing sang +describing described sitting sat +describing described sleeping slept +describing described slowing slowed +describing described spending spent +describing described striking struck +describing described swimming swam +describing described taking took +describing described thinking thought +describing described vanishing vanished +describing described walking walked +describing described writing wrote +describing described dancing danced +describing described decreasing decreased +enhancing enhanced falling fell +enhancing enhanced feeding fed +enhancing enhanced flying flew +enhancing enhanced generating generated +enhancing enhanced going went +enhancing enhanced hiding hid +enhancing enhanced hitting hit +enhancing enhanced implementing implemented +enhancing enhanced increasing increased +enhancing enhanced jumping jumped +enhancing enhanced knowing knew +enhancing enhanced listening listened +enhancing enhanced looking looked +enhancing enhanced moving moved +enhancing enhanced paying paid +enhancing enhanced playing played +enhancing enhanced predicting predicted +enhancing enhanced reading read +enhancing enhanced running ran +enhancing enhanced saying said +enhancing enhanced screaming screamed +enhancing enhanced seeing saw +enhancing enhanced selling sold +enhancing enhanced shrinking shrank +enhancing enhanced singing sang +enhancing enhanced sitting sat +enhancing enhanced sleeping slept +enhancing enhanced slowing slowed +enhancing enhanced spending spent +enhancing enhanced striking struck +enhancing enhanced swimming swam +enhancing enhanced taking took +enhancing enhanced thinking thought +enhancing enhanced vanishing vanished +enhancing enhanced walking walked +enhancing enhanced writing wrote +enhancing enhanced dancing danced +enhancing enhanced decreasing decreased +enhancing enhanced describing described +falling fell feeding fed +falling fell flying flew +falling fell generating generated +falling fell going went +falling fell hiding hid +falling fell hitting hit +falling fell implementing implemented +falling fell increasing increased +falling fell jumping jumped +falling fell knowing knew +falling fell listening listened +falling fell looking looked +falling fell moving moved +falling fell paying paid +falling fell playing played +falling fell predicting predicted +falling fell reading read +falling fell running ran +falling fell saying said +falling fell screaming screamed +falling fell seeing saw +falling fell selling sold +falling fell shrinking shrank +falling fell singing sang +falling fell sitting sat +falling fell sleeping slept +falling fell slowing slowed +falling fell spending spent +falling fell striking struck +falling fell swimming swam +falling fell taking took +falling fell thinking thought +falling fell vanishing vanished +falling fell walking walked +falling fell writing wrote +falling fell dancing danced +falling fell decreasing decreased +falling fell describing described +falling fell enhancing enhanced +feeding fed flying flew +feeding fed generating generated +feeding fed going went +feeding fed hiding hid +feeding fed hitting hit +feeding fed implementing implemented +feeding fed increasing increased +feeding fed jumping jumped +feeding fed knowing knew +feeding fed listening listened +feeding fed looking looked +feeding fed moving moved +feeding fed paying paid +feeding fed playing played +feeding fed predicting predicted +feeding fed reading read +feeding fed running ran +feeding fed saying said +feeding fed screaming screamed +feeding fed seeing saw +feeding fed selling sold +feeding fed shrinking shrank +feeding fed singing sang +feeding fed sitting sat +feeding fed sleeping slept +feeding fed slowing slowed +feeding fed spending spent +feeding fed striking struck +feeding fed swimming swam +feeding fed taking took +feeding fed thinking thought +feeding fed vanishing vanished +feeding fed walking walked +feeding fed writing wrote +feeding fed dancing danced +feeding fed decreasing decreased +feeding fed describing described +feeding fed enhancing enhanced +feeding fed falling fell +flying flew generating generated +flying flew going went +flying flew hiding hid +flying flew hitting hit +flying flew implementing implemented +flying flew increasing increased +flying flew jumping jumped +flying flew knowing knew +flying flew listening listened +flying flew looking looked +flying flew moving moved +flying flew paying paid +flying flew playing played +flying flew predicting predicted +flying flew reading read +flying flew running ran +flying flew saying said +flying flew screaming screamed +flying flew seeing saw +flying flew selling sold +flying flew shrinking shrank +flying flew singing sang +flying flew sitting sat +flying flew sleeping slept +flying flew slowing slowed +flying flew spending spent +flying flew striking struck +flying flew swimming swam +flying flew taking took +flying flew thinking thought +flying flew vanishing vanished +flying flew walking walked +flying flew writing wrote +flying flew dancing danced +flying flew decreasing decreased +flying flew describing described +flying flew enhancing enhanced +flying flew falling fell +flying flew feeding fed +generating generated going went +generating generated hiding hid +generating generated hitting hit +generating generated implementing implemented +generating generated increasing increased +generating generated jumping jumped +generating generated knowing knew +generating generated listening listened +generating generated looking looked +generating generated moving moved +generating generated paying paid +generating generated playing played +generating generated predicting predicted +generating generated reading read +generating generated running ran +generating generated saying said +generating generated screaming screamed +generating generated seeing saw +generating generated selling sold +generating generated shrinking shrank +generating generated singing sang +generating generated sitting sat +generating generated sleeping slept +generating generated slowing slowed +generating generated spending spent +generating generated striking struck +generating generated swimming swam +generating generated taking took +generating generated thinking thought +generating generated vanishing vanished +generating generated walking walked +generating generated writing wrote +generating generated dancing danced +generating generated decreasing decreased +generating generated describing described +generating generated enhancing enhanced +generating generated falling fell +generating generated feeding fed +generating generated flying flew +going went hiding hid +going went hitting hit +going went implementing implemented +going went increasing increased +going went jumping jumped +going went knowing knew +going went listening listened +going went looking looked +going went moving moved +going went paying paid +going went playing played +going went predicting predicted +going went reading read +going went running ran +going went saying said +going went screaming screamed +going went seeing saw +going went selling sold +going went shrinking shrank +going went singing sang +going went sitting sat +going went sleeping slept +going went slowing slowed +going went spending spent +going went striking struck +going went swimming swam +going went taking took +going went thinking thought +going went vanishing vanished +going went walking walked +going went writing wrote +going went dancing danced +going went decreasing decreased +going went describing described +going went enhancing enhanced +going went falling fell +going went feeding fed +going went flying flew +going went generating generated +hiding hid hitting hit +hiding hid implementing implemented +hiding hid increasing increased +hiding hid jumping jumped +hiding hid knowing knew +hiding hid listening listened +hiding hid looking looked +hiding hid moving moved +hiding hid paying paid +hiding hid playing played +hiding hid predicting predicted +hiding hid reading read +hiding hid running ran +hiding hid saying said +hiding hid screaming screamed +hiding hid seeing saw +hiding hid selling sold +hiding hid shrinking shrank +hiding hid singing sang +hiding hid sitting sat +hiding hid sleeping slept +hiding hid slowing slowed +hiding hid spending spent +hiding hid striking struck +hiding hid swimming swam +hiding hid taking took +hiding hid thinking thought +hiding hid vanishing vanished +hiding hid walking walked +hiding hid writing wrote +hiding hid dancing danced +hiding hid decreasing decreased +hiding hid describing described +hiding hid enhancing enhanced +hiding hid falling fell +hiding hid feeding fed +hiding hid flying flew +hiding hid generating generated +hiding hid going went +hitting hit implementing implemented +hitting hit increasing increased +hitting hit jumping jumped +hitting hit knowing knew +hitting hit listening listened +hitting hit looking looked +hitting hit moving moved +hitting hit paying paid +hitting hit playing played +hitting hit predicting predicted +hitting hit reading read +hitting hit running ran +hitting hit saying said +hitting hit screaming screamed +hitting hit seeing saw +hitting hit selling sold +hitting hit shrinking shrank +hitting hit singing sang +hitting hit sitting sat +hitting hit sleeping slept +hitting hit slowing slowed +hitting hit spending spent +hitting hit striking struck +hitting hit swimming swam +hitting hit taking took +hitting hit thinking thought +hitting hit vanishing vanished +hitting hit walking walked +hitting hit writing wrote +hitting hit dancing danced +hitting hit decreasing decreased +hitting hit describing described +hitting hit enhancing enhanced +hitting hit falling fell +hitting hit feeding fed +hitting hit flying flew +hitting hit generating generated +hitting hit going went +hitting hit hiding hid +implementing implemented increasing increased +implementing implemented jumping jumped +implementing implemented knowing knew +implementing implemented listening listened +implementing implemented looking looked +implementing implemented moving moved +implementing implemented paying paid +implementing implemented playing played +implementing implemented predicting predicted +implementing implemented reading read +implementing implemented running ran +implementing implemented saying said +implementing implemented screaming screamed +implementing implemented seeing saw +implementing implemented selling sold +implementing implemented shrinking shrank +implementing implemented singing sang +implementing implemented sitting sat +implementing implemented sleeping slept +implementing implemented slowing slowed +implementing implemented spending spent +implementing implemented striking struck +implementing implemented swimming swam +implementing implemented taking took +implementing implemented thinking thought +implementing implemented vanishing vanished +implementing implemented walking walked +implementing implemented writing wrote +implementing implemented dancing danced +implementing implemented decreasing decreased +implementing implemented describing described +implementing implemented enhancing enhanced +implementing implemented falling fell +implementing implemented feeding fed +implementing implemented flying flew +implementing implemented generating generated +implementing implemented going went +implementing implemented hiding hid +implementing implemented hitting hit +increasing increased jumping jumped +increasing increased knowing knew +increasing increased listening listened +increasing increased looking looked +increasing increased moving moved +increasing increased paying paid +increasing increased playing played +increasing increased predicting predicted +increasing increased reading read +increasing increased running ran +increasing increased saying said +increasing increased screaming screamed +increasing increased seeing saw +increasing increased selling sold +increasing increased shrinking shrank +increasing increased singing sang +increasing increased sitting sat +increasing increased sleeping slept +increasing increased slowing slowed +increasing increased spending spent +increasing increased striking struck +increasing increased swimming swam +increasing increased taking took +increasing increased thinking thought +increasing increased vanishing vanished +increasing increased walking walked +increasing increased writing wrote +increasing increased dancing danced +increasing increased decreasing decreased +increasing increased describing described +increasing increased enhancing enhanced +increasing increased falling fell +increasing increased feeding fed +increasing increased flying flew +increasing increased generating generated +increasing increased going went +increasing increased hiding hid +increasing increased hitting hit +increasing increased implementing implemented +jumping jumped knowing knew +jumping jumped listening listened +jumping jumped looking looked +jumping jumped moving moved +jumping jumped paying paid +jumping jumped playing played +jumping jumped predicting predicted +jumping jumped reading read +jumping jumped running ran +jumping jumped saying said +jumping jumped screaming screamed +jumping jumped seeing saw +jumping jumped selling sold +jumping jumped shrinking shrank +jumping jumped singing sang +jumping jumped sitting sat +jumping jumped sleeping slept +jumping jumped slowing slowed +jumping jumped spending spent +jumping jumped striking struck +jumping jumped swimming swam +jumping jumped taking took +jumping jumped thinking thought +jumping jumped vanishing vanished +jumping jumped walking walked +jumping jumped writing wrote +jumping jumped dancing danced +jumping jumped decreasing decreased +jumping jumped describing described +jumping jumped enhancing enhanced +jumping jumped falling fell +jumping jumped feeding fed +jumping jumped flying flew +jumping jumped generating generated +jumping jumped going went +jumping jumped hiding hid +jumping jumped hitting hit +jumping jumped implementing implemented +jumping jumped increasing increased +knowing knew listening listened +knowing knew looking looked +knowing knew moving moved +knowing knew paying paid +knowing knew playing played +knowing knew predicting predicted +knowing knew reading read +knowing knew running ran +knowing knew saying said +knowing knew screaming screamed +knowing knew seeing saw +knowing knew selling sold +knowing knew shrinking shrank +knowing knew singing sang +knowing knew sitting sat +knowing knew sleeping slept +knowing knew slowing slowed +knowing knew spending spent +knowing knew striking struck +knowing knew swimming swam +knowing knew taking took +knowing knew thinking thought +knowing knew vanishing vanished +knowing knew walking walked +knowing knew writing wrote +knowing knew dancing danced +knowing knew decreasing decreased +knowing knew describing described +knowing knew enhancing enhanced +knowing knew falling fell +knowing knew feeding fed +knowing knew flying flew +knowing knew generating generated +knowing knew going went +knowing knew hiding hid +knowing knew hitting hit +knowing knew implementing implemented +knowing knew increasing increased +knowing knew jumping jumped +listening listened looking looked +listening listened moving moved +listening listened paying paid +listening listened playing played +listening listened predicting predicted +listening listened reading read +listening listened running ran +listening listened saying said +listening listened screaming screamed +listening listened seeing saw +listening listened selling sold +listening listened shrinking shrank +listening listened singing sang +listening listened sitting sat +listening listened sleeping slept +listening listened slowing slowed +listening listened spending spent +listening listened striking struck +listening listened swimming swam +listening listened taking took +listening listened thinking thought +listening listened vanishing vanished +listening listened walking walked +listening listened writing wrote +listening listened dancing danced +listening listened decreasing decreased +listening listened describing described +listening listened enhancing enhanced +listening listened falling fell +listening listened feeding fed +listening listened flying flew +listening listened generating generated +listening listened going went +listening listened hiding hid +listening listened hitting hit +listening listened implementing implemented +listening listened increasing increased +listening listened jumping jumped +listening listened knowing knew +looking looked moving moved +looking looked paying paid +looking looked playing played +looking looked predicting predicted +looking looked reading read +looking looked running ran +looking looked saying said +looking looked screaming screamed +looking looked seeing saw +looking looked selling sold +looking looked shrinking shrank +looking looked singing sang +looking looked sitting sat +looking looked sleeping slept +looking looked slowing slowed +looking looked spending spent +looking looked striking struck +looking looked swimming swam +looking looked taking took +looking looked thinking thought +looking looked vanishing vanished +looking looked walking walked +looking looked writing wrote +looking looked dancing danced +looking looked decreasing decreased +looking looked describing described +looking looked enhancing enhanced +looking looked falling fell +looking looked feeding fed +looking looked flying flew +looking looked generating generated +looking looked going went +looking looked hiding hid +looking looked hitting hit +looking looked implementing implemented +looking looked increasing increased +looking looked jumping jumped +looking looked knowing knew +looking looked listening listened +moving moved paying paid +moving moved playing played +moving moved predicting predicted +moving moved reading read +moving moved running ran +moving moved saying said +moving moved screaming screamed +moving moved seeing saw +moving moved selling sold +moving moved shrinking shrank +moving moved singing sang +moving moved sitting sat +moving moved sleeping slept +moving moved slowing slowed +moving moved spending spent +moving moved striking struck +moving moved swimming swam +moving moved taking took +moving moved thinking thought +moving moved vanishing vanished +moving moved walking walked +moving moved writing wrote +moving moved dancing danced +moving moved decreasing decreased +moving moved describing described +moving moved enhancing enhanced +moving moved falling fell +moving moved feeding fed +moving moved flying flew +moving moved generating generated +moving moved going went +moving moved hiding hid +moving moved hitting hit +moving moved implementing implemented +moving moved increasing increased +moving moved jumping jumped +moving moved knowing knew +moving moved listening listened +moving moved looking looked +paying paid playing played +paying paid predicting predicted +paying paid reading read +paying paid running ran +paying paid saying said +paying paid screaming screamed +paying paid seeing saw +paying paid selling sold +paying paid shrinking shrank +paying paid singing sang +paying paid sitting sat +paying paid sleeping slept +paying paid slowing slowed +paying paid spending spent +paying paid striking struck +paying paid swimming swam +paying paid taking took +paying paid thinking thought +paying paid vanishing vanished +paying paid walking walked +paying paid writing wrote +paying paid dancing danced +paying paid decreasing decreased +paying paid describing described +paying paid enhancing enhanced +paying paid falling fell +paying paid feeding fed +paying paid flying flew +paying paid generating generated +paying paid going went +paying paid hiding hid +paying paid hitting hit +paying paid implementing implemented +paying paid increasing increased +paying paid jumping jumped +paying paid knowing knew +paying paid listening listened +paying paid looking looked +paying paid moving moved +playing played predicting predicted +playing played reading read +playing played running ran +playing played saying said +playing played screaming screamed +playing played seeing saw +playing played selling sold +playing played shrinking shrank +playing played singing sang +playing played sitting sat +playing played sleeping slept +playing played slowing slowed +playing played spending spent +playing played striking struck +playing played swimming swam +playing played taking took +playing played thinking thought +playing played vanishing vanished +playing played walking walked +playing played writing wrote +playing played dancing danced +playing played decreasing decreased +playing played describing described +playing played enhancing enhanced +playing played falling fell +playing played feeding fed +playing played flying flew +playing played generating generated +playing played going went +playing played hiding hid +playing played hitting hit +playing played implementing implemented +playing played increasing increased +playing played jumping jumped +playing played knowing knew +playing played listening listened +playing played looking looked +playing played moving moved +playing played paying paid +predicting predicted reading read +predicting predicted running ran +predicting predicted saying said +predicting predicted screaming screamed +predicting predicted seeing saw +predicting predicted selling sold +predicting predicted shrinking shrank +predicting predicted singing sang +predicting predicted sitting sat +predicting predicted sleeping slept +predicting predicted slowing slowed +predicting predicted spending spent +predicting predicted striking struck +predicting predicted swimming swam +predicting predicted taking took +predicting predicted thinking thought +predicting predicted vanishing vanished +predicting predicted walking walked +predicting predicted writing wrote +predicting predicted dancing danced +predicting predicted decreasing decreased +predicting predicted describing described +predicting predicted enhancing enhanced +predicting predicted falling fell +predicting predicted feeding fed +predicting predicted flying flew +predicting predicted generating generated +predicting predicted going went +predicting predicted hiding hid +predicting predicted hitting hit +predicting predicted implementing implemented +predicting predicted increasing increased +predicting predicted jumping jumped +predicting predicted knowing knew +predicting predicted listening listened +predicting predicted looking looked +predicting predicted moving moved +predicting predicted paying paid +predicting predicted playing played +reading read running ran +reading read saying said +reading read screaming screamed +reading read seeing saw +reading read selling sold +reading read shrinking shrank +reading read singing sang +reading read sitting sat +reading read sleeping slept +reading read slowing slowed +reading read spending spent +reading read striking struck +reading read swimming swam +reading read taking took +reading read thinking thought +reading read vanishing vanished +reading read walking walked +reading read writing wrote +reading read dancing danced +reading read decreasing decreased +reading read describing described +reading read enhancing enhanced +reading read falling fell +reading read feeding fed +reading read flying flew +reading read generating generated +reading read going went +reading read hiding hid +reading read hitting hit +reading read implementing implemented +reading read increasing increased +reading read jumping jumped +reading read knowing knew +reading read listening listened +reading read looking looked +reading read moving moved +reading read paying paid +reading read playing played +reading read predicting predicted +running ran saying said +running ran screaming screamed +running ran seeing saw +running ran selling sold +running ran shrinking shrank +running ran singing sang +running ran sitting sat +running ran sleeping slept +running ran slowing slowed +running ran spending spent +running ran striking struck +running ran swimming swam +running ran taking took +running ran thinking thought +running ran vanishing vanished +running ran walking walked +running ran writing wrote +running ran dancing danced +running ran decreasing decreased +running ran describing described +running ran enhancing enhanced +running ran falling fell +running ran feeding fed +running ran flying flew +running ran generating generated +running ran going went +running ran hiding hid +running ran hitting hit +running ran implementing implemented +running ran increasing increased +running ran jumping jumped +running ran knowing knew +running ran listening listened +running ran looking looked +running ran moving moved +running ran paying paid +running ran playing played +running ran predicting predicted +running ran reading read +saying said screaming screamed +saying said seeing saw +saying said selling sold +saying said shrinking shrank +saying said singing sang +saying said sitting sat +saying said sleeping slept +saying said slowing slowed +saying said spending spent +saying said striking struck +saying said swimming swam +saying said taking took +saying said thinking thought +saying said vanishing vanished +saying said walking walked +saying said writing wrote +saying said dancing danced +saying said decreasing decreased +saying said describing described +saying said enhancing enhanced +saying said falling fell +saying said feeding fed +saying said flying flew +saying said generating generated +saying said going went +saying said hiding hid +saying said hitting hit +saying said implementing implemented +saying said increasing increased +saying said jumping jumped +saying said knowing knew +saying said listening listened +saying said looking looked +saying said moving moved +saying said paying paid +saying said playing played +saying said predicting predicted +saying said reading read +saying said running ran +screaming screamed seeing saw +screaming screamed selling sold +screaming screamed shrinking shrank +screaming screamed singing sang +screaming screamed sitting sat +screaming screamed sleeping slept +screaming screamed slowing slowed +screaming screamed spending spent +screaming screamed striking struck +screaming screamed swimming swam +screaming screamed taking took +screaming screamed thinking thought +screaming screamed vanishing vanished +screaming screamed walking walked +screaming screamed writing wrote +screaming screamed dancing danced +screaming screamed decreasing decreased +screaming screamed describing described +screaming screamed enhancing enhanced +screaming screamed falling fell +screaming screamed feeding fed +screaming screamed flying flew +screaming screamed generating generated +screaming screamed going went +screaming screamed hiding hid +screaming screamed hitting hit +screaming screamed implementing implemented +screaming screamed increasing increased +screaming screamed jumping jumped +screaming screamed knowing knew +screaming screamed listening listened +screaming screamed looking looked +screaming screamed moving moved +screaming screamed paying paid +screaming screamed playing played +screaming screamed predicting predicted +screaming screamed reading read +screaming screamed running ran +screaming screamed saying said +seeing saw selling sold +seeing saw shrinking shrank +seeing saw singing sang +seeing saw sitting sat +seeing saw sleeping slept +seeing saw slowing slowed +seeing saw spending spent +seeing saw striking struck +seeing saw swimming swam +seeing saw taking took +seeing saw thinking thought +seeing saw vanishing vanished +seeing saw walking walked +seeing saw writing wrote +seeing saw dancing danced +seeing saw decreasing decreased +seeing saw describing described +seeing saw enhancing enhanced +seeing saw falling fell +seeing saw feeding fed +seeing saw flying flew +seeing saw generating generated +seeing saw going went +seeing saw hiding hid +seeing saw hitting hit +seeing saw implementing implemented +seeing saw increasing increased +seeing saw jumping jumped +seeing saw knowing knew +seeing saw listening listened +seeing saw looking looked +seeing saw moving moved +seeing saw paying paid +seeing saw playing played +seeing saw predicting predicted +seeing saw reading read +seeing saw running ran +seeing saw saying said +seeing saw screaming screamed +selling sold shrinking shrank +selling sold singing sang +selling sold sitting sat +selling sold sleeping slept +selling sold slowing slowed +selling sold spending spent +selling sold striking struck +selling sold swimming swam +selling sold taking took +selling sold thinking thought +selling sold vanishing vanished +selling sold walking walked +selling sold writing wrote +selling sold dancing danced +selling sold decreasing decreased +selling sold describing described +selling sold enhancing enhanced +selling sold falling fell +selling sold feeding fed +selling sold flying flew +selling sold generating generated +selling sold going went +selling sold hiding hid +selling sold hitting hit +selling sold implementing implemented +selling sold increasing increased +selling sold jumping jumped +selling sold knowing knew +selling sold listening listened +selling sold looking looked +selling sold moving moved +selling sold paying paid +selling sold playing played +selling sold predicting predicted +selling sold reading read +selling sold running ran +selling sold saying said +selling sold screaming screamed +selling sold seeing saw +shrinking shrank singing sang +shrinking shrank sitting sat +shrinking shrank sleeping slept +shrinking shrank slowing slowed +shrinking shrank spending spent +shrinking shrank striking struck +shrinking shrank swimming swam +shrinking shrank taking took +shrinking shrank thinking thought +shrinking shrank vanishing vanished +shrinking shrank walking walked +shrinking shrank writing wrote +shrinking shrank dancing danced +shrinking shrank decreasing decreased +shrinking shrank describing described +shrinking shrank enhancing enhanced +shrinking shrank falling fell +shrinking shrank feeding fed +shrinking shrank flying flew +shrinking shrank generating generated +shrinking shrank going went +shrinking shrank hiding hid +shrinking shrank hitting hit +shrinking shrank implementing implemented +shrinking shrank increasing increased +shrinking shrank jumping jumped +shrinking shrank knowing knew +shrinking shrank listening listened +shrinking shrank looking looked +shrinking shrank moving moved +shrinking shrank paying paid +shrinking shrank playing played +shrinking shrank predicting predicted +shrinking shrank reading read +shrinking shrank running ran +shrinking shrank saying said +shrinking shrank screaming screamed +shrinking shrank seeing saw +shrinking shrank selling sold +singing sang sitting sat +singing sang sleeping slept +singing sang slowing slowed +singing sang spending spent +singing sang striking struck +singing sang swimming swam +singing sang taking took +singing sang thinking thought +singing sang vanishing vanished +singing sang walking walked +singing sang writing wrote +singing sang dancing danced +singing sang decreasing decreased +singing sang describing described +singing sang enhancing enhanced +singing sang falling fell +singing sang feeding fed +singing sang flying flew +singing sang generating generated +singing sang going went +singing sang hiding hid +singing sang hitting hit +singing sang implementing implemented +singing sang increasing increased +singing sang jumping jumped +singing sang knowing knew +singing sang listening listened +singing sang looking looked +singing sang moving moved +singing sang paying paid +singing sang playing played +singing sang predicting predicted +singing sang reading read +singing sang running ran +singing sang saying said +singing sang screaming screamed +singing sang seeing saw +singing sang selling sold +singing sang shrinking shrank +sitting sat sleeping slept +sitting sat slowing slowed +sitting sat spending spent +sitting sat striking struck +sitting sat swimming swam +sitting sat taking took +sitting sat thinking thought +sitting sat vanishing vanished +sitting sat walking walked +sitting sat writing wrote +sitting sat dancing danced +sitting sat decreasing decreased +sitting sat describing described +sitting sat enhancing enhanced +sitting sat falling fell +sitting sat feeding fed +sitting sat flying flew +sitting sat generating generated +sitting sat going went +sitting sat hiding hid +sitting sat hitting hit +sitting sat implementing implemented +sitting sat increasing increased +sitting sat jumping jumped +sitting sat knowing knew +sitting sat listening listened +sitting sat looking looked +sitting sat moving moved +sitting sat paying paid +sitting sat playing played +sitting sat predicting predicted +sitting sat reading read +sitting sat running ran +sitting sat saying said +sitting sat screaming screamed +sitting sat seeing saw +sitting sat selling sold +sitting sat shrinking shrank +sitting sat singing sang +sleeping slept slowing slowed +sleeping slept spending spent +sleeping slept striking struck +sleeping slept swimming swam +sleeping slept taking took +sleeping slept thinking thought +sleeping slept vanishing vanished +sleeping slept walking walked +sleeping slept writing wrote +sleeping slept dancing danced +sleeping slept decreasing decreased +sleeping slept describing described +sleeping slept enhancing enhanced +sleeping slept falling fell +sleeping slept feeding fed +sleeping slept flying flew +sleeping slept generating generated +sleeping slept going went +sleeping slept hiding hid +sleeping slept hitting hit +sleeping slept implementing implemented +sleeping slept increasing increased +sleeping slept jumping jumped +sleeping slept knowing knew +sleeping slept listening listened +sleeping slept looking looked +sleeping slept moving moved +sleeping slept paying paid +sleeping slept playing played +sleeping slept predicting predicted +sleeping slept reading read +sleeping slept running ran +sleeping slept saying said +sleeping slept screaming screamed +sleeping slept seeing saw +sleeping slept selling sold +sleeping slept shrinking shrank +sleeping slept singing sang +sleeping slept sitting sat +slowing slowed spending spent +slowing slowed striking struck +slowing slowed swimming swam +slowing slowed taking took +slowing slowed thinking thought +slowing slowed vanishing vanished +slowing slowed walking walked +slowing slowed writing wrote +slowing slowed dancing danced +slowing slowed decreasing decreased +slowing slowed describing described +slowing slowed enhancing enhanced +slowing slowed falling fell +slowing slowed feeding fed +slowing slowed flying flew +slowing slowed generating generated +slowing slowed going went +slowing slowed hiding hid +slowing slowed hitting hit +slowing slowed implementing implemented +slowing slowed increasing increased +slowing slowed jumping jumped +slowing slowed knowing knew +slowing slowed listening listened +slowing slowed looking looked +slowing slowed moving moved +slowing slowed paying paid +slowing slowed playing played +slowing slowed predicting predicted +slowing slowed reading read +slowing slowed running ran +slowing slowed saying said +slowing slowed screaming screamed +slowing slowed seeing saw +slowing slowed selling sold +slowing slowed shrinking shrank +slowing slowed singing sang +slowing slowed sitting sat +slowing slowed sleeping slept +spending spent striking struck +spending spent swimming swam +spending spent taking took +spending spent thinking thought +spending spent vanishing vanished +spending spent walking walked +spending spent writing wrote +spending spent dancing danced +spending spent decreasing decreased +spending spent describing described +spending spent enhancing enhanced +spending spent falling fell +spending spent feeding fed +spending spent flying flew +spending spent generating generated +spending spent going went +spending spent hiding hid +spending spent hitting hit +spending spent implementing implemented +spending spent increasing increased +spending spent jumping jumped +spending spent knowing knew +spending spent listening listened +spending spent looking looked +spending spent moving moved +spending spent paying paid +spending spent playing played +spending spent predicting predicted +spending spent reading read +spending spent running ran +spending spent saying said +spending spent screaming screamed +spending spent seeing saw +spending spent selling sold +spending spent shrinking shrank +spending spent singing sang +spending spent sitting sat +spending spent sleeping slept +spending spent slowing slowed +striking struck swimming swam +striking struck taking took +striking struck thinking thought +striking struck vanishing vanished +striking struck walking walked +striking struck writing wrote +striking struck dancing danced +striking struck decreasing decreased +striking struck describing described +striking struck enhancing enhanced +striking struck falling fell +striking struck feeding fed +striking struck flying flew +striking struck generating generated +striking struck going went +striking struck hiding hid +striking struck hitting hit +striking struck implementing implemented +striking struck increasing increased +striking struck jumping jumped +striking struck knowing knew +striking struck listening listened +striking struck looking looked +striking struck moving moved +striking struck paying paid +striking struck playing played +striking struck predicting predicted +striking struck reading read +striking struck running ran +striking struck saying said +striking struck screaming screamed +striking struck seeing saw +striking struck selling sold +striking struck shrinking shrank +striking struck singing sang +striking struck sitting sat +striking struck sleeping slept +striking struck slowing slowed +striking struck spending spent +swimming swam taking took +swimming swam thinking thought +swimming swam vanishing vanished +swimming swam walking walked +swimming swam writing wrote +swimming swam dancing danced +swimming swam decreasing decreased +swimming swam describing described +swimming swam enhancing enhanced +swimming swam falling fell +swimming swam feeding fed +swimming swam flying flew +swimming swam generating generated +swimming swam going went +swimming swam hiding hid +swimming swam hitting hit +swimming swam implementing implemented +swimming swam increasing increased +swimming swam jumping jumped +swimming swam knowing knew +swimming swam listening listened +swimming swam looking looked +swimming swam moving moved +swimming swam paying paid +swimming swam playing played +swimming swam predicting predicted +swimming swam reading read +swimming swam running ran +swimming swam saying said +swimming swam screaming screamed +swimming swam seeing saw +swimming swam selling sold +swimming swam shrinking shrank +swimming swam singing sang +swimming swam sitting sat +swimming swam sleeping slept +swimming swam slowing slowed +swimming swam spending spent +swimming swam striking struck +taking took thinking thought +taking took vanishing vanished +taking took walking walked +taking took writing wrote +taking took dancing danced +taking took decreasing decreased +taking took describing described +taking took enhancing enhanced +taking took falling fell +taking took feeding fed +taking took flying flew +taking took generating generated +taking took going went +taking took hiding hid +taking took hitting hit +taking took implementing implemented +taking took increasing increased +taking took jumping jumped +taking took knowing knew +taking took listening listened +taking took looking looked +taking took moving moved +taking took paying paid +taking took playing played +taking took predicting predicted +taking took reading read +taking took running ran +taking took saying said +taking took screaming screamed +taking took seeing saw +taking took selling sold +taking took shrinking shrank +taking took singing sang +taking took sitting sat +taking took sleeping slept +taking took slowing slowed +taking took spending spent +taking took striking struck +taking took swimming swam +thinking thought vanishing vanished +thinking thought walking walked +thinking thought writing wrote +thinking thought dancing danced +thinking thought decreasing decreased +thinking thought describing described +thinking thought enhancing enhanced +thinking thought falling fell +thinking thought feeding fed +thinking thought flying flew +thinking thought generating generated +thinking thought going went +thinking thought hiding hid +thinking thought hitting hit +thinking thought implementing implemented +thinking thought increasing increased +thinking thought jumping jumped +thinking thought knowing knew +thinking thought listening listened +thinking thought looking looked +thinking thought moving moved +thinking thought paying paid +thinking thought playing played +thinking thought predicting predicted +thinking thought reading read +thinking thought running ran +thinking thought saying said +thinking thought screaming screamed +thinking thought seeing saw +thinking thought selling sold +thinking thought shrinking shrank +thinking thought singing sang +thinking thought sitting sat +thinking thought sleeping slept +thinking thought slowing slowed +thinking thought spending spent +thinking thought striking struck +thinking thought swimming swam +thinking thought taking took +vanishing vanished walking walked +vanishing vanished writing wrote +vanishing vanished dancing danced +vanishing vanished decreasing decreased +vanishing vanished describing described +vanishing vanished enhancing enhanced +vanishing vanished falling fell +vanishing vanished feeding fed +vanishing vanished flying flew +vanishing vanished generating generated +vanishing vanished going went +vanishing vanished hiding hid +vanishing vanished hitting hit +vanishing vanished implementing implemented +vanishing vanished increasing increased +vanishing vanished jumping jumped +vanishing vanished knowing knew +vanishing vanished listening listened +vanishing vanished looking looked +vanishing vanished moving moved +vanishing vanished paying paid +vanishing vanished playing played +vanishing vanished predicting predicted +vanishing vanished reading read +vanishing vanished running ran +vanishing vanished saying said +vanishing vanished screaming screamed +vanishing vanished seeing saw +vanishing vanished selling sold +vanishing vanished shrinking shrank +vanishing vanished singing sang +vanishing vanished sitting sat +vanishing vanished sleeping slept +vanishing vanished slowing slowed +vanishing vanished spending spent +vanishing vanished striking struck +vanishing vanished swimming swam +vanishing vanished taking took +vanishing vanished thinking thought +walking walked writing wrote +walking walked dancing danced +walking walked decreasing decreased +walking walked describing described +walking walked enhancing enhanced +walking walked falling fell +walking walked feeding fed +walking walked flying flew +walking walked generating generated +walking walked going went +walking walked hiding hid +walking walked hitting hit +walking walked implementing implemented +walking walked increasing increased +walking walked jumping jumped +walking walked knowing knew +walking walked listening listened +walking walked looking looked +walking walked moving moved +walking walked paying paid +walking walked playing played +walking walked predicting predicted +walking walked reading read +walking walked running ran +walking walked saying said +walking walked screaming screamed +walking walked seeing saw +walking walked selling sold +walking walked shrinking shrank +walking walked singing sang +walking walked sitting sat +walking walked sleeping slept +walking walked slowing slowed +walking walked spending spent +walking walked striking struck +walking walked swimming swam +walking walked taking took +walking walked thinking thought +walking walked vanishing vanished +writing wrote dancing danced +writing wrote decreasing decreased +writing wrote describing described +writing wrote enhancing enhanced +writing wrote falling fell +writing wrote feeding fed +writing wrote flying flew +writing wrote generating generated +writing wrote going went +writing wrote hiding hid +writing wrote hitting hit +writing wrote implementing implemented +writing wrote increasing increased +writing wrote jumping jumped +writing wrote knowing knew +writing wrote listening listened +writing wrote looking looked +writing wrote moving moved +writing wrote paying paid +writing wrote playing played +writing wrote predicting predicted +writing wrote reading read +writing wrote running ran +writing wrote saying said +writing wrote screaming screamed +writing wrote seeing saw +writing wrote selling sold +writing wrote shrinking shrank +writing wrote singing sang +writing wrote sitting sat +writing wrote sleeping slept +writing wrote slowing slowed +writing wrote spending spent +writing wrote striking struck +writing wrote swimming swam +writing wrote taking took +writing wrote thinking thought +writing wrote vanishing vanished +writing wrote walking walked +: gram8-plural +banana bananas bird birds +banana bananas bottle bottles +banana bananas building buildings +banana bananas car cars +banana bananas cat cats +banana bananas child children +banana bananas cloud clouds +banana bananas color colors +banana bananas computer computers +banana bananas cow cows +banana bananas dog dogs +banana bananas dollar dollars +banana bananas donkey donkeys +banana bananas dream dreams +banana bananas eagle eagles +banana bananas elephant elephants +banana bananas eye eyes +banana bananas finger fingers +banana bananas goat goats +banana bananas hand hands +banana bananas horse horses +banana bananas lion lions +banana bananas machine machines +banana bananas mango mangoes +banana bananas man men +banana bananas melon melons +banana bananas monkey monkeys +banana bananas mouse mice +banana bananas onion onions +banana bananas pear pears +banana bananas pig pigs +banana bananas pineapple pineapples +banana bananas rat rats +banana bananas road roads +banana bananas snake snakes +banana bananas woman women +bird birds bottle bottles +bird birds building buildings +bird birds car cars +bird birds cat cats +bird birds child children +bird birds cloud clouds +bird birds color colors +bird birds computer computers +bird birds cow cows +bird birds dog dogs +bird birds dollar dollars +bird birds donkey donkeys +bird birds dream dreams +bird birds eagle eagles +bird birds elephant elephants +bird birds eye eyes +bird birds finger fingers +bird birds goat goats +bird birds hand hands +bird birds horse horses +bird birds lion lions +bird birds machine machines +bird birds mango mangoes +bird birds man men +bird birds melon melons +bird birds monkey monkeys +bird birds mouse mice +bird birds onion onions +bird birds pear pears +bird birds pig pigs +bird birds pineapple pineapples +bird birds rat rats +bird birds road roads +bird birds snake snakes +bird birds woman women +bird birds banana bananas +bottle bottles building buildings +bottle bottles car cars +bottle bottles cat cats +bottle bottles child children +bottle bottles cloud clouds +bottle bottles color colors +bottle bottles computer computers +bottle bottles cow cows +bottle bottles dog dogs +bottle bottles dollar dollars +bottle bottles donkey donkeys +bottle bottles dream dreams +bottle bottles eagle eagles +bottle bottles elephant elephants +bottle bottles eye eyes +bottle bottles finger fingers +bottle bottles goat goats +bottle bottles hand hands +bottle bottles horse horses +bottle bottles lion lions +bottle bottles machine machines +bottle bottles mango mangoes +bottle bottles man men +bottle bottles melon melons +bottle bottles monkey monkeys +bottle bottles mouse mice +bottle bottles onion onions +bottle bottles pear pears +bottle bottles pig pigs +bottle bottles pineapple pineapples +bottle bottles rat rats +bottle bottles road roads +bottle bottles snake snakes +bottle bottles woman women +bottle bottles banana bananas +bottle bottles bird birds +building buildings car cars +building buildings cat cats +building buildings child children +building buildings cloud clouds +building buildings color colors +building buildings computer computers +building buildings cow cows +building buildings dog dogs +building buildings dollar dollars +building buildings donkey donkeys +building buildings dream dreams +building buildings eagle eagles +building buildings elephant elephants +building buildings eye eyes +building buildings finger fingers +building buildings goat goats +building buildings hand hands +building buildings horse horses +building buildings lion lions +building buildings machine machines +building buildings mango mangoes +building buildings man men +building buildings melon melons +building buildings monkey monkeys +building buildings mouse mice +building buildings onion onions +building buildings pear pears +building buildings pig pigs +building buildings pineapple pineapples +building buildings rat rats +building buildings road roads +building buildings snake snakes +building buildings woman women +building buildings banana bananas +building buildings bird birds +building buildings bottle bottles +car cars cat cats +car cars child children +car cars cloud clouds +car cars color colors +car cars computer computers +car cars cow cows +car cars dog dogs +car cars dollar dollars +car cars donkey donkeys +car cars dream dreams +car cars eagle eagles +car cars elephant elephants +car cars eye eyes +car cars finger fingers +car cars goat goats +car cars hand hands +car cars horse horses +car cars lion lions +car cars machine machines +car cars mango mangoes +car cars man men +car cars melon melons +car cars monkey monkeys +car cars mouse mice +car cars onion onions +car cars pear pears +car cars pig pigs +car cars pineapple pineapples +car cars rat rats +car cars road roads +car cars snake snakes +car cars woman women +car cars banana bananas +car cars bird birds +car cars bottle bottles +car cars building buildings +cat cats child children +cat cats cloud clouds +cat cats color colors +cat cats computer computers +cat cats cow cows +cat cats dog dogs +cat cats dollar dollars +cat cats donkey donkeys +cat cats dream dreams +cat cats eagle eagles +cat cats elephant elephants +cat cats eye eyes +cat cats finger fingers +cat cats goat goats +cat cats hand hands +cat cats horse horses +cat cats lion lions +cat cats machine machines +cat cats mango mangoes +cat cats man men +cat cats melon melons +cat cats monkey monkeys +cat cats mouse mice +cat cats onion onions +cat cats pear pears +cat cats pig pigs +cat cats pineapple pineapples +cat cats rat rats +cat cats road roads +cat cats snake snakes +cat cats woman women +cat cats banana bananas +cat cats bird birds +cat cats bottle bottles +cat cats building buildings +cat cats car cars +child children cloud clouds +child children color colors +child children computer computers +child children cow cows +child children dog dogs +child children dollar dollars +child children donkey donkeys +child children dream dreams +child children eagle eagles +child children elephant elephants +child children eye eyes +child children finger fingers +child children goat goats +child children hand hands +child children horse horses +child children lion lions +child children machine machines +child children mango mangoes +child children man men +child children melon melons +child children monkey monkeys +child children mouse mice +child children onion onions +child children pear pears +child children pig pigs +child children pineapple pineapples +child children rat rats +child children road roads +child children snake snakes +child children woman women +child children banana bananas +child children bird birds +child children bottle bottles +child children building buildings +child children car cars +child children cat cats +cloud clouds color colors +cloud clouds computer computers +cloud clouds cow cows +cloud clouds dog dogs +cloud clouds dollar dollars +cloud clouds donkey donkeys +cloud clouds dream dreams +cloud clouds eagle eagles +cloud clouds elephant elephants +cloud clouds eye eyes +cloud clouds finger fingers +cloud clouds goat goats +cloud clouds hand hands +cloud clouds horse horses +cloud clouds lion lions +cloud clouds machine machines +cloud clouds mango mangoes +cloud clouds man men +cloud clouds melon melons +cloud clouds monkey monkeys +cloud clouds mouse mice +cloud clouds onion onions +cloud clouds pear pears +cloud clouds pig pigs +cloud clouds pineapple pineapples +cloud clouds rat rats +cloud clouds road roads +cloud clouds snake snakes +cloud clouds woman women +cloud clouds banana bananas +cloud clouds bird birds +cloud clouds bottle bottles +cloud clouds building buildings +cloud clouds car cars +cloud clouds cat cats +cloud clouds child children +color colors computer computers +color colors cow cows +color colors dog dogs +color colors dollar dollars +color colors donkey donkeys +color colors dream dreams +color colors eagle eagles +color colors elephant elephants +color colors eye eyes +color colors finger fingers +color colors goat goats +color colors hand hands +color colors horse horses +color colors lion lions +color colors machine machines +color colors mango mangoes +color colors man men +color colors melon melons +color colors monkey monkeys +color colors mouse mice +color colors onion onions +color colors pear pears +color colors pig pigs +color colors pineapple pineapples +color colors rat rats +color colors road roads +color colors snake snakes +color colors woman women +color colors banana bananas +color colors bird birds +color colors bottle bottles +color colors building buildings +color colors car cars +color colors cat cats +color colors child children +color colors cloud clouds +computer computers cow cows +computer computers dog dogs +computer computers dollar dollars +computer computers donkey donkeys +computer computers dream dreams +computer computers eagle eagles +computer computers elephant elephants +computer computers eye eyes +computer computers finger fingers +computer computers goat goats +computer computers hand hands +computer computers horse horses +computer computers lion lions +computer computers machine machines +computer computers mango mangoes +computer computers man men +computer computers melon melons +computer computers monkey monkeys +computer computers mouse mice +computer computers onion onions +computer computers pear pears +computer computers pig pigs +computer computers pineapple pineapples +computer computers rat rats +computer computers road roads +computer computers snake snakes +computer computers woman women +computer computers banana bananas +computer computers bird birds +computer computers bottle bottles +computer computers building buildings +computer computers car cars +computer computers cat cats +computer computers child children +computer computers cloud clouds +computer computers color colors +cow cows dog dogs +cow cows dollar dollars +cow cows donkey donkeys +cow cows dream dreams +cow cows eagle eagles +cow cows elephant elephants +cow cows eye eyes +cow cows finger fingers +cow cows goat goats +cow cows hand hands +cow cows horse horses +cow cows lion lions +cow cows machine machines +cow cows mango mangoes +cow cows man men +cow cows melon melons +cow cows monkey monkeys +cow cows mouse mice +cow cows onion onions +cow cows pear pears +cow cows pig pigs +cow cows pineapple pineapples +cow cows rat rats +cow cows road roads +cow cows snake snakes +cow cows woman women +cow cows banana bananas +cow cows bird birds +cow cows bottle bottles +cow cows building buildings +cow cows car cars +cow cows cat cats +cow cows child children +cow cows cloud clouds +cow cows color colors +cow cows computer computers +dog dogs dollar dollars +dog dogs donkey donkeys +dog dogs dream dreams +dog dogs eagle eagles +dog dogs elephant elephants +dog dogs eye eyes +dog dogs finger fingers +dog dogs goat goats +dog dogs hand hands +dog dogs horse horses +dog dogs lion lions +dog dogs machine machines +dog dogs mango mangoes +dog dogs man men +dog dogs melon melons +dog dogs monkey monkeys +dog dogs mouse mice +dog dogs onion onions +dog dogs pear pears +dog dogs pig pigs +dog dogs pineapple pineapples +dog dogs rat rats +dog dogs road roads +dog dogs snake snakes +dog dogs woman women +dog dogs banana bananas +dog dogs bird birds +dog dogs bottle bottles +dog dogs building buildings +dog dogs car cars +dog dogs cat cats +dog dogs child children +dog dogs cloud clouds +dog dogs color colors +dog dogs computer computers +dog dogs cow cows +dollar dollars donkey donkeys +dollar dollars dream dreams +dollar dollars eagle eagles +dollar dollars elephant elephants +dollar dollars eye eyes +dollar dollars finger fingers +dollar dollars goat goats +dollar dollars hand hands +dollar dollars horse horses +dollar dollars lion lions +dollar dollars machine machines +dollar dollars mango mangoes +dollar dollars man men +dollar dollars melon melons +dollar dollars monkey monkeys +dollar dollars mouse mice +dollar dollars onion onions +dollar dollars pear pears +dollar dollars pig pigs +dollar dollars pineapple pineapples +dollar dollars rat rats +dollar dollars road roads +dollar dollars snake snakes +dollar dollars woman women +dollar dollars banana bananas +dollar dollars bird birds +dollar dollars bottle bottles +dollar dollars building buildings +dollar dollars car cars +dollar dollars cat cats +dollar dollars child children +dollar dollars cloud clouds +dollar dollars color colors +dollar dollars computer computers +dollar dollars cow cows +dollar dollars dog dogs +donkey donkeys dream dreams +donkey donkeys eagle eagles +donkey donkeys elephant elephants +donkey donkeys eye eyes +donkey donkeys finger fingers +donkey donkeys goat goats +donkey donkeys hand hands +donkey donkeys horse horses +donkey donkeys lion lions +donkey donkeys machine machines +donkey donkeys mango mangoes +donkey donkeys man men +donkey donkeys melon melons +donkey donkeys monkey monkeys +donkey donkeys mouse mice +donkey donkeys onion onions +donkey donkeys pear pears +donkey donkeys pig pigs +donkey donkeys pineapple pineapples +donkey donkeys rat rats +donkey donkeys road roads +donkey donkeys snake snakes +donkey donkeys woman women +donkey donkeys banana bananas +donkey donkeys bird birds +donkey donkeys bottle bottles +donkey donkeys building buildings +donkey donkeys car cars +donkey donkeys cat cats +donkey donkeys child children +donkey donkeys cloud clouds +donkey donkeys color colors +donkey donkeys computer computers +donkey donkeys cow cows +donkey donkeys dog dogs +donkey donkeys dollar dollars +dream dreams eagle eagles +dream dreams elephant elephants +dream dreams eye eyes +dream dreams finger fingers +dream dreams goat goats +dream dreams hand hands +dream dreams horse horses +dream dreams lion lions +dream dreams machine machines +dream dreams mango mangoes +dream dreams man men +dream dreams melon melons +dream dreams monkey monkeys +dream dreams mouse mice +dream dreams onion onions +dream dreams pear pears +dream dreams pig pigs +dream dreams pineapple pineapples +dream dreams rat rats +dream dreams road roads +dream dreams snake snakes +dream dreams woman women +dream dreams banana bananas +dream dreams bird birds +dream dreams bottle bottles +dream dreams building buildings +dream dreams car cars +dream dreams cat cats +dream dreams child children +dream dreams cloud clouds +dream dreams color colors +dream dreams computer computers +dream dreams cow cows +dream dreams dog dogs +dream dreams dollar dollars +dream dreams donkey donkeys +eagle eagles elephant elephants +eagle eagles eye eyes +eagle eagles finger fingers +eagle eagles goat goats +eagle eagles hand hands +eagle eagles horse horses +eagle eagles lion lions +eagle eagles machine machines +eagle eagles mango mangoes +eagle eagles man men +eagle eagles melon melons +eagle eagles monkey monkeys +eagle eagles mouse mice +eagle eagles onion onions +eagle eagles pear pears +eagle eagles pig pigs +eagle eagles pineapple pineapples +eagle eagles rat rats +eagle eagles road roads +eagle eagles snake snakes +eagle eagles woman women +eagle eagles banana bananas +eagle eagles bird birds +eagle eagles bottle bottles +eagle eagles building buildings +eagle eagles car cars +eagle eagles cat cats +eagle eagles child children +eagle eagles cloud clouds +eagle eagles color colors +eagle eagles computer computers +eagle eagles cow cows +eagle eagles dog dogs +eagle eagles dollar dollars +eagle eagles donkey donkeys +eagle eagles dream dreams +elephant elephants eye eyes +elephant elephants finger fingers +elephant elephants goat goats +elephant elephants hand hands +elephant elephants horse horses +elephant elephants lion lions +elephant elephants machine machines +elephant elephants mango mangoes +elephant elephants man men +elephant elephants melon melons +elephant elephants monkey monkeys +elephant elephants mouse mice +elephant elephants onion onions +elephant elephants pear pears +elephant elephants pig pigs +elephant elephants pineapple pineapples +elephant elephants rat rats +elephant elephants road roads +elephant elephants snake snakes +elephant elephants woman women +elephant elephants banana bananas +elephant elephants bird birds +elephant elephants bottle bottles +elephant elephants building buildings +elephant elephants car cars +elephant elephants cat cats +elephant elephants child children +elephant elephants cloud clouds +elephant elephants color colors +elephant elephants computer computers +elephant elephants cow cows +elephant elephants dog dogs +elephant elephants dollar dollars +elephant elephants donkey donkeys +elephant elephants dream dreams +elephant elephants eagle eagles +eye eyes finger fingers +eye eyes goat goats +eye eyes hand hands +eye eyes horse horses +eye eyes lion lions +eye eyes machine machines +eye eyes mango mangoes +eye eyes man men +eye eyes melon melons +eye eyes monkey monkeys +eye eyes mouse mice +eye eyes onion onions +eye eyes pear pears +eye eyes pig pigs +eye eyes pineapple pineapples +eye eyes rat rats +eye eyes road roads +eye eyes snake snakes +eye eyes woman women +eye eyes banana bananas +eye eyes bird birds +eye eyes bottle bottles +eye eyes building buildings +eye eyes car cars +eye eyes cat cats +eye eyes child children +eye eyes cloud clouds +eye eyes color colors +eye eyes computer computers +eye eyes cow cows +eye eyes dog dogs +eye eyes dollar dollars +eye eyes donkey donkeys +eye eyes dream dreams +eye eyes eagle eagles +eye eyes elephant elephants +finger fingers goat goats +finger fingers hand hands +finger fingers horse horses +finger fingers lion lions +finger fingers machine machines +finger fingers mango mangoes +finger fingers man men +finger fingers melon melons +finger fingers monkey monkeys +finger fingers mouse mice +finger fingers onion onions +finger fingers pear pears +finger fingers pig pigs +finger fingers pineapple pineapples +finger fingers rat rats +finger fingers road roads +finger fingers snake snakes +finger fingers woman women +finger fingers banana bananas +finger fingers bird birds +finger fingers bottle bottles +finger fingers building buildings +finger fingers car cars +finger fingers cat cats +finger fingers child children +finger fingers cloud clouds +finger fingers color colors +finger fingers computer computers +finger fingers cow cows +finger fingers dog dogs +finger fingers dollar dollars +finger fingers donkey donkeys +finger fingers dream dreams +finger fingers eagle eagles +finger fingers elephant elephants +finger fingers eye eyes +goat goats hand hands +goat goats horse horses +goat goats lion lions +goat goats machine machines +goat goats mango mangoes +goat goats man men +goat goats melon melons +goat goats monkey monkeys +goat goats mouse mice +goat goats onion onions +goat goats pear pears +goat goats pig pigs +goat goats pineapple pineapples +goat goats rat rats +goat goats road roads +goat goats snake snakes +goat goats woman women +goat goats banana bananas +goat goats bird birds +goat goats bottle bottles +goat goats building buildings +goat goats car cars +goat goats cat cats +goat goats child children +goat goats cloud clouds +goat goats color colors +goat goats computer computers +goat goats cow cows +goat goats dog dogs +goat goats dollar dollars +goat goats donkey donkeys +goat goats dream dreams +goat goats eagle eagles +goat goats elephant elephants +goat goats eye eyes +goat goats finger fingers +hand hands horse horses +hand hands lion lions +hand hands machine machines +hand hands mango mangoes +hand hands man men +hand hands melon melons +hand hands monkey monkeys +hand hands mouse mice +hand hands onion onions +hand hands pear pears +hand hands pig pigs +hand hands pineapple pineapples +hand hands rat rats +hand hands road roads +hand hands snake snakes +hand hands woman women +hand hands banana bananas +hand hands bird birds +hand hands bottle bottles +hand hands building buildings +hand hands car cars +hand hands cat cats +hand hands child children +hand hands cloud clouds +hand hands color colors +hand hands computer computers +hand hands cow cows +hand hands dog dogs +hand hands dollar dollars +hand hands donkey donkeys +hand hands dream dreams +hand hands eagle eagles +hand hands elephant elephants +hand hands eye eyes +hand hands finger fingers +hand hands goat goats +horse horses lion lions +horse horses machine machines +horse horses mango mangoes +horse horses man men +horse horses melon melons +horse horses monkey monkeys +horse horses mouse mice +horse horses onion onions +horse horses pear pears +horse horses pig pigs +horse horses pineapple pineapples +horse horses rat rats +horse horses road roads +horse horses snake snakes +horse horses woman women +horse horses banana bananas +horse horses bird birds +horse horses bottle bottles +horse horses building buildings +horse horses car cars +horse horses cat cats +horse horses child children +horse horses cloud clouds +horse horses color colors +horse horses computer computers +horse horses cow cows +horse horses dog dogs +horse horses dollar dollars +horse horses donkey donkeys +horse horses dream dreams +horse horses eagle eagles +horse horses elephant elephants +horse horses eye eyes +horse horses finger fingers +horse horses goat goats +horse horses hand hands +lion lions machine machines +lion lions mango mangoes +lion lions man men +lion lions melon melons +lion lions monkey monkeys +lion lions mouse mice +lion lions onion onions +lion lions pear pears +lion lions pig pigs +lion lions pineapple pineapples +lion lions rat rats +lion lions road roads +lion lions snake snakes +lion lions woman women +lion lions banana bananas +lion lions bird birds +lion lions bottle bottles +lion lions building buildings +lion lions car cars +lion lions cat cats +lion lions child children +lion lions cloud clouds +lion lions color colors +lion lions computer computers +lion lions cow cows +lion lions dog dogs +lion lions dollar dollars +lion lions donkey donkeys +lion lions dream dreams +lion lions eagle eagles +lion lions elephant elephants +lion lions eye eyes +lion lions finger fingers +lion lions goat goats +lion lions hand hands +lion lions horse horses +machine machines mango mangoes +machine machines man men +machine machines melon melons +machine machines monkey monkeys +machine machines mouse mice +machine machines onion onions +machine machines pear pears +machine machines pig pigs +machine machines pineapple pineapples +machine machines rat rats +machine machines road roads +machine machines snake snakes +machine machines woman women +machine machines banana bananas +machine machines bird birds +machine machines bottle bottles +machine machines building buildings +machine machines car cars +machine machines cat cats +machine machines child children +machine machines cloud clouds +machine machines color colors +machine machines computer computers +machine machines cow cows +machine machines dog dogs +machine machines dollar dollars +machine machines donkey donkeys +machine machines dream dreams +machine machines eagle eagles +machine machines elephant elephants +machine machines eye eyes +machine machines finger fingers +machine machines goat goats +machine machines hand hands +machine machines horse horses +machine machines lion lions +mango mangoes man men +mango mangoes melon melons +mango mangoes monkey monkeys +mango mangoes mouse mice +mango mangoes onion onions +mango mangoes pear pears +mango mangoes pig pigs +mango mangoes pineapple pineapples +mango mangoes rat rats +mango mangoes road roads +mango mangoes snake snakes +mango mangoes woman women +mango mangoes banana bananas +mango mangoes bird birds +mango mangoes bottle bottles +mango mangoes building buildings +mango mangoes car cars +mango mangoes cat cats +mango mangoes child children +mango mangoes cloud clouds +mango mangoes color colors +mango mangoes computer computers +mango mangoes cow cows +mango mangoes dog dogs +mango mangoes dollar dollars +mango mangoes donkey donkeys +mango mangoes dream dreams +mango mangoes eagle eagles +mango mangoes elephant elephants +mango mangoes eye eyes +mango mangoes finger fingers +mango mangoes goat goats +mango mangoes hand hands +mango mangoes horse horses +mango mangoes lion lions +mango mangoes machine machines +man men melon melons +man men monkey monkeys +man men mouse mice +man men onion onions +man men pear pears +man men pig pigs +man men pineapple pineapples +man men rat rats +man men road roads +man men snake snakes +man men woman women +man men banana bananas +man men bird birds +man men bottle bottles +man men building buildings +man men car cars +man men cat cats +man men child children +man men cloud clouds +man men color colors +man men computer computers +man men cow cows +man men dog dogs +man men dollar dollars +man men donkey donkeys +man men dream dreams +man men eagle eagles +man men elephant elephants +man men eye eyes +man men finger fingers +man men goat goats +man men hand hands +man men horse horses +man men lion lions +man men machine machines +man men mango mangoes +melon melons monkey monkeys +melon melons mouse mice +melon melons onion onions +melon melons pear pears +melon melons pig pigs +melon melons pineapple pineapples +melon melons rat rats +melon melons road roads +melon melons snake snakes +melon melons woman women +melon melons banana bananas +melon melons bird birds +melon melons bottle bottles +melon melons building buildings +melon melons car cars +melon melons cat cats +melon melons child children +melon melons cloud clouds +melon melons color colors +melon melons computer computers +melon melons cow cows +melon melons dog dogs +melon melons dollar dollars +melon melons donkey donkeys +melon melons dream dreams +melon melons eagle eagles +melon melons elephant elephants +melon melons eye eyes +melon melons finger fingers +melon melons goat goats +melon melons hand hands +melon melons horse horses +melon melons lion lions +melon melons machine machines +melon melons mango mangoes +melon melons man men +monkey monkeys mouse mice +monkey monkeys onion onions +monkey monkeys pear pears +monkey monkeys pig pigs +monkey monkeys pineapple pineapples +monkey monkeys rat rats +monkey monkeys road roads +monkey monkeys snake snakes +monkey monkeys woman women +monkey monkeys banana bananas +monkey monkeys bird birds +monkey monkeys bottle bottles +monkey monkeys building buildings +monkey monkeys car cars +monkey monkeys cat cats +monkey monkeys child children +monkey monkeys cloud clouds +monkey monkeys color colors +monkey monkeys computer computers +monkey monkeys cow cows +monkey monkeys dog dogs +monkey monkeys dollar dollars +monkey monkeys donkey donkeys +monkey monkeys dream dreams +monkey monkeys eagle eagles +monkey monkeys elephant elephants +monkey monkeys eye eyes +monkey monkeys finger fingers +monkey monkeys goat goats +monkey monkeys hand hands +monkey monkeys horse horses +monkey monkeys lion lions +monkey monkeys machine machines +monkey monkeys mango mangoes +monkey monkeys man men +monkey monkeys melon melons +mouse mice onion onions +mouse mice pear pears +mouse mice pig pigs +mouse mice pineapple pineapples +mouse mice rat rats +mouse mice road roads +mouse mice snake snakes +mouse mice woman women +mouse mice banana bananas +mouse mice bird birds +mouse mice bottle bottles +mouse mice building buildings +mouse mice car cars +mouse mice cat cats +mouse mice child children +mouse mice cloud clouds +mouse mice color colors +mouse mice computer computers +mouse mice cow cows +mouse mice dog dogs +mouse mice dollar dollars +mouse mice donkey donkeys +mouse mice dream dreams +mouse mice eagle eagles +mouse mice elephant elephants +mouse mice eye eyes +mouse mice finger fingers +mouse mice goat goats +mouse mice hand hands +mouse mice horse horses +mouse mice lion lions +mouse mice machine machines +mouse mice mango mangoes +mouse mice man men +mouse mice melon melons +mouse mice monkey monkeys +onion onions pear pears +onion onions pig pigs +onion onions pineapple pineapples +onion onions rat rats +onion onions road roads +onion onions snake snakes +onion onions woman women +onion onions banana bananas +onion onions bird birds +onion onions bottle bottles +onion onions building buildings +onion onions car cars +onion onions cat cats +onion onions child children +onion onions cloud clouds +onion onions color colors +onion onions computer computers +onion onions cow cows +onion onions dog dogs +onion onions dollar dollars +onion onions donkey donkeys +onion onions dream dreams +onion onions eagle eagles +onion onions elephant elephants +onion onions eye eyes +onion onions finger fingers +onion onions goat goats +onion onions hand hands +onion onions horse horses +onion onions lion lions +onion onions machine machines +onion onions mango mangoes +onion onions man men +onion onions melon melons +onion onions monkey monkeys +onion onions mouse mice +pear pears pig pigs +pear pears pineapple pineapples +pear pears rat rats +pear pears road roads +pear pears snake snakes +pear pears woman women +pear pears banana bananas +pear pears bird birds +pear pears bottle bottles +pear pears building buildings +pear pears car cars +pear pears cat cats +pear pears child children +pear pears cloud clouds +pear pears color colors +pear pears computer computers +pear pears cow cows +pear pears dog dogs +pear pears dollar dollars +pear pears donkey donkeys +pear pears dream dreams +pear pears eagle eagles +pear pears elephant elephants +pear pears eye eyes +pear pears finger fingers +pear pears goat goats +pear pears hand hands +pear pears horse horses +pear pears lion lions +pear pears machine machines +pear pears mango mangoes +pear pears man men +pear pears melon melons +pear pears monkey monkeys +pear pears mouse mice +pear pears onion onions +pig pigs pineapple pineapples +pig pigs rat rats +pig pigs road roads +pig pigs snake snakes +pig pigs woman women +pig pigs banana bananas +pig pigs bird birds +pig pigs bottle bottles +pig pigs building buildings +pig pigs car cars +pig pigs cat cats +pig pigs child children +pig pigs cloud clouds +pig pigs color colors +pig pigs computer computers +pig pigs cow cows +pig pigs dog dogs +pig pigs dollar dollars +pig pigs donkey donkeys +pig pigs dream dreams +pig pigs eagle eagles +pig pigs elephant elephants +pig pigs eye eyes +pig pigs finger fingers +pig pigs goat goats +pig pigs hand hands +pig pigs horse horses +pig pigs lion lions +pig pigs machine machines +pig pigs mango mangoes +pig pigs man men +pig pigs melon melons +pig pigs monkey monkeys +pig pigs mouse mice +pig pigs onion onions +pig pigs pear pears +pineapple pineapples rat rats +pineapple pineapples road roads +pineapple pineapples snake snakes +pineapple pineapples woman women +pineapple pineapples banana bananas +pineapple pineapples bird birds +pineapple pineapples bottle bottles +pineapple pineapples building buildings +pineapple pineapples car cars +pineapple pineapples cat cats +pineapple pineapples child children +pineapple pineapples cloud clouds +pineapple pineapples color colors +pineapple pineapples computer computers +pineapple pineapples cow cows +pineapple pineapples dog dogs +pineapple pineapples dollar dollars +pineapple pineapples donkey donkeys +pineapple pineapples dream dreams +pineapple pineapples eagle eagles +pineapple pineapples elephant elephants +pineapple pineapples eye eyes +pineapple pineapples finger fingers +pineapple pineapples goat goats +pineapple pineapples hand hands +pineapple pineapples horse horses +pineapple pineapples lion lions +pineapple pineapples machine machines +pineapple pineapples mango mangoes +pineapple pineapples man men +pineapple pineapples melon melons +pineapple pineapples monkey monkeys +pineapple pineapples mouse mice +pineapple pineapples onion onions +pineapple pineapples pear pears +pineapple pineapples pig pigs +rat rats road roads +rat rats snake snakes +rat rats woman women +rat rats banana bananas +rat rats bird birds +rat rats bottle bottles +rat rats building buildings +rat rats car cars +rat rats cat cats +rat rats child children +rat rats cloud clouds +rat rats color colors +rat rats computer computers +rat rats cow cows +rat rats dog dogs +rat rats dollar dollars +rat rats donkey donkeys +rat rats dream dreams +rat rats eagle eagles +rat rats elephant elephants +rat rats eye eyes +rat rats finger fingers +rat rats goat goats +rat rats hand hands +rat rats horse horses +rat rats lion lions +rat rats machine machines +rat rats mango mangoes +rat rats man men +rat rats melon melons +rat rats monkey monkeys +rat rats mouse mice +rat rats onion onions +rat rats pear pears +rat rats pig pigs +rat rats pineapple pineapples +road roads snake snakes +road roads woman women +road roads banana bananas +road roads bird birds +road roads bottle bottles +road roads building buildings +road roads car cars +road roads cat cats +road roads child children +road roads cloud clouds +road roads color colors +road roads computer computers +road roads cow cows +road roads dog dogs +road roads dollar dollars +road roads donkey donkeys +road roads dream dreams +road roads eagle eagles +road roads elephant elephants +road roads eye eyes +road roads finger fingers +road roads goat goats +road roads hand hands +road roads horse horses +road roads lion lions +road roads machine machines +road roads mango mangoes +road roads man men +road roads melon melons +road roads monkey monkeys +road roads mouse mice +road roads onion onions +road roads pear pears +road roads pig pigs +road roads pineapple pineapples +road roads rat rats +snake snakes woman women +snake snakes banana bananas +snake snakes bird birds +snake snakes bottle bottles +snake snakes building buildings +snake snakes car cars +snake snakes cat cats +snake snakes child children +snake snakes cloud clouds +snake snakes color colors +snake snakes computer computers +snake snakes cow cows +snake snakes dog dogs +snake snakes dollar dollars +snake snakes donkey donkeys +snake snakes dream dreams +snake snakes eagle eagles +snake snakes elephant elephants +snake snakes eye eyes +snake snakes finger fingers +snake snakes goat goats +snake snakes hand hands +snake snakes horse horses +snake snakes lion lions +snake snakes machine machines +snake snakes mango mangoes +snake snakes man men +snake snakes melon melons +snake snakes monkey monkeys +snake snakes mouse mice +snake snakes onion onions +snake snakes pear pears +snake snakes pig pigs +snake snakes pineapple pineapples +snake snakes rat rats +snake snakes road roads +woman women banana bananas +woman women bird birds +woman women bottle bottles +woman women building buildings +woman women car cars +woman women cat cats +woman women child children +woman women cloud clouds +woman women color colors +woman women computer computers +woman women cow cows +woman women dog dogs +woman women dollar dollars +woman women donkey donkeys +woman women dream dreams +woman women eagle eagles +woman women elephant elephants +woman women eye eyes +woman women finger fingers +woman women goat goats +woman women hand hands +woman women horse horses +woman women lion lions +woman women machine machines +woman women mango mangoes +woman women man men +woman women melon melons +woman women monkey monkeys +woman women mouse mice +woman women onion onions +woman women pear pears +woman women pig pigs +woman women pineapple pineapples +woman women rat rats +woman women road roads +woman women snake snakes +: gram9-plural-verbs +decrease decreases describe describes +decrease decreases eat eats +decrease decreases enhance enhances +decrease decreases estimate estimates +decrease decreases find finds +decrease decreases generate generates +decrease decreases go goes +decrease decreases implement implements +decrease decreases increase increases +decrease decreases listen listens +decrease decreases play plays +decrease decreases predict predicts +decrease decreases provide provides +decrease decreases say says +decrease decreases scream screams +decrease decreases search searches +decrease decreases see sees +decrease decreases shuffle shuffles +decrease decreases sing sings +decrease decreases sit sits +decrease decreases slow slows +decrease decreases speak speaks +decrease decreases swim swims +decrease decreases talk talks +decrease decreases think thinks +decrease decreases vanish vanishes +decrease decreases walk walks +decrease decreases work works +decrease decreases write writes +describe describes eat eats +describe describes enhance enhances +describe describes estimate estimates +describe describes find finds +describe describes generate generates +describe describes go goes +describe describes implement implements +describe describes increase increases +describe describes listen listens +describe describes play plays +describe describes predict predicts +describe describes provide provides +describe describes say says +describe describes scream screams +describe describes search searches +describe describes see sees +describe describes shuffle shuffles +describe describes sing sings +describe describes sit sits +describe describes slow slows +describe describes speak speaks +describe describes swim swims +describe describes talk talks +describe describes think thinks +describe describes vanish vanishes +describe describes walk walks +describe describes work works +describe describes write writes +describe describes decrease decreases +eat eats enhance enhances +eat eats estimate estimates +eat eats find finds +eat eats generate generates +eat eats go goes +eat eats implement implements +eat eats increase increases +eat eats listen listens +eat eats play plays +eat eats predict predicts +eat eats provide provides +eat eats say says +eat eats scream screams +eat eats search searches +eat eats see sees +eat eats shuffle shuffles +eat eats sing sings +eat eats sit sits +eat eats slow slows +eat eats speak speaks +eat eats swim swims +eat eats talk talks +eat eats think thinks +eat eats vanish vanishes +eat eats walk walks +eat eats work works +eat eats write writes +eat eats decrease decreases +eat eats describe describes +enhance enhances estimate estimates +enhance enhances find finds +enhance enhances generate generates +enhance enhances go goes +enhance enhances implement implements +enhance enhances increase increases +enhance enhances listen listens +enhance enhances play plays +enhance enhances predict predicts +enhance enhances provide provides +enhance enhances say says +enhance enhances scream screams +enhance enhances search searches +enhance enhances see sees +enhance enhances shuffle shuffles +enhance enhances sing sings +enhance enhances sit sits +enhance enhances slow slows +enhance enhances speak speaks +enhance enhances swim swims +enhance enhances talk talks +enhance enhances think thinks +enhance enhances vanish vanishes +enhance enhances walk walks +enhance enhances work works +enhance enhances write writes +enhance enhances decrease decreases +enhance enhances describe describes +enhance enhances eat eats +estimate estimates find finds +estimate estimates generate generates +estimate estimates go goes +estimate estimates implement implements +estimate estimates increase increases +estimate estimates listen listens +estimate estimates play plays +estimate estimates predict predicts +estimate estimates provide provides +estimate estimates say says +estimate estimates scream screams +estimate estimates search searches +estimate estimates see sees +estimate estimates shuffle shuffles +estimate estimates sing sings +estimate estimates sit sits +estimate estimates slow slows +estimate estimates speak speaks +estimate estimates swim swims +estimate estimates talk talks +estimate estimates think thinks +estimate estimates vanish vanishes +estimate estimates walk walks +estimate estimates work works +estimate estimates write writes +estimate estimates decrease decreases +estimate estimates describe describes +estimate estimates eat eats +estimate estimates enhance enhances +find finds generate generates +find finds go goes +find finds implement implements +find finds increase increases +find finds listen listens +find finds play plays +find finds predict predicts +find finds provide provides +find finds say says +find finds scream screams +find finds search searches +find finds see sees +find finds shuffle shuffles +find finds sing sings +find finds sit sits +find finds slow slows +find finds speak speaks +find finds swim swims +find finds talk talks +find finds think thinks +find finds vanish vanishes +find finds walk walks +find finds work works +find finds write writes +find finds decrease decreases +find finds describe describes +find finds eat eats +find finds enhance enhances +find finds estimate estimates +generate generates go goes +generate generates implement implements +generate generates increase increases +generate generates listen listens +generate generates play plays +generate generates predict predicts +generate generates provide provides +generate generates say says +generate generates scream screams +generate generates search searches +generate generates see sees +generate generates shuffle shuffles +generate generates sing sings +generate generates sit sits +generate generates slow slows +generate generates speak speaks +generate generates swim swims +generate generates talk talks +generate generates think thinks +generate generates vanish vanishes +generate generates walk walks +generate generates work works +generate generates write writes +generate generates decrease decreases +generate generates describe describes +generate generates eat eats +generate generates enhance enhances +generate generates estimate estimates +generate generates find finds +go goes implement implements +go goes increase increases +go goes listen listens +go goes play plays +go goes predict predicts +go goes provide provides +go goes say says +go goes scream screams +go goes search searches +go goes see sees +go goes shuffle shuffles +go goes sing sings +go goes sit sits +go goes slow slows +go goes speak speaks +go goes swim swims +go goes talk talks +go goes think thinks +go goes vanish vanishes +go goes walk walks +go goes work works +go goes write writes +go goes decrease decreases +go goes describe describes +go goes eat eats +go goes enhance enhances +go goes estimate estimates +go goes find finds +go goes generate generates +implement implements increase increases +implement implements listen listens +implement implements play plays +implement implements predict predicts +implement implements provide provides +implement implements say says +implement implements scream screams +implement implements search searches +implement implements see sees +implement implements shuffle shuffles +implement implements sing sings +implement implements sit sits +implement implements slow slows +implement implements speak speaks +implement implements swim swims +implement implements talk talks +implement implements think thinks +implement implements vanish vanishes +implement implements walk walks +implement implements work works +implement implements write writes +implement implements decrease decreases +implement implements describe describes +implement implements eat eats +implement implements enhance enhances +implement implements estimate estimates +implement implements find finds +implement implements generate generates +implement implements go goes +increase increases listen listens +increase increases play plays +increase increases predict predicts +increase increases provide provides +increase increases say says +increase increases scream screams +increase increases search searches +increase increases see sees +increase increases shuffle shuffles +increase increases sing sings +increase increases sit sits +increase increases slow slows +increase increases speak speaks +increase increases swim swims +increase increases talk talks +increase increases think thinks +increase increases vanish vanishes +increase increases walk walks +increase increases work works +increase increases write writes +increase increases decrease decreases +increase increases describe describes +increase increases eat eats +increase increases enhance enhances +increase increases estimate estimates +increase increases find finds +increase increases generate generates +increase increases go goes +increase increases implement implements +listen listens play plays +listen listens predict predicts +listen listens provide provides +listen listens say says +listen listens scream screams +listen listens search searches +listen listens see sees +listen listens shuffle shuffles +listen listens sing sings +listen listens sit sits +listen listens slow slows +listen listens speak speaks +listen listens swim swims +listen listens talk talks +listen listens think thinks +listen listens vanish vanishes +listen listens walk walks +listen listens work works +listen listens write writes +listen listens decrease decreases +listen listens describe describes +listen listens eat eats +listen listens enhance enhances +listen listens estimate estimates +listen listens find finds +listen listens generate generates +listen listens go goes +listen listens implement implements +listen listens increase increases +play plays predict predicts +play plays provide provides +play plays say says +play plays scream screams +play plays search searches +play plays see sees +play plays shuffle shuffles +play plays sing sings +play plays sit sits +play plays slow slows +play plays speak speaks +play plays swim swims +play plays talk talks +play plays think thinks +play plays vanish vanishes +play plays walk walks +play plays work works +play plays write writes +play plays decrease decreases +play plays describe describes +play plays eat eats +play plays enhance enhances +play plays estimate estimates +play plays find finds +play plays generate generates +play plays go goes +play plays implement implements +play plays increase increases +play plays listen listens +predict predicts provide provides +predict predicts say says +predict predicts scream screams +predict predicts search searches +predict predicts see sees +predict predicts shuffle shuffles +predict predicts sing sings +predict predicts sit sits +predict predicts slow slows +predict predicts speak speaks +predict predicts swim swims +predict predicts talk talks +predict predicts think thinks +predict predicts vanish vanishes +predict predicts walk walks +predict predicts work works +predict predicts write writes +predict predicts decrease decreases +predict predicts describe describes +predict predicts eat eats +predict predicts enhance enhances +predict predicts estimate estimates +predict predicts find finds +predict predicts generate generates +predict predicts go goes +predict predicts implement implements +predict predicts increase increases +predict predicts listen listens +predict predicts play plays +provide provides say says +provide provides scream screams +provide provides search searches +provide provides see sees +provide provides shuffle shuffles +provide provides sing sings +provide provides sit sits +provide provides slow slows +provide provides speak speaks +provide provides swim swims +provide provides talk talks +provide provides think thinks +provide provides vanish vanishes +provide provides walk walks +provide provides work works +provide provides write writes +provide provides decrease decreases +provide provides describe describes +provide provides eat eats +provide provides enhance enhances +provide provides estimate estimates +provide provides find finds +provide provides generate generates +provide provides go goes +provide provides implement implements +provide provides increase increases +provide provides listen listens +provide provides play plays +provide provides predict predicts +say says scream screams +say says search searches +say says see sees +say says shuffle shuffles +say says sing sings +say says sit sits +say says slow slows +say says speak speaks +say says swim swims +say says talk talks +say says think thinks +say says vanish vanishes +say says walk walks +say says work works +say says write writes +say says decrease decreases +say says describe describes +say says eat eats +say says enhance enhances +say says estimate estimates +say says find finds +say says generate generates +say says go goes +say says implement implements +say says increase increases +say says listen listens +say says play plays +say says predict predicts +say says provide provides +scream screams search searches +scream screams see sees +scream screams shuffle shuffles +scream screams sing sings +scream screams sit sits +scream screams slow slows +scream screams speak speaks +scream screams swim swims +scream screams talk talks +scream screams think thinks +scream screams vanish vanishes +scream screams walk walks +scream screams work works +scream screams write writes +scream screams decrease decreases +scream screams describe describes +scream screams eat eats +scream screams enhance enhances +scream screams estimate estimates +scream screams find finds +scream screams generate generates +scream screams go goes +scream screams implement implements +scream screams increase increases +scream screams listen listens +scream screams play plays +scream screams predict predicts +scream screams provide provides +scream screams say says +search searches see sees +search searches shuffle shuffles +search searches sing sings +search searches sit sits +search searches slow slows +search searches speak speaks +search searches swim swims +search searches talk talks +search searches think thinks +search searches vanish vanishes +search searches walk walks +search searches work works +search searches write writes +search searches decrease decreases +search searches describe describes +search searches eat eats +search searches enhance enhances +search searches estimate estimates +search searches find finds +search searches generate generates +search searches go goes +search searches implement implements +search searches increase increases +search searches listen listens +search searches play plays +search searches predict predicts +search searches provide provides +search searches say says +search searches scream screams +see sees shuffle shuffles +see sees sing sings +see sees sit sits +see sees slow slows +see sees speak speaks +see sees swim swims +see sees talk talks +see sees think thinks +see sees vanish vanishes +see sees walk walks +see sees work works +see sees write writes +see sees decrease decreases +see sees describe describes +see sees eat eats +see sees enhance enhances +see sees estimate estimates +see sees find finds +see sees generate generates +see sees go goes +see sees implement implements +see sees increase increases +see sees listen listens +see sees play plays +see sees predict predicts +see sees provide provides +see sees say says +see sees scream screams +see sees search searches +shuffle shuffles sing sings +shuffle shuffles sit sits +shuffle shuffles slow slows +shuffle shuffles speak speaks +shuffle shuffles swim swims +shuffle shuffles talk talks +shuffle shuffles think thinks +shuffle shuffles vanish vanishes +shuffle shuffles walk walks +shuffle shuffles work works +shuffle shuffles write writes +shuffle shuffles decrease decreases +shuffle shuffles describe describes +shuffle shuffles eat eats +shuffle shuffles enhance enhances +shuffle shuffles estimate estimates +shuffle shuffles find finds +shuffle shuffles generate generates +shuffle shuffles go goes +shuffle shuffles implement implements +shuffle shuffles increase increases +shuffle shuffles listen listens +shuffle shuffles play plays +shuffle shuffles predict predicts +shuffle shuffles provide provides +shuffle shuffles say says +shuffle shuffles scream screams +shuffle shuffles search searches +shuffle shuffles see sees +sing sings sit sits +sing sings slow slows +sing sings speak speaks +sing sings swim swims +sing sings talk talks +sing sings think thinks +sing sings vanish vanishes +sing sings walk walks +sing sings work works +sing sings write writes +sing sings decrease decreases +sing sings describe describes +sing sings eat eats +sing sings enhance enhances +sing sings estimate estimates +sing sings find finds +sing sings generate generates +sing sings go goes +sing sings implement implements +sing sings increase increases +sing sings listen listens +sing sings play plays +sing sings predict predicts +sing sings provide provides +sing sings say says +sing sings scream screams +sing sings search searches +sing sings see sees +sing sings shuffle shuffles +sit sits slow slows +sit sits speak speaks +sit sits swim swims +sit sits talk talks +sit sits think thinks +sit sits vanish vanishes +sit sits walk walks +sit sits work works +sit sits write writes +sit sits decrease decreases +sit sits describe describes +sit sits eat eats +sit sits enhance enhances +sit sits estimate estimates +sit sits find finds +sit sits generate generates +sit sits go goes +sit sits implement implements +sit sits increase increases +sit sits listen listens +sit sits play plays +sit sits predict predicts +sit sits provide provides +sit sits say says +sit sits scream screams +sit sits search searches +sit sits see sees +sit sits shuffle shuffles +sit sits sing sings +slow slows speak speaks +slow slows swim swims +slow slows talk talks +slow slows think thinks +slow slows vanish vanishes +slow slows walk walks +slow slows work works +slow slows write writes +slow slows decrease decreases +slow slows describe describes +slow slows eat eats +slow slows enhance enhances +slow slows estimate estimates +slow slows find finds +slow slows generate generates +slow slows go goes +slow slows implement implements +slow slows increase increases +slow slows listen listens +slow slows play plays +slow slows predict predicts +slow slows provide provides +slow slows say says +slow slows scream screams +slow slows search searches +slow slows see sees +slow slows shuffle shuffles +slow slows sing sings +slow slows sit sits +speak speaks swim swims +speak speaks talk talks +speak speaks think thinks +speak speaks vanish vanishes +speak speaks walk walks +speak speaks work works +speak speaks write writes +speak speaks decrease decreases +speak speaks describe describes +speak speaks eat eats +speak speaks enhance enhances +speak speaks estimate estimates +speak speaks find finds +speak speaks generate generates +speak speaks go goes +speak speaks implement implements +speak speaks increase increases +speak speaks listen listens +speak speaks play plays +speak speaks predict predicts +speak speaks provide provides +speak speaks say says +speak speaks scream screams +speak speaks search searches +speak speaks see sees +speak speaks shuffle shuffles +speak speaks sing sings +speak speaks sit sits +speak speaks slow slows +swim swims talk talks +swim swims think thinks +swim swims vanish vanishes +swim swims walk walks +swim swims work works +swim swims write writes +swim swims decrease decreases +swim swims describe describes +swim swims eat eats +swim swims enhance enhances +swim swims estimate estimates +swim swims find finds +swim swims generate generates +swim swims go goes +swim swims implement implements +swim swims increase increases +swim swims listen listens +swim swims play plays +swim swims predict predicts +swim swims provide provides +swim swims say says +swim swims scream screams +swim swims search searches +swim swims see sees +swim swims shuffle shuffles +swim swims sing sings +swim swims sit sits +swim swims slow slows +swim swims speak speaks +talk talks think thinks +talk talks vanish vanishes +talk talks walk walks +talk talks work works +talk talks write writes +talk talks decrease decreases +talk talks describe describes +talk talks eat eats +talk talks enhance enhances +talk talks estimate estimates +talk talks find finds +talk talks generate generates +talk talks go goes +talk talks implement implements +talk talks increase increases +talk talks listen listens +talk talks play plays +talk talks predict predicts +talk talks provide provides +talk talks say says +talk talks scream screams +talk talks search searches +talk talks see sees +talk talks shuffle shuffles +talk talks sing sings +talk talks sit sits +talk talks slow slows +talk talks speak speaks +talk talks swim swims +think thinks vanish vanishes +think thinks walk walks +think thinks work works +think thinks write writes +think thinks decrease decreases +think thinks describe describes +think thinks eat eats +think thinks enhance enhances +think thinks estimate estimates +think thinks find finds +think thinks generate generates +think thinks go goes +think thinks implement implements +think thinks increase increases +think thinks listen listens +think thinks play plays +think thinks predict predicts +think thinks provide provides +think thinks say says +think thinks scream screams +think thinks search searches +think thinks see sees +think thinks shuffle shuffles +think thinks sing sings +think thinks sit sits +think thinks slow slows +think thinks speak speaks +think thinks swim swims +think thinks talk talks +vanish vanishes walk walks +vanish vanishes work works +vanish vanishes write writes +vanish vanishes decrease decreases +vanish vanishes describe describes +vanish vanishes eat eats +vanish vanishes enhance enhances +vanish vanishes estimate estimates +vanish vanishes find finds +vanish vanishes generate generates +vanish vanishes go goes +vanish vanishes implement implements +vanish vanishes increase increases +vanish vanishes listen listens +vanish vanishes play plays +vanish vanishes predict predicts +vanish vanishes provide provides +vanish vanishes say says +vanish vanishes scream screams +vanish vanishes search searches +vanish vanishes see sees +vanish vanishes shuffle shuffles +vanish vanishes sing sings +vanish vanishes sit sits +vanish vanishes slow slows +vanish vanishes speak speaks +vanish vanishes swim swims +vanish vanishes talk talks +vanish vanishes think thinks +walk walks work works +walk walks write writes +walk walks decrease decreases +walk walks describe describes +walk walks eat eats +walk walks enhance enhances +walk walks estimate estimates +walk walks find finds +walk walks generate generates +walk walks go goes +walk walks implement implements +walk walks increase increases +walk walks listen listens +walk walks play plays +walk walks predict predicts +walk walks provide provides +walk walks say says +walk walks scream screams +walk walks search searches +walk walks see sees +walk walks shuffle shuffles +walk walks sing sings +walk walks sit sits +walk walks slow slows +walk walks speak speaks +walk walks swim swims +walk walks talk talks +walk walks think thinks +walk walks vanish vanishes +work works write writes +work works decrease decreases +work works describe describes +work works eat eats +work works enhance enhances +work works estimate estimates +work works find finds +work works generate generates +work works go goes +work works implement implements +work works increase increases +work works listen listens +work works play plays +work works predict predicts +work works provide provides +work works say says +work works scream screams +work works search searches +work works see sees +work works shuffle shuffles +work works sing sings +work works sit sits +work works slow slows +work works speak speaks +work works swim swims +work works talk talks +work works think thinks +work works vanish vanishes +work works walk walks +write writes decrease decreases +write writes describe describes +write writes eat eats +write writes enhance enhances +write writes estimate estimates +write writes find finds +write writes generate generates +write writes go goes +write writes implement implements +write writes increase increases +write writes listen listens +write writes play plays +write writes predict predicts +write writes provide provides +write writes say says +write writes scream screams +write writes search searches +write writes see sees +write writes shuffle shuffles +write writes sing sings +write writes sit sits +write writes slow slows +write writes speak speaks +write writes swim swims +write writes talk talks +write writes think thinks +write writes vanish vanishes +write writes walk walks +write writes work works diff --git a/function/python/brightics/function/textanalytics/data/word2vec_simlex999.tsv b/function/python/brightics/function/textanalytics/data/word2vec_simlex999.tsv new file mode 100644 index 000000000..a58af1e92 --- /dev/null +++ b/function/python/brightics/function/textanalytics/data/word2vec_simlex999.tsv @@ -0,0 +1,1000 @@ +# word1 word2 SimLex999 +old new 1.58 +smart intelligent 9.2 +hard difficult 8.77 +happy cheerful 9.55 +hard easy 0.95 +fast rapid 8.75 +happy glad 9.17 +short long 1.23 +stupid dumb 9.58 +weird strange 8.93 +wide narrow 1.03 +bad awful 8.42 +easy difficult 0.58 +bad terrible 7.78 +hard simple 1.38 +smart dumb 0.55 +insane crazy 9.57 +happy mad 0.95 +large huge 9.47 +hard tough 8.05 +new fresh 6.83 +sharp dull 0.6 +quick rapid 9.7 +dumb foolish 6.67 +wonderful terrific 8.63 +strange odd 9.02 +happy angry 1.28 +narrow broad 1.18 +simple easy 9.4 +old fresh 0.87 +apparent obvious 8.47 +inexpensive cheap 8.72 +nice generous 5.0 +weird normal 0.72 +weird odd 9.2 +bad immoral 7.62 +sad funny 0.95 +wonderful great 8.05 +guilty ashamed 6.38 +beautiful wonderful 6.5 +confident sure 8.27 +dumb dense 7.27 +large big 9.55 +nice cruel 0.67 +impatient anxious 6.03 +big broad 6.73 +strong proud 3.17 +unnecessary necessary 0.63 +restless young 1.6 +dumb intelligent 0.75 +bad great 0.35 +difficult simple 0.87 +necessary important 7.37 +bad terrific 0.65 +mad glad 1.45 +honest guilty 1.18 +easy tough 0.52 +easy flexible 4.1 +certain sure 8.42 +essential necessary 8.97 +different normal 1.08 +sly clever 7.25 +crucial important 8.82 +harsh cruel 8.18 +childish foolish 5.5 +scarce rare 9.17 +friendly generous 5.9 +fragile frigid 2.38 +long narrow 3.57 +big heavy 6.18 +rough frigid 2.47 +bizarre strange 9.37 +illegal immoral 4.28 +bad guilty 4.2 +modern ancient 0.73 +new ancient 0.23 +dull funny 0.55 +happy young 2.0 +easy big 1.12 +great awful 1.17 +tiny huge 0.6 +polite proper 7.63 +modest ashamed 2.65 +exotic rare 8.05 +dumb clever 1.17 +delightful wonderful 8.65 +noticeable obvious 8.48 +afraid anxious 5.07 +formal proper 8.02 +dreary dull 8.25 +delightful cheerful 6.58 +unhappy mad 5.95 +sad terrible 5.4 +sick crazy 3.57 +violent angry 6.98 +laden heavy 5.9 +dirty cheap 1.6 +elastic flexible 7.78 +hard dense 5.9 +recent new 7.05 +bold proud 3.97 +sly strange 1.97 +strange sly 2.07 +dumb rare 0.48 +sly tough 0.58 +terrific mad 0.4 +modest flexible 0.98 +fresh wide 0.4 +huge dumb 0.48 +large flexible 0.48 +dirty narrow 0.3 +wife husband 2.3 +book text 6.35 +groom bride 3.17 +night day 1.88 +south north 2.2 +plane airport 3.65 +uncle aunt 5.5 +horse mare 8.33 +bottom top 0.7 +friend buddy 8.78 +student pupil 9.35 +world globe 6.67 +leg arm 2.88 +plane jet 8.1 +woman man 3.33 +horse colt 7.07 +actress actor 7.12 +teacher instructor 9.25 +movie film 8.87 +bird hawk 7.85 +word dictionary 3.68 +money salary 7.88 +dog cat 1.75 +area region 9.47 +navy army 6.43 +book literature 7.53 +clothes closet 3.27 +sunset sunrise 2.47 +child adult 2.98 +cow cattle 9.52 +book story 5.63 +winter summer 2.38 +taxi cab 9.2 +tree maple 5.53 +bed bedroom 3.4 +roof ceiling 7.58 +disease infection 7.15 +arm shoulder 4.85 +sheep lamb 8.42 +lady gentleman 3.42 +boat anchor 2.25 +priest monk 6.28 +toe finger 4.68 +river stream 7.3 +anger fury 8.73 +date calendar 4.42 +sea ocean 8.27 +second minute 4.62 +hand thumb 3.88 +wood log 7.3 +mud dirt 7.32 +hallway corridor 9.28 +way manner 7.62 +mouse cat 1.12 +cop sheriff 9.05 +death burial 4.93 +music melody 6.98 +beer alcohol 7.5 +mouth lip 7.1 +storm hurricane 6.38 +tax income 2.38 +flower violet 6.95 +paper cardboard 5.38 +floor ceiling 1.73 +beach seashore 8.33 +rod curtain 3.03 +hound fox 2.38 +street alley 5.48 +boat deck 4.28 +car horn 2.57 +friend guest 4.25 +employer employee 3.65 +hand wrist 3.97 +ball cannon 2.58 +alcohol brandy 6.98 +victory triumph 8.98 +telephone booth 3.63 +door doorway 5.4 +motel inn 8.17 +clothes cloth 5.47 +steak meat 7.47 +nail thumb 3.55 +band orchestra 7.08 +book bible 5.0 +business industry 7.02 +winter season 6.27 +decade century 3.48 +alcohol gin 8.65 +hat coat 2.67 +window door 3.33 +arm wrist 3.57 +house apartment 5.8 +glass crystal 6.27 +wine brandy 5.15 +creator maker 9.62 +dinner breakfast 3.33 +arm muscle 3.72 +bubble suds 8.57 +bread flour 3.33 +death tragedy 5.8 +absence presence 0.4 +gun cannon 5.68 +grass blade 4.57 +ball basket 1.67 +hose garden 1.67 +boy kid 7.5 +church choir 2.95 +clothes drawer 3.02 +tower bell 1.9 +father parent 7.07 +school grade 4.42 +parent adult 5.37 +bar jail 1.9 +car highway 3.4 +dictionary definition 6.25 +door cellar 1.97 +army legion 5.95 +metal aluminum 7.25 +chair bench 6.67 +cloud fog 6.0 +boy son 6.75 +water ice 6.47 +bed blanket 3.02 +attorney lawyer 9.35 +area zone 8.33 +business company 9.02 +clothes fabric 5.87 +sweater jacket 7.15 +money capital 6.67 +hand foot 4.17 +alcohol cocktail 6.73 +yard inch 3.78 +molecule atom 6.45 +lens camera 4.28 +meal dinner 7.15 +eye tear 3.55 +god devil 1.8 +loop belt 3.1 +rat mouse 7.78 +motor engine 8.65 +car cab 7.42 +cat lion 6.75 +size magnitude 6.33 +reality fantasy 1.03 +door gate 5.25 +cat pet 5.95 +tin aluminum 6.42 +bone jaw 4.17 +cereal wheat 3.75 +house key 1.9 +blood flesh 4.28 +door corridor 3.73 +god spirit 7.3 +capability competence 7.62 +abundance plenty 8.97 +sofa chair 6.67 +wall brick 4.68 +horn drum 2.68 +organ liver 6.15 +strength might 7.07 +phrase word 5.48 +band parade 3.92 +stomach waist 5.9 +cloud storm 5.6 +joy pride 5.0 +noise rattle 6.17 +rain mist 5.97 +beer beverage 5.42 +man uncle 3.92 +apple juice 2.88 +intelligence logic 6.5 +communication language 7.47 +mink fur 6.83 +mob crowd 7.85 +shore coast 8.83 +wire cord 7.62 +bird turkey 6.58 +bed crib 7.3 +competence ability 7.5 +cloud haze 7.32 +supper meal 7.53 +bar cage 2.8 +water salt 1.3 +sense intuition 7.68 +situation condition 6.58 +crime theft 7.53 +style fashion 8.5 +boundary border 9.08 +arm body 4.05 +boat car 2.37 +sandwich lunch 6.3 +bride princess 2.8 +heroine hero 8.78 +car gauge 1.13 +insect bee 6.07 +crib cradle 8.55 +animal person 3.05 +marijuana herb 6.5 +bed hospital 0.92 +cheek tongue 4.52 +disc computer 3.2 +curve angle 3.33 +grass moss 5.0 +school law 1.13 +foot head 2.3 +mother guardian 6.5 +orthodontist dentist 8.27 +alcohol whiskey 7.27 +mouth tooth 6.3 +breakfast bacon 4.37 +bathroom bedroom 3.4 +plate bowl 5.23 +meat bacon 5.8 +air helium 3.63 +worker employer 5.37 +body chest 4.45 +son father 3.82 +heart surgery 1.08 +woman secretary 1.98 +man father 4.83 +beach island 5.6 +story topic 5.0 +game fun 3.42 +weekend week 4.0 +couple pair 8.33 +woman wife 5.72 +sheep cattle 4.77 +purse bag 8.33 +ceiling cathedral 2.42 +bean coffee 5.15 +wood paper 2.88 +top side 1.9 +crime fraud 5.65 +pain harm 5.38 +lover companion 5.97 +evening dusk 7.78 +father daughter 2.62 +wine liquor 7.85 +cow goat 2.93 +belief opinion 7.7 +reality illusion 1.42 +pact agreement 9.02 +wealth poverty 1.27 +accident emergency 4.93 +battle conquest 7.22 +friend teacher 2.62 +illness infection 6.9 +game trick 2.32 +brother son 3.48 +aunt nephew 3.1 +worker mechanic 4.92 +doctor orthodontist 5.58 +oak maple 6.03 +bee queen 3.27 +car bicycle 3.47 +goal quest 5.83 +august month 5.53 +army squad 5.08 +cloud weather 4.87 +physician doctor 8.88 +canyon valley 6.75 +river valley 1.67 +sun sky 2.27 +target arrow 3.25 +chocolate pie 2.27 +circumstance situation 7.85 +opinion choice 5.43 +rhythm melody 6.12 +gut nerve 4.93 +day dawn 5.47 +cattle beef 7.03 +doctor professor 4.65 +arm vein 3.65 +room bath 3.33 +corporation business 9.02 +fun football 1.97 +hill cliff 4.28 +bone ankle 3.82 +apple candy 2.08 +helper maid 5.58 +leader manager 7.27 +lemon tea 1.6 +bee ant 2.78 +basketball baseball 4.92 +rice bean 2.72 +bed furniture 6.08 +emotion passion 7.72 +anarchy chaos 7.93 +crime violation 7.12 +machine engine 5.58 +beach sea 4.68 +alley bowl 1.53 +jar bottle 7.83 +strength capability 5.28 +seed mustard 3.48 +guitar drum 3.78 +opinion idea 5.7 +north west 3.63 +diet salad 2.98 +mother wife 3.02 +dad mother 3.55 +captain sailor 5.0 +meter yard 5.6 +beer champagne 4.45 +motor boat 2.57 +card bridge 1.97 +science psychology 4.92 +sinner saint 1.6 +destruction construction 0.98 +crowd bunch 7.42 +beach reef 3.77 +man child 4.13 +bread cheese 1.95 +champion winner 8.73 +celebration ceremony 7.72 +menu order 3.62 +king princess 3.27 +wealth prestige 6.07 +endurance strength 6.58 +danger threat 8.78 +god priest 4.5 +men fraternity 3.13 +buddy companion 8.65 +teacher helper 4.28 +body stomach 3.93 +tongue throat 3.1 +house carpet 1.38 +intelligence skill 5.35 +journey conquest 4.72 +god prey 1.23 +brother soul 0.97 +adversary opponent 9.05 +death catastrophe 4.13 +monster demon 6.95 +day morning 4.87 +man victor 1.9 +friend guy 3.88 +song story 3.97 +ray sunshine 6.83 +guy stud 5.83 +chicken rice 1.43 +box elevator 1.32 +butter potato 1.22 +apartment furniture 1.28 +lake swamp 4.92 +salad vinegar 1.13 +flower bulb 4.48 +cloud mist 6.67 +driver pilot 6.28 +sugar honey 5.13 +body shoulder 2.88 +idea image 3.55 +father brother 4.2 +moon planet 5.87 +ball costume 2.32 +rail fence 5.22 +room bed 2.35 +flower bush 4.25 +bone knee 4.17 +arm knee 2.75 +bottom side 2.63 +vessel vein 5.15 +cat rabbit 2.37 +meat sandwich 2.35 +belief concept 5.08 +intelligence insight 5.9 +attention interest 7.22 +attitude confidence 4.35 +right justice 7.05 +argument agreement 1.45 +depth magnitude 6.12 +medium news 3.65 +winner candidate 2.78 +birthday date 5.08 +fee payment 7.15 +bible hymn 5.15 +exit doorway 5.5 +man sentry 3.25 +aisle hall 6.35 +whiskey gin 6.28 +blood marrow 3.4 +oil mink 1.23 +floor deck 5.55 +roof floor 2.62 +door floor 1.67 +shoulder head 3.42 +wagon carriage 7.7 +car carriage 5.13 +elbow ankle 3.13 +wealth fame 4.02 +sorrow shame 4.77 +administration management 7.25 +communication conversation 8.02 +pollution atmosphere 4.25 +anatomy biology 5.33 +college profession 3.12 +book topic 2.07 +formula equation 7.95 +book information 5.0 +boy partner 1.9 +sky universe 4.68 +population people 7.68 +college class 4.13 +chief mayor 4.85 +rabbi minister 7.62 +meter inch 5.08 +polyester cotton 5.63 +lawyer banker 1.88 +violin instrument 6.58 +camp cabin 4.2 +pot appliance 2.53 +linen fabric 7.47 +whiskey champagne 5.33 +girl child 5.38 +cottage cabin 7.72 +bird hen 7.03 +racket noise 8.1 +sunset evening 5.98 +drizzle rain 9.17 +adult baby 2.22 +charcoal coal 7.63 +body spine 4.78 +head nail 2.47 +log timber 8.05 +spoon cup 2.02 +body nerve 3.13 +man husband 5.32 +bone neck 2.53 +frustration anger 6.5 +river sea 5.72 +task job 8.87 +club society 5.23 +reflection image 7.27 +prince king 5.92 +snow weather 5.48 +people party 2.2 +boy brother 6.67 +root grass 3.55 +brow eye 3.82 +money pearl 2.1 +money diamond 3.42 +vehicle bus 6.47 +cab bus 5.6 +house barn 4.33 +finger palm 3.33 +car bridge 0.95 +effort difficulty 4.45 +fact insight 4.77 +job management 3.97 +cancer sickness 7.93 +word newspaper 2.47 +composer writer 6.58 +actor singer 4.52 +shelter hut 6.47 +bathroom kitchen 3.1 +cabin hut 6.53 +door kitchen 1.67 +value belief 7.07 +wisdom intelligence 7.47 +ignorance intelligence 1.5 +happiness luck 2.38 +idea scheme 6.75 +mood emotion 8.12 +happiness peace 6.03 +despair misery 7.22 +logic arithmetic 3.97 +denial confession 1.03 +argument criticism 5.08 +aggression hostility 8.48 +hysteria confusion 6.33 +chemistry theory 3.17 +trial verdict 3.33 +comfort safety 5.8 +confidence self 3.12 +vision perception 6.88 +era decade 5.4 +biography fiction 1.38 +discussion argument 5.48 +code symbol 6.03 +danger disease 3.0 +accident catastrophe 5.9 +journey trip 8.88 +activity movement 7.15 +gossip news 5.22 +father god 3.57 +action course 5.45 +fever illness 7.65 +aviation flight 8.18 +game action 4.85 +molecule air 3.05 +home state 2.58 +word literature 4.77 +adult guardian 6.9 +newspaper information 5.65 +communication television 5.6 +cousin uncle 4.63 +author reader 1.6 +guy partner 3.57 +area corner 2.07 +ballad song 7.53 +wall decoration 2.62 +word page 2.92 +nurse scientist 2.08 +politician president 7.38 +president mayor 5.68 +book essay 4.72 +man warrior 4.72 +article journal 6.18 +breakfast supper 4.4 +crowd parade 3.93 +aisle hallway 6.75 +teacher rabbi 4.37 +hip lip 1.43 +book article 5.43 +room cell 4.58 +box booth 3.8 +daughter kid 4.17 +limb leg 6.9 +liver lung 2.7 +classroom hallway 2.0 +mountain ledge 3.73 +car elevator 1.03 +bed couch 3.42 +clothes button 2.3 +clothes coat 5.35 +kidney organ 6.17 +apple sauce 1.43 +chicken steak 3.73 +car hose 0.87 +tobacco cigarette 7.5 +student professor 1.95 +baby daughter 5.0 +pipe cigar 6.03 +milk juice 4.05 +box cigar 1.25 +apartment hotel 3.33 +cup cone 3.17 +horse ox 3.02 +throat nose 2.8 +bone teeth 4.17 +bone elbow 3.78 +bacon bean 1.22 +cup jar 5.13 +proof fact 7.3 +appointment engagement 6.75 +birthday year 1.67 +word clue 2.53 +author creator 8.02 +atom carbon 3.1 +archbishop bishop 7.05 +letter paragraph 4.0 +page paragraph 3.03 +steeple chapel 7.08 +muscle bone 3.65 +muscle tongue 5.0 +boy soldier 2.15 +belly abdomen 8.13 +guy girl 3.33 +bed chair 3.5 +clothes jacket 5.15 +gun knife 3.65 +tin metal 5.63 +bottle container 7.93 +hen turkey 6.13 +meat bread 1.67 +arm bone 3.83 +neck spine 5.32 +apple lemon 4.05 +agony grief 7.63 +assignment task 8.7 +night dawn 2.95 +dinner soup 3.72 +calf bull 4.93 +snow storm 4.8 +nail hand 3.42 +dog horse 2.38 +arm neck 1.58 +ball glove 1.75 +flu fever 6.08 +fee salary 3.72 +nerve brain 3.88 +beast animal 7.83 +dinner chicken 2.85 +girl maid 2.93 +child boy 5.75 +alcohol wine 7.42 +nose mouth 3.73 +street car 2.38 +bell door 2.2 +box hat 1.3 +belief impression 5.95 +bias opinion 5.6 +attention awareness 8.73 +anger mood 4.1 +elegance style 5.72 +beauty age 1.58 +book theme 2.58 +friend mother 2.53 +vitamin iron 5.55 +car factory 2.75 +pact condition 2.45 +chapter choice 0.48 +arithmetic rhythm 2.35 +winner presence 1.08 +belief flower 0.4 +winner goal 3.23 +trick size 0.48 +choice vein 0.98 +hymn conquest 0.68 +endurance band 0.4 +jail choice 1.08 +condition boy 0.48 +flower endurance 0.4 +hole agreement 0.3 +doctor temper 0.48 +fraternity door 0.68 +task woman 0.68 +fraternity baseball 0.88 +cent size 0.4 +presence door 0.48 +mouse management 0.48 +task highway 0.48 +liquor century 0.4 +task straw 0.68 +island task 0.3 +night chapter 0.48 +pollution president 0.68 +gun trick 0.48 +bath trick 0.58 +diet apple 1.18 +cent wife 0.58 +chapter tail 0.3 +course stomach 0.58 +hymn straw 0.4 +dentist colonel 0.4 +wife straw 0.4 +hole wife 0.68 +pupil president 0.78 +bath wife 0.48 +people cent 0.48 +formula log 1.77 +woman fur 0.58 +apple sunshine 0.58 +gun dawn 1.18 +meal waist 0.98 +camera president 0.48 +liquor band 0.68 +stomach vein 2.35 +gun fur 0.3 +couch baseball 0.88 +worker camera 0.68 +deck mouse 0.48 +rice boy 0.4 +people gun 0.68 +cliff tail 0.3 +ankle window 0.3 +princess island 0.3 +container mouse 0.3 +wagon container 2.65 +people balloon 0.48 +dollar people 0.4 +bath balloon 0.4 +stomach bedroom 0.4 +bicycle bedroom 0.4 +log bath 0.4 +bowl tail 0.48 +go come 2.42 +take steal 6.18 +listen hear 8.17 +think rationalize 8.25 +occur happen 9.32 +vanish disappear 9.8 +multiply divide 1.75 +plead beg 9.08 +begin originate 8.2 +protect defend 9.13 +kill destroy 5.9 +create make 8.72 +accept reject 0.83 +ignore avoid 6.87 +carry bring 5.8 +leave enter 0.95 +choose elect 7.62 +lose fail 7.33 +encourage discourage 1.58 +achieve accomplish 8.57 +make construct 8.33 +listen obey 4.93 +inform notify 9.25 +receive give 1.47 +borrow beg 2.62 +take obtain 7.1 +advise recommend 8.1 +imitate portray 6.75 +win succeed 7.9 +think decide 5.13 +greet meet 6.17 +agree argue 0.77 +enjoy entertain 5.92 +destroy make 1.6 +save protect 6.58 +give lend 7.22 +understand know 7.47 +take receive 5.08 +accept acknowledge 6.88 +decide choose 8.87 +accept believe 6.75 +keep possess 8.27 +roam wander 8.83 +succeed fail 0.83 +spend save 0.55 +leave go 7.63 +come attend 8.1 +know believe 5.5 +gather meet 7.3 +make earn 7.62 +forget ignore 3.07 +multiply add 2.7 +shrink grow 0.23 +arrive leave 1.33 +succeed try 3.98 +accept deny 1.75 +arrive come 7.05 +agree differ 1.05 +send receive 1.08 +win dominate 5.68 +add divide 2.3 +kill choke 4.92 +acquire get 8.82 +participate join 7.7 +leave remain 2.53 +go enter 4.0 +take carry 5.23 +forget learn 1.18 +appoint elect 8.17 +engage marry 5.43 +ask pray 3.72 +go send 3.75 +take deliver 4.37 +speak hear 3.02 +analyze evaluate 8.03 +argue rationalize 4.2 +lose keep 1.05 +compare analyze 8.1 +disorganize organize 1.45 +go allow 3.62 +take possess 7.2 +learn listen 3.88 +destroy construct 0.92 +create build 8.48 +steal buy 1.13 +kill hang 4.45 +forget know 0.92 +create imagine 5.13 +do happen 4.23 +win accomplish 7.85 +give deny 1.43 +deserve earn 5.8 +get put 1.98 +locate find 8.73 +appear attend 6.28 +know comprehend 7.63 +pretend imagine 8.47 +satisfy please 7.67 +cherish keep 4.85 +argue differ 5.15 +overcome dominate 6.25 +behave obey 7.3 +cooperate participate 6.43 +achieve try 4.42 +fail discourage 3.33 +begin quit 1.28 +say participate 3.82 +come bring 2.42 +declare announce 9.08 +read comprehend 4.7 +take leave 2.47 +proclaim announce 8.18 +acquire obtain 8.57 +conclude decide 7.75 +please plead 2.98 +argue prove 4.83 +ask plead 6.47 +find disappear 0.77 +inspect examine 8.75 +verify justify 4.08 +assume predict 4.85 +learn evaluate 4.17 +argue justify 5.0 +make become 4.77 +discover originate 4.83 +achieve succeed 7.5 +give put 3.65 +understand listen 4.68 +expand grow 8.27 +borrow sell 1.73 +keep protect 5.4 +explain prove 4.1 +assume pretend 3.72 +agree please 4.13 +forgive forget 3.92 +clarify explain 8.33 +understand forgive 4.87 +remind forget 0.87 +get remain 1.6 +realize discover 7.47 +require inquire 1.82 +ignore ask 1.07 +think inquire 4.77 +reject avoid 4.78 +argue persuade 6.23 +pursue persuade 3.17 +accept forgive 3.73 +do quit 1.17 +investigate examine 8.1 +discuss explain 6.67 +owe lend 2.32 +explore discover 8.48 +complain argue 4.8 +withdraw reject 6.38 +keep borrow 2.25 +beg ask 6.0 +arrange organize 8.27 +reduce shrink 8.02 +speak acknowledge 4.67 +give borrow 2.22 +kill defend 2.63 +disappear shrink 5.8 +deliver carry 3.88 +breathe choke 1.37 +acknowledge notify 5.3 +become seem 2.63 +pretend seem 4.68 +accomplish become 4.0 +contemplate think 8.82 +determine predict 5.8 +please entertain 5.0 +remain retain 5.75 +pretend portray 7.03 +forget retain 0.63 +want choose 4.78 +lose get 0.77 +try think 2.62 +become appear 4.77 +leave ignore 4.42 +accept recommend 2.75 +leave wander 3.57 +keep give 1.05 +give allow 5.15 +bring send 2.97 +absorb learn 5.48 +acquire find 6.38 +leave appear 0.97 +create destroy 0.63 +begin go 7.42 +get buy 5.08 +collect save 6.67 +replace restore 5.73 +join add 8.1 +join marry 5.35 +accept deliver 1.58 +attach join 7.75 +put hang 3.0 +go sell 0.97 +communicate pray 3.55 +give steal 0.5 +add build 4.92 +bring restore 2.62 +comprehend satisfy 2.55 +portray decide 1.18 +organize become 1.77 +give know 0.88 +say verify 4.9 +cooperate join 5.18 +arrange require 0.98 +borrow want 1.77 +investigate pursue 7.15 +ignore explore 0.4 +bring complain 0.98 +enter owe 0.68 +portray notify 0.78 +remind sell 0.4 +absorb possess 5.0 +join acquire 2.85 +send attend 1.67 +gather attend 4.8 +absorb withdraw 2.97 +attend arrive 6.08 diff --git a/function/python/brightics/function/textanalytics/data/word2vec_wordsim353.tsv b/function/python/brightics/function/textanalytics/data/word2vec_wordsim353.tsv new file mode 100644 index 000000000..c63addcfc --- /dev/null +++ b/function/python/brightics/function/textanalytics/data/word2vec_wordsim353.tsv @@ -0,0 +1,355 @@ +# The WordSimilarity-353 Test Collection (http://www.cs.technion.ac.il/~gabr/resources/data/wordsim353/) +# Word 1 Word 2 Human (mean) +love sex 6.77 +tiger cat 7.35 +tiger tiger 10.00 +book paper 7.46 +computer keyboard 7.62 +computer internet 7.58 +plane car 5.77 +train car 6.31 +telephone communication 7.50 +television radio 6.77 +media radio 7.42 +drug abuse 6.85 +bread butter 6.19 +cucumber potato 5.92 +doctor nurse 7.00 +professor doctor 6.62 +student professor 6.81 +smart student 4.62 +smart stupid 5.81 +company stock 7.08 +stock market 8.08 +stock phone 1.62 +stock CD 1.31 +stock jaguar 0.92 +stock egg 1.81 +fertility egg 6.69 +stock live 3.73 +stock life 0.92 +book library 7.46 +bank money 8.12 +wood forest 7.73 +money cash 9.15 +professor cucumber 0.31 +king cabbage 0.23 +king queen 8.58 +king rook 5.92 +bishop rabbi 6.69 +Jerusalem Israel 8.46 +Jerusalem Palestinian 7.65 +holy sex 1.62 +fuck sex 9.44 +Maradona football 8.62 +football soccer 9.03 +football basketball 6.81 +football tennis 6.63 +tennis racket 7.56 +Arafat peace 6.73 +Arafat terror 7.65 +Arafat Jackson 2.50 +law lawyer 8.38 +movie star 7.38 +movie popcorn 6.19 +movie critic 6.73 +movie theater 7.92 +physics proton 8.12 +physics chemistry 7.35 +space chemistry 4.88 +alcohol chemistry 5.54 +vodka gin 8.46 +vodka brandy 8.13 +drink car 3.04 +drink ear 1.31 +drink mouth 5.96 +drink eat 6.87 +baby mother 7.85 +drink mother 2.65 +car automobile 8.94 +gem jewel 8.96 +journey voyage 9.29 +boy lad 8.83 +coast shore 9.10 +asylum madhouse 8.87 +magician wizard 9.02 +midday noon 9.29 +furnace stove 8.79 +food fruit 7.52 +bird cock 7.10 +bird crane 7.38 +tool implement 6.46 +brother monk 6.27 +crane implement 2.69 +lad brother 4.46 +journey car 5.85 +monk oracle 5.00 +cemetery woodland 2.08 +food rooster 4.42 +coast hill 4.38 +forest graveyard 1.85 +shore woodland 3.08 +monk slave 0.92 +coast forest 3.15 +lad wizard 0.92 +chord smile 0.54 +glass magician 2.08 +noon string 0.54 +rooster voyage 0.62 +money dollar 8.42 +money cash 9.08 +money currency 9.04 +money wealth 8.27 +money property 7.57 +money possession 7.29 +money bank 8.50 +money deposit 7.73 +money withdrawal 6.88 +money laundering 5.65 +money operation 3.31 +tiger jaguar 8.00 +tiger feline 8.00 +tiger carnivore 7.08 +tiger mammal 6.85 +tiger animal 7.00 +tiger organism 4.77 +tiger fauna 5.62 +tiger zoo 5.87 +psychology psychiatry 8.08 +psychology anxiety 7.00 +psychology fear 6.85 +psychology depression 7.42 +psychology clinic 6.58 +psychology doctor 6.42 +psychology Freud 8.21 +psychology mind 7.69 +psychology health 7.23 +psychology science 6.71 +psychology discipline 5.58 +psychology cognition 7.48 +planet star 8.45 +planet constellation 8.06 +planet moon 8.08 +planet sun 8.02 +planet galaxy 8.11 +planet space 7.92 +planet astronomer 7.94 +precedent example 5.85 +precedent information 3.85 +precedent cognition 2.81 +precedent law 6.65 +precedent collection 2.50 +precedent group 1.77 +precedent antecedent 6.04 +cup coffee 6.58 +cup tableware 6.85 +cup article 2.40 +cup artifact 2.92 +cup object 3.69 +cup entity 2.15 +cup drink 7.25 +cup food 5.00 +cup substance 1.92 +cup liquid 5.90 +jaguar cat 7.42 +jaguar car 7.27 +energy secretary 1.81 +secretary senate 5.06 +energy laboratory 5.09 +computer laboratory 6.78 +weapon secret 6.06 +FBI fingerprint 6.94 +FBI investigation 8.31 +investigation effort 4.59 +Mars water 2.94 +Mars scientist 5.63 +news report 8.16 +canyon landscape 7.53 +image surface 4.56 +discovery space 6.34 +water seepage 6.56 +sign recess 2.38 +Wednesday news 2.22 +mile kilometer 8.66 +computer news 4.47 +territory surface 5.34 +atmosphere landscape 3.69 +president medal 3.00 +war troops 8.13 +record number 6.31 +skin eye 6.22 +Japanese American 6.50 +theater history 3.91 +volunteer motto 2.56 +prejudice recognition 3.00 +decoration valor 5.63 +century year 7.59 +century nation 3.16 +delay racism 1.19 +delay news 3.31 +minister party 6.63 +peace plan 4.75 +minority peace 3.69 +attempt peace 4.25 +government crisis 6.56 +deployment departure 4.25 +deployment withdrawal 5.88 +energy crisis 5.94 +announcement news 7.56 +announcement effort 2.75 +stroke hospital 7.03 +disability death 5.47 +victim emergency 6.47 +treatment recovery 7.91 +journal association 4.97 +doctor personnel 5.00 +doctor liability 5.19 +liability insurance 7.03 +school center 3.44 +reason hypertension 2.31 +reason criterion 5.91 +hundred percent 7.38 +Harvard Yale 8.13 +hospital infrastructure 4.63 +death row 5.25 +death inmate 5.03 +lawyer evidence 6.69 +life death 7.88 +life term 4.50 +word similarity 4.75 +board recommendation 4.47 +governor interview 3.25 +OPEC country 5.63 +peace atmosphere 3.69 +peace insurance 2.94 +territory kilometer 5.28 +travel activity 5.00 +competition price 6.44 +consumer confidence 4.13 +consumer energy 4.75 +problem airport 2.38 +car flight 4.94 +credit card 8.06 +credit information 5.31 +hotel reservation 8.03 +grocery money 5.94 +registration arrangement 6.00 +arrangement accommodation 5.41 +month hotel 1.81 +type kind 8.97 +arrival hotel 6.00 +bed closet 6.72 +closet clothes 8.00 +situation conclusion 4.81 +situation isolation 3.88 +impartiality interest 5.16 +direction combination 2.25 +street place 6.44 +street avenue 8.88 +street block 6.88 +street children 4.94 +listing proximity 2.56 +listing category 6.38 +cell phone 7.81 +production hike 1.75 +benchmark index 4.25 +media trading 3.88 +media gain 2.88 +dividend payment 7.63 +dividend calculation 6.48 +calculation computation 8.44 +currency market 7.50 +OPEC oil 8.59 +oil stock 6.34 +announcement production 3.38 +announcement warning 6.00 +profit warning 3.88 +profit loss 7.63 +dollar yen 7.78 +dollar buck 9.22 +dollar profit 7.38 +dollar loss 6.09 +computer software 8.50 +network hardware 8.31 +phone equipment 7.13 +equipment maker 5.91 +luxury car 6.47 +five month 3.38 +report gain 3.63 +investor earning 7.13 +liquid water 7.89 +baseball season 5.97 +game victory 7.03 +game team 7.69 +marathon sprint 7.47 +game series 6.19 +game defeat 6.97 +seven series 3.56 +seafood sea 7.47 +seafood food 8.34 +seafood lobster 8.70 +lobster food 7.81 +lobster wine 5.70 +food preparation 6.22 +video archive 6.34 +start year 4.06 +start match 4.47 +game round 5.97 +boxing round 7.61 +championship tournament 8.36 +fighting defeating 7.41 +line insurance 2.69 +day summer 3.94 +summer drought 7.16 +summer nature 5.63 +day dawn 7.53 +nature environment 8.31 +environment ecology 8.81 +nature man 6.25 +man woman 8.30 +man governor 5.25 +murder manslaughter 8.53 +soap opera 7.94 +opera performance 6.88 +life lesson 5.94 +focus life 4.06 +production crew 6.25 +television film 7.72 +lover quarrel 6.19 +viewer serial 2.97 +possibility girl 1.94 +population development 3.75 +morality importance 3.31 +morality marriage 3.69 +Mexico Brazil 7.44 +gender equality 6.41 +change attitude 5.44 +family planning 6.25 +opera industry 2.63 +sugar approach 0.88 +practice institution 3.19 +ministry culture 4.69 +problem challenge 6.75 +size prominence 5.31 +country citizen 7.31 +planet people 5.75 +development issue 3.97 +experience music 3.47 +music project 3.63 +glass metal 5.56 +aluminum metal 7.83 +chance credibility 3.88 +exhibit memorabilia 5.31 +concert virtuoso 6.81 +rock jazz 7.59 +museum theater 7.19 +observation architecture 4.38 +space world 6.53 +preservation world 6.19 +admission ticket 7.69 +shower thunderstorm 6.31 +shower flood 6.03 +weather forecast 8.34 +disaster area 6.25 +governor office 6.34 +architecture century 3.78 diff --git a/function/python/brightics/function/textanalytics/doc2vec.py b/function/python/brightics/function/textanalytics/doc2vec.py index f0b7e9ee1..590bdfb42 100644 --- a/function/python/brightics/function/textanalytics/doc2vec.py +++ b/function/python/brightics/function/textanalytics/doc2vec.py @@ -17,15 +17,18 @@ from random import randint import pandas as pd from gensim.models.doc2vec import Doc2Vec, TaggedDocument +import matplotlib.pyplot as plt +from sklearn.manifold import TSNE from brightics.common.utils import check_required_parameters from brightics.common.utils import get_default_from_parameters_if_required from brightics.common.validation import validate from brightics.common.validation import greater_than_or_equal_to -from brightics.common.repr import BrtcReprBuilder +from brightics.common.repr import BrtcReprBuilder from brightics.common.repr import strip_margin from brightics.function.utils import _model_dict from brightics.common.repr import dict2MD +from brightics.common.repr import plt2MD def doc2vec(table, **params): @@ -37,7 +40,8 @@ def doc2vec(table, **params): greater_than_or_equal_to(params, 1, 'min_count'), greater_than_or_equal_to(params, 1, 'train_epoch'), greater_than_or_equal_to(params, 1, 'workers'), - greater_than_or_equal_to(params, 1, 'negative')] + greater_than_or_equal_to(params, 1, 'negative'), + greater_than_or_equal_to(params, 1, 'topn')] validate(*param_validation_check) return _doc2vec(table, **params) @@ -45,8 +49,7 @@ def doc2vec(table, **params): def _doc2vec(table, input_col, dm=1, vector_size=100, window=10, min_count=1, max_vocab_size=None, train_epoch=100, workers=1, alpha=0.025, min_alpha=0.025, seed=None, hs=1, negative=5, ns_exponent=0.75, - hashfxn=hash): - + topn=30, hashfxn=hash): if seed is None: random_state = seed seed = randint(0, 0xffffffff) @@ -94,13 +97,44 @@ def _doc2vec(table, input_col, dm=1, vector_size=100, window=10, min_count=1, 'Negative': negative, 'Negative sampling exponent': ns_exponent} + # tsne visualization + length = len(vocab) + if length < topn: + topn = length + topn_words = sorted(vocab, key=vocab.get, reverse=True)[:topn] + + X = d2v[topn_words] + tsne = TSNE(n_components=min(2, topn), random_state=seed) + X_tsne = tsne.fit_transform(X) + df = pd.DataFrame(X_tsne, index=topn_words, columns=['x', 'y']) + + fig = plt.figure() + fig.set_size_inches(50, 40) + ax = fig.add_subplot(1, 1, 1) + + ax.scatter(df['x'], df['y'], s=1000) + ax.tick_params(axis='both', which='major', labelsize=50) + + for word, pos in df.iterrows(): + ax.annotate(word, pos, fontsize=80) + plt.show() + fig = plt2MD(plt) + plt.clf() + rb = BrtcReprBuilder() rb.addMD(strip_margin(""" | ## Doc2Vec Result | + | ### Total Number of words + | {length} + | + | ### Top {topn} Words + | {topn_words} + | {fig} + | | ### Parameters | {params} - """.format(params=dict2MD(params)))) + """.format(length=length, topn=topn, topn_words=topn_words, fig=fig, params=dict2MD(params)))) model = _model_dict('doc2vec_model') model['params'] = params diff --git a/function/python/brightics/function/textanalytics/doc_summarize.py b/function/python/brightics/function/textanalytics/doc_summarize.py index 612386b57..ce142564f 100644 --- a/function/python/brightics/function/textanalytics/doc_summarize.py +++ b/function/python/brightics/function/textanalytics/doc_summarize.py @@ -18,6 +18,7 @@ from brightics.common.utils import get_default_from_parameters_if_required from brightics.common.validation import validate from brightics.common.validation import greater_than, greater_than_or_equal_to, over_under +from brightics.common.validation import raise_runtime_error import pandas as pd import numpy as np from nltk import tokenize @@ -73,16 +74,16 @@ def _tokenize_for_summarize(text): import kss splitted_array = kss.split_sentences(text) else: - from brightics.function.textanalytics.pykss import pykss - splitted_array = pykss.split_sentences(text) + from . import split_sentences_kss as kss2 + splitted_array = kss2.kss.pykss.split_sentences(text) # Tokenizer tokenized_table = _tokenizer_kor(texts=splitted_array, pos_extraction=['Noun']) len_doc = len(tokenized_table) - + # Tokenizer afterprocess tokenized_sentence = ([' '.join(tokenized_table[i]) for i in range(len_doc)]) - + return tokenized_sentence, splitted_array, len_doc @@ -101,7 +102,7 @@ def _text_summarizer(text, ratio, num_sentence, damping_factor): # Documents correlation matrix tokenized_sentence, splitted_array, len_doc = _tokenize_for_summarize(text=text) - if (ratio != 2): + if ratio is not None: num_sentence = np.maximum(int(len_doc * ratio), 1) else: num_sentence = np.minimum(len_doc, num_sentence) @@ -117,16 +118,18 @@ def _text_summarizer(text, ratio, num_sentence, damping_factor): return summarized_text, result_table, num_sentence -def _doc_summarizer_kor(table, input_col, hold_cols=None, result_type='summarized_document', new_col_name='summarized_document', ratio=2, num_sentence=1, damping_factor=0.85): +def _doc_summarizer_kor(table, input_col, hold_cols=None, result_type='summarized_document', + new_col_name='summarized_document', ratio=None, num_sentence=1, damping_factor=0.85): doc_col = table[input_col].values len_doc_col = len(doc_col) - + if hold_cols is None: - hold_cols = [input_col] - out_table = table[hold_cols] + out_table = table.copy() + else: + out_table = table[hold_cols] - if (result_type == 'summarized_document'): + if result_type == 'summarized_document': summarizer = np.vectorize(_text_summarizer) result_table = summarizer(doc_col, ratio=ratio, num_sentence=num_sentence, damping_factor=damping_factor)[0] out_table[new_col_name] = result_table @@ -142,37 +145,49 @@ def _sum_result(i): return {'out_table': out_table} -def _doc_summarizer_eng(table, input_col, hold_cols=None, result_type='summarized_document', new_col_name='summarized_document', ratio=2, num_sentence=1): +def _doc_summarizer_eng(table, input_col, hold_cols=None, result_type='summarized_document', + new_col_name='summarized_document', ratio=None, num_sentence=1): doc_col = table[input_col].values len_doc_col = len(doc_col) - + if hold_cols is None: - hold_cols = [input_col] - out_table = table[hold_cols] + out_table = table.copy() + else: + out_table = table[hold_cols] table_list = [] for i in range(len_doc_col): - len_doc = len(summarize(doc_col[i], ratio=1, split=True)) - if (ratio != 2): - _num_sentence = np.maximum(int(len_doc * ratio), 1) - _ratio = ratio + try: + len_doc = len(summarize(doc_col[i], ratio=1, split=True)) + except ValueError as e: + if str(e) == "input must have more than one sentence": + summarized_doc = doc_col[i] + summarized_sents = [doc_col[i]] + _num_sentence = 1 + else: + raise else: - _num_sentence = np.minimum(len_doc, num_sentence) - _ratio = (_num_sentence / len_doc if len_doc != 0 else 1) - if (result_type == 'summarized_document'): - summarized_col = [summarize(doc_col[i], ratio=_ratio)] + if ratio is not None: + _num_sentence = np.maximum(int(len_doc * ratio), 1) + _ratio = ratio + else: + _num_sentence = np.minimum(len_doc, num_sentence) + _ratio = (_num_sentence / len_doc if len_doc != 0 else 1) + summarized_doc = summarize(doc_col[i], ratio=_ratio, split=False) + summarized_sents = summarize(doc_col[i], ratio=_ratio, split=True) + + if result_type == 'summarized_document': + summarized_col = [summarized_doc] else: - summarized_sentences = summarize(doc_col[i], ratio=_ratio, split=True) - summarized_col = np.insert(np.transpose([summarized_sentences[0:_num_sentence]]), 0, i + 1, axis=1) - table_list.append(summarized_col) + summarized_col = np.insert(np.transpose([summarized_sents[0:_num_sentence]]), 0, i + 1, axis=1) + table_list.append(summarized_col) result_table = np.concatenate(table_list, axis=0) - if (result_type == 'summarized_document'): + if result_type == 'summarized_document': out_table[new_col_name] = result_table else: out_table = pd.DataFrame(result_table, columns=['doc_id', 'sentence']) out_table['doc_id'] = out_table['doc_id'].astype(int) return {'out_table': out_table} - diff --git a/function/python/brightics/function/textanalytics/dtm.py b/function/python/brightics/function/textanalytics/dtm.py new file mode 100644 index 000000000..2b724011e --- /dev/null +++ b/function/python/brightics/function/textanalytics/dtm.py @@ -0,0 +1,264 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.repr import BrtcReprBuilder, strip_margin, pandasDF2MD, dict2MD +from brightics.function.utils import _model_dict +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate, greater_than_or_equal_to, raise_runtime_error +from brightics.common.exception import BrighticsFunctionException + +import numpy as np +import pandas as pd +import pyLDAvis as plv +from gensim.models.wrappers import DtmModel +from gensim.models.coherencemodel import CoherenceModel +from gensim import corpora +import pathlib +import platform +import os + + +def dtm(table, group_by=None, **params): + check_required_parameters(_dtm, params, ['table']) + params = get_default_from_parameters_if_required(params, _dtm) + param_validation_check = [greater_than_or_equal_to(params, 2, 'num_topic'), + greater_than_or_equal_to(params, 2, 'num_topic_word'), + greater_than_or_equal_to(params, 1, 'max_iter')] + validate(*param_validation_check) + if group_by is not None: + return _function_by_group(_dtm, table, group_by=group_by, **params) + else: + return _dtm(table, **params) + + +def _dtm(table, input_col, topic_name='topic', num_topic=5, num_topic_word=10, max_iter=20, time_slice=None, + coherence='u_mass', vis_time=0, seed=None): + running_os = platform.system() + is_os_64bit = platform.machine().endswith('64') + if running_os == 'Linux': + if is_os_64bit: + dtm_filename = 'dtm-linux64' + else: + dtm_filename = 'dtm-linux32' + elif running_os == 'Windows': + if is_os_64bit: + dtm_filename = 'dtm-win64.exe' + else: + dtm_filename = 'dtm-win32.exe' + else: # Mac + dtm_filename = 'dtm-darwin64' + dtm_path = os.path.join(str(pathlib.Path(__file__).parent.absolute()), 'dtm', dtm_filename) + tokenized_doc = np.array(table[input_col]) + num_doc = len(tokenized_doc) + if time_slice is None: + time_slice = [num_doc] + elif sum(time_slice) != num_doc: + raise_runtime_error("The sum of time slice list does not match the number of documents.") + if vis_time < 0 or vis_time >= len(time_slice): + raise_runtime_error("Invalid time parameter: {}".format(vis_time)) + dictionary = corpora.Dictionary(tokenized_doc) + corpus = [dictionary.doc2bow(text) for text in tokenized_doc] + dtm_params = {"corpus": corpus, + "id2word": dictionary, + "time_slices": time_slice, + "num_topics": num_topic, + "lda_sequence_max_iter": max_iter, + "model": 'dtm'} + if seed is not None: + dtm_params["rng_seed"] = seed + dtm_model = DtmModel(dtm_path, **dtm_params) + + topic_time = [[dtm_model.show_topic(topicid=id, time=t, topn=num_topic_word) for id in range(num_topic)] + for t in range(len(time_slice))] + topic_time = [[["{}: {}".format(tup[1], tup[0]) for tup in topic] for topic in time] for time in topic_time] + timeline = ["{} ({} docs)".format(ind, t) for ind, t in enumerate(time_slice)] + columns = ["topic_{}".format(i + 1) for i in range(num_topic)] + topic_table = pd.DataFrame(topic_time, columns=columns) + topic_table['time'] = timeline + topic_table = topic_table[['time'] + columns] + + prop_arr = dtm_model.gamma_ + out_table = pd.DataFrame.copy(table, deep=True) + if topic_name in table.columns: + raise BrighticsFunctionException.from_errors( + [{'0100': "Existing table contains Topic Column Name. Please choose again."}]) + out_table[topic_name] = [item.argmax() + 1 for item in prop_arr] + out_table['topic_distribution'] = prop_arr.tolist() + + coherence_topic_arr = [dtm_model.dtm_coherence(time) for time in range(len(time_slice))] + if coherence == 'u_mass': + coh_arr = [CoherenceModel(topics=item, dictionary=dictionary, corpus=corpus, coherence='u_mass').get_coherence() + for item in coherence_topic_arr] + else: + coh_arr = [CoherenceModel(topics=item, dictionary=dictionary, corpus=corpus, texts=tokenized_doc, + coherence='c_v').get_coherence() for item in coherence_topic_arr] + + doc_topic, topic_term, doc_lengths, term_frequency, vocab = dtm_model.dtm_vis(corpus, vis_time) + prepared_data = plv.prepare(topic_term, doc_topic, doc_lengths, vocab, term_frequency, sort_topics=False) + html_result = plv.prepared_data_to_html(prepared_data) + + params = {'Input column': input_col, + 'Topic column name': topic_name, + 'Number of topics': num_topic, + 'Number of words for each topic': num_topic_word, + 'Maximum number of iterations': max_iter, + 'Time slice': time_slice, + 'Coherence measure': coherence, + 'Time to visualize': vis_time} + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## Dynamic Topic Modeling Result + | ### Summary + | + """)) + rb.addHTML(html_result) + rb.addMD(strip_margin(""" + | ### Coherence for each period + | {coh_arr} + | + | ### Parameters + | {params} + """.format(coh_arr=coh_arr, params=dict2MD(params)))) + + model = _model_dict('dtm_model') + model['params'] = params + model['dtm_model'] = dtm_model + model['coherences'] = coh_arr + model['corpus'] = corpus + model['_repr_brtc_'] = rb.get() + + return {'out_table': out_table, 'topic_table': topic_table, 'model': model} + + +def dim(table, group_by=None, **params): + check_required_parameters(_dim, params, ['table']) + params = get_default_from_parameters_if_required(params, _dim) + param_validation_check = [greater_than_or_equal_to(params, 2, 'num_topic'), + greater_than_or_equal_to(params, 2, 'num_topic_word'), + greater_than_or_equal_to(params, 1, 'max_iter')] + validate(*param_validation_check) + if group_by is not None: + return _function_by_group(_dim, table, group_by=group_by, **params) + else: + return _dim(table, **params) + + +def _dim(table, input_col, topic_name='topic', num_topic=5, num_topic_word=10, max_iter=20, time_slice=None, + coherence='u_mass', vis_time=0, seed=None): + running_os = platform.system() + is_os_64bit = platform.machine().endswith('64') + if running_os == 'Linux': + if is_os_64bit: + dtm_filename = 'dtm-linux64' + else: + dtm_filename = 'dtm-linux32' + elif running_os == 'Windows': + if is_os_64bit: + dtm_filename = 'dtm-win64.exe' + else: + dtm_filename = 'dtm-win32.exe' + else: # Mac + dtm_filename = 'dtm-darwin64' + dtm_path = os.path.join(str(pathlib.Path(__file__).parent.absolute()), 'dtm', dtm_filename) + tokenized_doc = np.array(table[input_col]) + num_doc = len(tokenized_doc) + if time_slice is None: + time_slice = [num_doc] + elif sum(time_slice) != num_doc: + raise_runtime_error("The sum of time slice list does not match the number of documents.") + if vis_time < 0 or vis_time >= len(time_slice): + raise_runtime_error("Invalid time parameter: {}".format(vis_time)) + dictionary = corpora.Dictionary(tokenized_doc) + corpus = [dictionary.doc2bow(text) for text in tokenized_doc] + dim_params = {"corpus": corpus, + "id2word": dictionary, + "time_slices": time_slice, + "num_topics": num_topic, + "lda_sequence_max_iter": max_iter, + "model": 'fixed'} + if seed is not None: + dim_params["rng_seed"] = seed + dtm_model = DtmModel(dtm_path, **dim_params) + + topic_time = [[dtm_model.show_topic(topicid=topic_id, time=t, topn=num_topic_word) for topic_id in range(num_topic)] + for t in range(len(time_slice))] + topic_time = [[["{}: {}".format(tup[1], tup[0]) for tup in topic] for topic in time] for time in topic_time] + timeline = ["{} ({} docs)".format(ind, t) for ind, t in enumerate(time_slice)] + columns = ["topic_{}".format(i + 1) for i in range(num_topic)] + topic_table = pd.DataFrame(topic_time, columns=columns) + topic_table['time'] = timeline + topic_table = topic_table[['time'] + columns] + + prop_arr = dtm_model.gamma_ + out_table = pd.DataFrame.copy(table, deep=True) + if topic_name in table.columns: + raise BrighticsFunctionException.from_errors( + [{'0100': "Existing table contains Topic Column Name. Please choose again."}]) + out_table[topic_name] = [item.argmax() + 1 for item in prop_arr] + out_table['topic_distribution'] = prop_arr.tolist() + + # original influence table: influences_time[time_slice][document_no][topic_no] + influence_arr = np.vstack(dtm_model.influences_time) + influence_table = pd.DataFrame(influence_arr, columns=columns) + time_id = np.concatenate([id * np.ones(duration) for id, duration in enumerate(time_slice)]) + influence_table['time'] = time_id + influence_table = influence_table[['time'] + columns] + + coherence_topic_arr = [dtm_model.dtm_coherence(time) for time in range(len(time_slice))] + if coherence == 'u_mass': + coh_arr = [CoherenceModel(topics=item, dictionary=dictionary, corpus=corpus, coherence='u_mass').get_coherence() + for item in coherence_topic_arr] + else: + coh_arr = [CoherenceModel(topics=item, dictionary=dictionary, corpus=corpus, texts=tokenized_doc, + coherence='c_v').get_coherence() for item in coherence_topic_arr] + + doc_topic, topic_term, doc_lengths, term_frequency, vocab = dtm_model.dtm_vis(corpus, vis_time) + prepared_data = plv.prepare(topic_term, doc_topic, doc_lengths, vocab, term_frequency, sort_topics=False) + html_result = plv.prepared_data_to_html(prepared_data) + + params = {'Input column': input_col, + 'Topic column name': topic_name, + 'Number of topics': num_topic, + 'Number of words for each topic': num_topic_word, + 'Maximum number of iterations': max_iter, + 'Time slice': time_slice, + 'Coherence measure': coherence, + 'Time to visualize': vis_time} + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## Document Influence Model Result + | ### Summary + | + """)) + rb.addHTML(html_result) + rb.addMD(strip_margin(""" + | ### Coherence for each period + | {coh_arr} + | + | ### Parameters + | {params} + """.format(coh_arr=coh_arr, params=dict2MD(params)))) + + model = _model_dict('dtm_model') + model['params'] = params + model['dtm_model'] = dtm_model + model['coherences'] = coh_arr + model['corpus'] = corpus + model['_repr_brtc_'] = rb.get() + + return {'out_table': out_table, 'topic_table': topic_table, 'influence_table': influence_table, 'model': model} diff --git a/function/python/brightics/function/textanalytics/dtm/dtm-darwin64 b/function/python/brightics/function/textanalytics/dtm/dtm-darwin64 new file mode 100755 index 000000000..eb02e3048 Binary files /dev/null and b/function/python/brightics/function/textanalytics/dtm/dtm-darwin64 differ diff --git a/function/python/brightics/function/textanalytics/dtm/dtm-linux32 b/function/python/brightics/function/textanalytics/dtm/dtm-linux32 new file mode 100755 index 000000000..22b1b1b73 Binary files /dev/null and b/function/python/brightics/function/textanalytics/dtm/dtm-linux32 differ diff --git a/function/python/brightics/function/textanalytics/dtm/dtm-linux64 b/function/python/brightics/function/textanalytics/dtm/dtm-linux64 new file mode 100755 index 000000000..c27bb92bb Binary files /dev/null and b/function/python/brightics/function/textanalytics/dtm/dtm-linux64 differ diff --git a/function/python/brightics/function/textanalytics/dtm/dtm-win32.exe b/function/python/brightics/function/textanalytics/dtm/dtm-win32.exe new file mode 100755 index 000000000..9c7b5d5e5 Binary files /dev/null and b/function/python/brightics/function/textanalytics/dtm/dtm-win32.exe differ diff --git a/function/python/brightics/function/textanalytics/dtm/dtm-win64.exe b/function/python/brightics/function/textanalytics/dtm/dtm-win64.exe new file mode 100755 index 000000000..77faac210 Binary files /dev/null and b/function/python/brightics/function/textanalytics/dtm/dtm-win64.exe differ diff --git a/function/python/brightics/function/textanalytics/extract_senti_words.py b/function/python/brightics/function/textanalytics/extract_senti_words.py index 8a9312acf..5c9218ac6 100644 --- a/function/python/brightics/function/textanalytics/extract_senti_words.py +++ b/function/python/brightics/function/textanalytics/extract_senti_words.py @@ -29,8 +29,9 @@ def _extract_senti_words(table, input_col, user_dict=None, hold_cols=None): len_text = len(table) if hold_cols is None: - hold_cols = [input_col] - out_table = table[hold_cols] + out_table = table.copy() + else: + out_table = table[hold_cols] text_data = table[input_col].values basic_dict = dict(pd.read_csv('brightics/function/textanalytics/data/senti_words_basic_dict_kor.csv').values) diff --git a/function/python/brightics/function/textanalytics/fasttext.py b/function/python/brightics/function/textanalytics/fasttext.py new file mode 100644 index 000000000..cf115b08c --- /dev/null +++ b/function/python/brightics/function/textanalytics/fasttext.py @@ -0,0 +1,280 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from gensim.models import FastText +import matplotlib.pyplot as plt +from sklearn.manifold import TSNE +import pandas as pd +import numpy as np + +from brightics.common.repr import BrtcReprBuilder +from brightics.common.repr import strip_margin +from brightics.function.utils import _model_dict +from brightics.common.repr import dict2MD +from brightics.common.repr import plt2MD +from brightics.common.repr import pandasDF2MD +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate +from brightics.common.validation import greater_than_or_equal_to + + +def fasttext(table, **params): + check_required_parameters(_fasttext, params, ['table']) + + params = get_default_from_parameters_if_required(params, _fasttext) + param_validation_check = [greater_than_or_equal_to(params, 1, 'size'), + greater_than_or_equal_to(params, 1, 'window'), + greater_than_or_equal_to(params, 1, 'min_count'), + greater_than_or_equal_to(params, 1, 'train_epoch'), + greater_than_or_equal_to(params, 1, 'workers'), + greater_than_or_equal_to(params, 1, 'negative'), + greater_than_or_equal_to(params, 1, 'topn'), + greater_than_or_equal_to(params, 1, 'min_n'), + greater_than_or_equal_to(params, 1, 'max_n'), + greater_than_or_equal_to(params, 1, 'bucket')] + validate(*param_validation_check) + return _fasttext(table, **params) + + +def _fasttext(table, input_col, sg=1, size=100, window=5, min_count=1, + max_vocab_size=None, train_epoch=100, workers=1, alpha=0.025, + min_alpha=0.025, seed=None, hs=1, negative=5, ns_exponent=0.75, + topn=30, hashfxn=hash, min_n=3, max_n=6, bucket=2000000): + if isinstance(sg, str): + sg = int(sg) + algo = {1: 'Skip-gram', 0: 'CBOW'}[sg] + + tagged_sents = table[input_col].apply(list).tolist() + ft = FastText(sentences=tagged_sents, + sg=sg, + size=size, + window=window, + alpha=alpha, + min_alpha=min_alpha, + seed=seed, + min_count=min_count, + max_vocab_size=max_vocab_size, + workers=workers, + iter=train_epoch, + hs=hs, + negative=negative, + ns_exponent=ns_exponent, + hashfxn=hashfxn, + min_n=min_n, + max_n=max_n, + bucket=bucket) + + ft.init_sims(replace=True) + vocab = ft.wv.vocab + + analogies_score, sections = ft.wv.evaluate_word_analogies( + 'brightics/function/textanalytics/data/word2vec_questions_words.txt') + pearson_1, spearman_1, oov_ratio_1 = ft.wv.evaluate_word_pairs( + 'brightics/function/textanalytics/data/word2vec_wordsim353.tsv') + pearson_2, spearman_2, oov_ratio_2 = ft.wv.evaluate_word_pairs( + 'brightics/function/textanalytics/data/word2vec_simlex999.tsv') + + params = {'Input column': input_col, + 'Training algorithm': algo, + 'Word vector dimensionality': size, + 'Window': window, + 'Minimum word count': min_count, + 'Max vocabulary size': max_vocab_size, + 'Train epoch': train_epoch, + 'Number of workers': workers, + 'Alpha': alpha, + 'Minimum alpha': min_alpha, + 'Seed': seed, + 'Hierarchical softmax': hs, + 'Negative': negative, + 'Negative sampling exponent': ns_exponent} + + # tsne visualization + length = len(vocab) + if length < topn: + topn = length + topn_words = sorted(vocab, key=vocab.get, reverse=True)[:topn] + + X = ft[topn_words] + tsne = TSNE(n_components=min(2, topn), random_state=seed) + X_tsne = tsne.fit_transform(X) + df = pd.DataFrame(X_tsne, index=topn_words, columns=['x', 'y']) + + fig = plt.figure() + fig.set_size_inches(50, 40) + ax = fig.add_subplot(1, 1, 1) + + ax.scatter(df['x'], df['y'], s=1000) + ax.tick_params(axis='both', which='major', labelsize=50) + + for word, pos in df.iterrows(): + ax.annotate(word, pos, fontsize=80) + plt.show() + fig = plt2MD(plt) + plt.clf() + + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## FastText Result + | + | ### Total Number of words + | {length} + | + | ### Top {topn} Words + | {topn_words} + | {fig} + | + | ### Word analogy score + | {analogies_score} + | + | ### Word correlation scores + | #### Pearson correlation coefficient with 2-tailed p-value (WordSim353) + | {pearson_1_1}, {pearson_1_2} + | #### Spearman rank-order correlation coefficient with 2-tailed p-value (WordSim353) + | {spearman_1_1}, {spearman_1_2} + | #### The ratio of pairs with unknown words (WordSim353) + | {oov_ratio_1} + | #### Pearson correlation coefficient with 2-tailed p-value (SimLex999) + | {pearson_2_1}, {pearson_2_2} + | #### Spearman rank-order correlation coefficient with 2-tailed p-value (SimLex999) + | {spearman_2_1}, {spearman_2_2} + | #### The ratio of pairs with unknown words (SimLex999) + | {oov_ratio_2} + | + | ### Parameters + | {params} + """.format(length=length, analogies_score=analogies_score, + pearson_1_1=pearson_1[0], pearson_1_2=pearson_1[1], spearman_1_1=spearman_1[0], + spearman_1_2=spearman_1[1], oov_ratio_1=oov_ratio_1, + pearson_2_1=pearson_2[0], pearson_2_2=pearson_2[1], spearman_2_1=spearman_2[0], + spearman_2_2=spearman_2[1], oov_ratio_2=oov_ratio_2, + topn=topn, topn_words=topn_words, params=dict2MD(params), fig=fig))) + + vocab = list(ft.wv.vocab) + + model = _model_dict('fasttext_model') + model['params'] = params + model['vocab'] = vocab + model['ft'] = ft.wv + model['_repr_brtc_'] = rb.get() + + out_table = pd.DataFrame({'words': vocab, 'word_vectors': ft.wv[vocab].tolist()}) + return {'model': model, 'out_table': out_table} + + +def _feature_vec(words, model, num_features): + feature_vector = np.zeros(num_features, dtype="float64") + word_set = set(model.index2word) + num_words = 0 + for word in words: + if word in word_set: + feature_vector = np.add(feature_vector, model[word]) + num_words = num_words + 1. + feature_vector = np.divide(feature_vector, num_words) + return feature_vector + + +def _avg_feature_vecs(docs, model, num_features): + doc_feature_vectors = np.zeros((len(docs), num_features), dtype="float64") + counter = 0. + for doc in docs: + doc_feature_vectors[int(counter)] = _feature_vec(doc, model, num_features) + counter = counter + 1. + return doc_feature_vectors + + +def fasttext_model(table, model, **params): + check_required_parameters(_fasttext_model, params, ['table', 'model']) + return _fasttext_model(table, model, **params) + + +def _fasttext_model(table, model): + doc = table[model['params']['Input column']] + ft_model = model['ft'] + num_features = model['params']['Word vector dimensionality'] + + out_table = table.copy() + out_table['feature_vectors'] = _avg_feature_vecs(doc, ft_model, num_features).tolist() + return {'out_table': out_table} + + +def fasttext_similarity(table, model, **params): + check_required_parameters(_fasttext_similarity, params, ['table', 'model']) + + params = get_default_from_parameters_if_required(params, _fasttext_similarity) + param_validation_check = [greater_than_or_equal_to(params, 1, 'topn')] + validate(*param_validation_check) + return _fasttext_similarity(table, model, **params) + + +def _fasttext_similarity(table, model, positive_col=None, negative_col=None, topn=1): + if positive_col is None and negative_col is None: + raise ValueError('The similarity cannot be computed with no input.') + + if positive_col is None: + columns = [negative_col] + elif negative_col is None: + columns = [positive_col] + else: + columns = [positive_col, negative_col] + + df_dropped = table[columns].dropna(how='all') + ft_model = model['ft'] + + if positive_col is None: + res = df_dropped.apply(lambda _: _ft_sim_neg(ft_model, negative=_[negative_col], topn=topn), axis=1) + elif negative_col is None: + res = df_dropped.apply(lambda _: _ft_sim_pos(ft_model, positive=_[positive_col], topn=topn), axis=1) + else: + res = df_dropped.apply( + lambda _: _ft_sim_both(ft_model, positive=_[positive_col], negative=_[negative_col], topn=topn), axis=1) + + out_table = pd.DataFrame(sum(res, []), columns=columns + ['synonym', 'similarity']) + return {'out_table': out_table} + + +def _split_token(text): + if text is not None: + return [token.strip() for token in text.split(",")] + return None + + +def _ft_sim_pos(model, positive, topn=1): + split_positive = _split_token(positive) + result = model.most_similar(positive=split_positive, topn=topn) + res = [[positive] + list(result[i]) for i in range(len(result))] + return res + + +def _ft_sim_neg(model, negative, topn=1): + split_negative = _split_token(negative) + result = model.most_similar(negative=split_negative, topn=topn) + res = [[negative] + list(result[i]) for i in range(len(result))] + return res + + +def _ft_sim_both(model, positive=None, negative=None, topn=1): + split_positive = _split_token(positive) + split_negative = _split_token(negative) + result = model.most_similar(positive=split_positive, negative=split_negative, topn=topn) + if positive is None: + res = [[None] + [negative] + list(result[i]) for i in range(len(result))] + elif negative is None: + res = [[positive] + [None] + list(result[i]) for i in range(len(result))] + else: + res = [[positive] + [negative] + list(result[i]) for i in range(len(result))] + return res diff --git a/function/python/brightics/function/textanalytics/gsdmm.py b/function/python/brightics/function/textanalytics/gsdmm.py new file mode 100644 index 000000000..ecd4098ed --- /dev/null +++ b/function/python/brightics/function/textanalytics/gsdmm.py @@ -0,0 +1,154 @@ +""" + Copyright 2020 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.repr import BrtcReprBuilder, strip_margin, pandasDF2MD, dict2MD +from brightics.function.utils import _model_dict +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate, greater_than_or_equal_to +from brightics.common.exception import BrighticsFunctionException + +from sklearn.preprocessing import normalize +import numpy as np +import pandas as pd +from .short_text_topic_modeling_gsdmm import gsdmm_rwalk +import functools +import pyLDAvis + + +def gsdmm(table, **params): + check_required_parameters(_gsdmm, params, ['table']) + params = get_default_from_parameters_if_required(params, _gsdmm) + param_validation_check = [greater_than_or_equal_to(params, 2, 'K'), + greater_than_or_equal_to(params, 0.0, 'alpha'), + greater_than_or_equal_to(params, 0.0, 'beta'), + greater_than_or_equal_to(params, 1, 'max_iter'), + greater_than_or_equal_to(params, 1, 'num_topic_words')] + + validate(*param_validation_check) + return _gsdmm(table, **params) + + +def _count_to_ratio_raw(word_count): + if not word_count: + return {} + else: + word_count_list = word_count.items() + words = [pair[0] for pair in word_count_list] + counts = [[pair[1]] for pair in word_count_list] + counts_normalized = normalize(counts, norm='l1', axis=0) + word_ratio_raw = {word: ratio[0] for word, ratio in zip(words, counts_normalized)} + return word_ratio_raw + + +def _gen_table(word_ratio_raw, num_topic_words): + if not word_ratio_raw: + return [""] + else: + word_ratio_sorted = sorted(word_ratio_raw.items(), key=lambda item: item[1], reverse=True) + word_ratio = [["{}: {}".format(word, ratio), word, ratio] for word, ratio in word_ratio_sorted] + return np.transpose(word_ratio[:num_topic_words]).tolist() + + +def _gsdmm(table, input_col, topic_name='topic', K=10, alpha=0.1, beta=0.1, max_iter=50, num_topic_words=3): + docs = np.array(table[input_col]) + docs_set = [set(doc) for doc in docs] + docs_preprocessed = [list(doc_set) for doc_set in docs_set] + vocab_set = list(set.union(*docs_set)) + vocab_size = len(vocab_set) + + # initialize and train a GSDMM model + mgp = gsdmm_rwalk.MovieGroupProcess(K=K, alpha=alpha, beta=beta, n_iters=max_iter) + topics = mgp.fit(docs_preprocessed, vocab_size) + + # generate topic table + topic_word_count = mgp.cluster_word_distribution + topic_words_raw = [[ind, _count_to_ratio_raw(word_count)] + for ind, word_count in enumerate(topic_word_count) if word_count] + topic_words = [[item[0]] + _gen_table(item[1], num_topic_words) for item in topic_words_raw] + + # reset topic ids + nonempty_topic_indices = [item[0] for item in topic_words] + reset_topic_ind = {old_ind: (new_ind + 1) for new_ind, old_ind in enumerate(nonempty_topic_indices)} + topics = [reset_topic_ind[old_ind] for old_ind in topics] + topic_words = [[reset_topic_ind[old_item[0]]] + old_item[1:] for old_item in topic_words] + + # generate output dataframes + out_table = pd.DataFrame.copy(table, deep=True) + if topic_name in table.columns: + raise BrighticsFunctionException.from_errors( + [{'0100': "Existing table contains the topic column name. Please choose another name."}]) + out_table[topic_name] = topics + columns = ['index', 'vocabularies_weights', 'vocabularies', 'weights'] + topic_table = pd.DataFrame(topic_words, columns=columns) + topic_table['weights'] = topic_table['weights'].apply(pd.to_numeric) + + # pyLDAvis + if len(topic_words) == 1: + html_result = None + else: + topic_words_dicts = [item[1] for item in topic_words_raw] + topic_term_dists = [[topic_words_dict.get(word, 0) for word in vocab_set] for topic_words_dict in + topic_words_dicts] + num_docs = len(topics) + num_topics = len(topic_words_raw) + doc_topic_dists = np.zeros((num_docs, num_topics)) + for doc_id, topic_id in enumerate(topics): + doc_topic_dists[doc_id][topic_id - 1] = 1.0 + doc_lengths = [len(doc) for doc in docs_preprocessed] + vocab_count = functools.reduce( + lambda dict_1, dict_2: {word: dict_1.get(word, 0) + dict_2.get(word, 0) for word in + set(dict_1).union(dict_2)}, + topic_word_count) + term_frequency = [vocab_count.get(word) for word in vocab_set] + + prepared_data = pyLDAvis.prepare(topic_term_dists, doc_topic_dists, doc_lengths, vocab_set, term_frequency) + html_result = pyLDAvis.prepared_data_to_html(prepared_data) + + # generate report + params = {'Input column': input_col, + 'Topic column name': topic_name, + 'K': K, + 'Alpha': alpha, + 'Beta': beta, + 'Maximum number of iterations': max_iter, + 'Number of words for each topic': num_topic_words} + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## GSDMM Result + | ### Summary + | + """)) + if html_result is not None: + rb.addHTML(html_result) + rb.addMD(strip_margin(""" + | + """)) + rb.addMD(strip_margin(""" + | ### Final Number of Topics + | {num_topics} + | + | ### Parameters + | {params} + """.format(num_topics=len(topic_words_raw), params=dict2MD(params)))) + + # create model + model = _model_dict('lda_model') + model['params'] = params + model['gsdmm_model'] = mgp + model['_repr_brtc_'] = rb.get() + + return {'out_table': out_table, 'topic_table': topic_table, 'model': model} diff --git a/function/python/brightics/function/textanalytics/lda.py b/function/python/brightics/function/textanalytics/lda.py index 4747be17d..f933ae467 100644 --- a/function/python/brightics/function/textanalytics/lda.py +++ b/function/python/brightics/function/textanalytics/lda.py @@ -25,8 +25,130 @@ from sklearn.feature_extraction.text import CountVectorizer from sklearn.decomposition import LatentDirichletAllocation +from sklearn.preprocessing import normalize import numpy as np import pandas as pd +import pyLDAvis +import pyLDAvis.sklearn as ldavis + + +def lda4(table, group_by=None, **params): + check_required_parameters(_lda4, params, ['table']) + params = get_default_from_parameters_if_required(params, _lda4) + param_validation_check = [greater_than_or_equal_to(params, 2, 'num_voca'), + greater_than_or_equal_to(params, 2, 'num_topic'), + from_to( + params, 2, params['num_voca'], 'num_topic_word'), + greater_than_or_equal_to(params, 1, 'max_iter'), + greater_than(params, 1.0, 'learning_offset')] + + validate(*param_validation_check) + if group_by is not None: + return _function_by_group(_lda4, table, group_by=group_by, **params) + else: + return _lda4(table, **params) + + +def _lda4(table, input_col, topic_name='topic', num_voca=1000, num_topic=5, num_topic_word=10, max_iter=20, + learning_method='online', learning_offset=10., random_state=None): + # generate model + corpus = np.array(table[input_col]) + if isinstance(corpus[0], np.ndarray): + tf_vectorizer = CountVectorizer( + preprocessor=' '.join, stop_words='english', max_df=0.95, min_df=2, max_features=num_voca) + else: + tf_vectorizer = CountVectorizer( + max_df=0.95, min_df=2, max_features=num_voca, stop_words='english') + term_count = tf_vectorizer.fit_transform(corpus) + tf_feature_names = tf_vectorizer.get_feature_names() + if learning_method == 'online': + lda_model = LatentDirichletAllocation(n_components=num_topic, max_iter=max_iter, + learning_method=learning_method, + learning_offset=learning_offset, random_state=random_state).fit( + term_count) + elif learning_method == 'batch': + lda_model = LatentDirichletAllocation( + n_components=num_topic, max_iter=max_iter, learning_method=learning_method, random_state=random_state).fit( + term_count) + else: + raise_runtime_error("Please check 'learning_method'.") + log_likelihood = lda_model.score(term_count) + perplexity = lda_model.perplexity(term_count) + + # create topic table + vocab_weights_list = [] + vocab_list = [] + weights_list = [] + topic_term_prob = normalize(lda_model.components_, norm='l1') + for vector in topic_term_prob: + pairs = [] + for term_idx, value in enumerate(vector): + pairs.append((abs(value), tf_feature_names[term_idx])) + pairs.sort(key=lambda x: x[0], reverse=True) + vocab_weights = [] + vocab = [] + weights = [] + for pair in pairs[:num_topic_word]: + vocab_weights.append("{}: {}".format(pair[1], pair[0])) + vocab.append(pair[1]) + weights.append(pair[0]) + vocab_weights_list.append(vocab_weights) + vocab_list.append(vocab) + weights_list.append(weights) + topic_table = pd.DataFrame( + {'vocabularies_weights': vocab_weights_list, 'vocabularies': vocab_list, 'weights': weights_list}) + topic_table['index'] = [idx + 1 for idx in topic_table.index] + topic_table = topic_table[['index', 'vocabularies_weights', 'vocabularies', 'weights']] + + # create output table + doc_topic = lda_model.transform(term_count) + out_table = pd.DataFrame.copy(table, deep=True) + topic_dist_name = topic_name + '_distribution' + if topic_name in table.columns or topic_dist_name in table.columns: + raise BrighticsFunctionException.from_errors( + [{'0100': "Existing table contains Topic Column Name. Please choose again."}]) + out_table[topic_name] = [doc_topic[i].argmax() + 1 for i in range(len(corpus))] + out_table[topic_dist_name] = doc_topic.tolist() + + # pyLDAvis + prepared_data = ldavis.prepare(lda_model, term_count, tf_vectorizer) + html_result = pyLDAvis.prepared_data_to_html(prepared_data) + + # generate report + params = {'Input column': input_col, + 'Topic column name': topic_name, + 'Number of topics': num_topic, + 'Number of words for each topic': num_topic_word, + 'Maximum number of iterations': max_iter, + 'Learning method': learning_method, + 'Learning offset': learning_offset, + 'Seed': random_state} + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## Latent Dirichlet Allocation Result + | ### Summary + | + """)) + rb.addHTML(html_result) + rb.addMD(strip_margin(""" + | + | ### Log Likelihood + | {log_likelihood} + | + | ### Perplexity + | {perplexity} + | + | ### Parameters + | {params} + """.format(log_likelihood=log_likelihood, perplexity=perplexity, params=dict2MD(params)))) + + # create model + model = _model_dict('lda_model') + model['params'] = params + model['lda_model'] = lda_model + model['_repr_brtc_'] = rb.get() + + return {'out_table': out_table, 'topic_table': topic_table, 'model': model} def lda3(table, group_by=None, **params): diff --git a/function/python/brightics/function/textanalytics/meta/bow.json b/function/python/brightics/function/textanalytics/meta/bow.json index c62900aa2..a62e5c59d 100644 --- a/function/python/brightics/function/textanalytics/meta/bow.json +++ b/function/python/brightics/function/textanalytics/meta/bow.json @@ -632,8 +632,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/dim.json b/function/python/brightics/function/textanalytics/meta/dim.json new file mode 100644 index 000000000..51adb131a --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/dim.json @@ -0,0 +1,1470 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$dim", + "name": "brightics.function.textanalytics$dim", + "context": "python", + "label": "Document Influence Model", + "description": "Document Influences Model (DIM), which is based on the dynamic topic model, is a probabilistic model that captures how past articles exhibit varying influence on future articles. It is assumed that an article’s influence on the future is corroborated by how the language of its field changes subsequent to its publication. In the model, the influence of each article is encoded as a hidden variable and posterior inference reveals the influential articles of the collection.\n\nReference\n\n+ Gerrish & Blei, 2010", + "tags": [ + "dtm", + "topic modeling", + "dim" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "topic_table": "", + "influence_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Topic classification result attached to the input table." + }, + "topic_table": { + "type": "table", + "desc": "Table which consists of each topic's vocabulary and weights." + }, + "influence_table": { + "type": "table", + "desc": "Table which shows how much each document gave an influence to each topic." + }, + "model": { + "type": "model", + "desc": "Result model." + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": "Text data column to select as an input. Data type should be of string array type.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "String[]" + ], + "multiple": false + }, + { + "id": "topic_name", + "label": "Topic Column Name", + "description": "Column name for topic modeling result.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "topic" + }, + { + "id": "num_topic", + "label": "Number of Topics", + "description": "The number of topics that will be contained in the entire documents. It should be greater than or equal to two.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 2, + "placeHolder": "5 (value >= 2)" + }, + { + "id": "num_topic_word", + "label": "Number of Terminologies", + "description": "Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "10 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "max_iter", + "label": "Iterations", + "description": "Maximum number of iterations you want to run your model. It should be at least one.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "20 (value >= 1)" + }, + { + "id": "time_slice", + "label": "Time Slice", + "description": "The numbers of documents for each period. The sum of the numbers should be equal to the total number of documents. Default value is a singleton with the number of documents alone.", + "visibleOption": [], + "control": "ArrayInput", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer", + "placeHolder": "(value >= 1)", + "min": 1 + }, + { + "id": "coherence", + "label": "Coherence Measure", + "description": "Coherence measure of the resulting topic modeling.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "UMass", + "value": "u_mass", + "default": true + }, + { + "label": "C_V", + "value": "c_v", + "default": false + } + ], + "columnType": [] + }, + { + "id": "vis_time", + "label": "Time to visualize", + "description": "Time period to visualize the result. pyLDAvis visualization for the chosen time period will be generated in the model tab. It should be greater than or equal to zero, and less than the number of time periods.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 0, + "placeHolder": "0 (0 <= value <= # time slices)" + }, + { + "id": "seed", + "label": "Seed", + "description": "The seed used by the random number generator.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "placeHolder": "" + } + ], + "summary": "This function builds a topic model for text documents with regard to time. Also provides an influence table, which consists of information how much each document from each time period gave influence to each topic." + }, + "md": { + "en": "# Document Influence Model\nThis function builds a topic model for text documents with regard to time. Also provides an influence table, which consists of information how much each document from each time period gave influence to each topic.\n\n## Description\nDocument Influences Model (DIM), which is based on the dynamic topic model, is a probabilistic model that captures how past articles exhibit varying influence on future articles. It is assumed that an article’s influence on the future is corroborated by how the language of its field changes subsequent to its publication. In the model, the influence of each article is encoded as a hidden variable and posterior inference reveals the influential articles of the collection.\n\nReference\n\n+ Gerrish & Blei, 2010\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Topic classification result attached to the input table.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **influence_table**: (Table) Table which shows how much each document gave an influence to each topic.\n4. **model**: (Model) Result model.\n#### PARAMETER\n1. **Input Column***: Text data column to select as an input. Data type should be of string array type.\n\n2. **Topic Column Name**: Column name for topic modeling result.\n\n3. **Number of Topics**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\n4. **Number of Terminologies**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\n5. **Iterations**: Maximum number of iterations you want to run your model. It should be at least one.\n\n6. **Time Slice**: The numbers of documents for each period. The sum of the numbers should be equal to the total number of documents. Default value is a singleton with the number of documents alone.\n\n7. **Coherence Measure**: Coherence measure of the resulting topic modeling.\n + Available Options: `UMass`, `C_V`\n\n8. **Time to visualize**: Time period to visualize the result. pyLDAvis visualization for the chosen time period will be generated in the model tab. It should be greater than or equal to zero, and less than the number of time periods.\n\n9. **Seed**: The seed used by the random number generator.\n\n\n### Python\n#### USAGE\n\n```\ndim(table= ,input_col= ,topic_name= ,num_topic= ,num_topic_word= ,max_iter= ,time_slice= ,coherence= ,vis_time= ,seed=)\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Topic classification result attached to the input table.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **influence_table**: (Table) Table which shows how much each document gave an influence to each topic.\n4. **model**: (Model) Result model.\n#### PARAMETER\n1. **input_col***: Text data column to select as an input. Data type should be of string array type.\n\t* Type: *str*\n2. **topic_name**: Column name for topic modeling result.\n\t* Type: *str*\n3. **num_topic**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 2)\n4. **num_topic_word**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\t* Type: *int*\n\t* Default / Range: 10 (value >= 2)\n5. **max_iter**: Maximum number of iterations you want to run your model. It should be at least one.\n\t* Type: *int*\n\t* Default / Range: 20 (value >= 1)\n6. **time_slice**: The numbers of documents for each period. The sum of the numbers should be equal to the total number of documents. Default value is a singleton with the number of documents alone.\n\t* Type: *str*\n7. **coherence**: Coherence measure of the resulting topic modeling.\n\t* Type: *str*\n\t* Default / Range: u_mass ( u_mass | c_v )\n8. **vis_time**: Time period to visualize the result. pyLDAvis visualization for the chosen time period will be generated in the model tab. It should be greater than or equal to zero, and less than the number of time periods.\n\t* Type: *int*\n\t* Default / Range: 0 (0 <= value <= # time slices)\n9. **seed**: The seed used by the random number generator.\n\t* Type: *int*\n\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Topics**: 3\n4. **Number of Terminologies**: 10\n5. **Iterations**: 20\n6. **Time Slice**: 2, 3, 3\n7. **Coherence Measure**: UMass\n8. **Time to visualize**: 0\n9. **Seed**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import dim\ninput_table = inputs[0]\nresult = dim(table=input_table, input_col='tokenized_text',\n topic_name='topic', num_topic=3, num_topic_word=10, max_iter=20, time_slice=[2, 3, 3],\n coherence='u_mass', vis_time=0, seed=None)\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "DIM.json", + "label": "DIM", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mhceqeccm4h2ujn7", + "project_id": "p7puh97cexbjrebu", + "label": "DIM", + "contents": { + "mid": "mhceqeccm4h2ujn7", + "type": "data", + "title": "DIM", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_LatentDirichletAllocation.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379170038", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "azckyqi7wtuya26c4gnbr98m" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379170038" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "trkvwy6kcsjrghy3" + }, + "fid": "fxn9ax3yecq9fnth" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", + "param": { + "stemming": true, + "pos_extraction": [ + "CC", + "JJ", + "JJR", + "JJS", + "NN", + "NNS", + "NNP", + "NNPS", + "RB", + "RBR", + "RBS", + "VB", + "VBD", + "VBN", + "VBP", + "VBZ" + ], + "is_tagged": false, + "input_cols": [ + "text" + ] + }, + "display": { + "label": "Tokenizer (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202349", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "egs5kgsijmv3jj4xtfrijddr" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202349" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202452", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "j7qs838697v499h6ecbiy4mf" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202452" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "trkvwy6kcsjrghy3" + }, + "outputs": { + "out_table": "t9ndenh5dw67gqju" + }, + "fid": "frka55meax5thn4p" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$dim", + "name": "brightics.function.textanalytics$dim", + "param": { + "coherence": "u_mass", + "input_col": "tokenized_text", + "num_topic": 3, + "time_slice": [ + 2, + 3, + 3 + ] + }, + "display": { + "label": "Document Influence Model", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592381736983", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "j9w2tyddd9kuer8b987ebbt3" + } + ], + "layout": { + "type": "panel", + "id": "default-1592381736983" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592381737060", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "topic_table": { + "type": "table" + }, + "influence_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t9ndenh5dw67gqju" + }, + "outputs": { + "out_table": "thf6efwntrcu3jfz", + "topic_table": "tnxpr3xysvu2x4ns", + "influence_table": "tvmpckka4myd29hc", + "model": "tpa2p63ctakvfztz" + }, + "fid": "f2nmfzb2w4c36d5r" + } + ], + "links": [ + { + "kid": "k5prbgwr4e5edcab", + "sourceFid": "fxn9ax3yecq9fnth", + "targetFid": "frka55meax5thn4p" + }, + { + "kid": "kd8m7vb4yurjbcud", + "sourceFid": "frka55meax5thn4p", + "targetFid": "f2nmfzb2w4c36d5r" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-17T08:15:03.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-17T08:16:19.000Z", + "event_key": "2020_081619.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "dim.png", + "label": "dim.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Topics**: 3\n4. **Number of Terminologies**: 10\n5. **Iterations**: 20\n6. **Time Slice**: 2, 3, 3\n7. **Coherence Measure**: UMass\n8. **Time to visualize**: 0\n9. **Seed**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import dim\r\ninput_table = inputs[0]\r\nresult = dim(table=input_table, input_col='tokenized_text',\r\n topic_name='topic', num_topic=3, num_topic_word=10, max_iter=20, time_slice=[2, 3, 3],\r\n coherence='u_mass', vis_time=0, seed=None)\r\noutput = result['out_table']", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/doc2vec.json b/function/python/brightics/function/textanalytics/meta/doc2vec.json index 095fb7fb0..7ce21fa79 100644 --- a/function/python/brightics/function/textanalytics/meta/doc2vec.json +++ b/function/python/brightics/function/textanalytics/meta/doc2vec.json @@ -9,7 +9,7 @@ "name": "brightics.function.textanalytics$doc2vec", "context": "python", "label": "Doc2Vec", - "description": "Doc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nReference: \n+ \n+ \n+ ", + "description": "Doc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nReference: \n+ \n+ \n+ \n+ \"Distributed representations of sentences and documents\", Quoc Le and Tomas Mikolov, 2014", "tags": [], "version": "3.6", "inputs": { @@ -227,11 +227,25 @@ "columnType": [], "placeHolder": "0.75", "type": "Integer" + }, + { + "id": "topn", + "label": "Top N frequent words", + "description": "Number of top N frequent words to be illustrated on 2D graph.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "placeHolder": "30 (value >= 2)", + "type": "Integer", + "min": 2 } ], "summary": "This function trains Doc2Vec model from tokenized text data." }, - "md": "# Doc2Vec\nThis function trains Doc2Vec model from tokenized text data.\n\n## Description\nDoc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nReference: \n+ \n+ \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **doc_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n2. **word_table**: (Table) Output word Table. It contains input words columns and word_vectors column.\n3. **model**: (Model) Doc2Vec model.\n#### PARAMETER\n1. **Input column***: Columns to select as input. Only List of String type columns are possible.\n\n2. **Training Algorithm**: Training algorithm. In the distributed bag of words(`PV-DBOW`) model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the distributed memory(`PV-DM`) model, the distributed representation of the input word is used to predict the context. `PV-DM` generally performs better than `PV-DBOW`.\n - Available Options : `PV-DM`, `PV-DBOW`\n\n3. **Dimension of Vectors**: Dimensionality of the feature vectors.\n\n4. **Window Size**: Maximum distance between the current and predicted word within a sentence.\n\n5. **Minimum count**: Ignores all words with total frequency lower than this.\n\n6. **Alpha**: The initial learning rate.\n\n7. **Minimum alpha**: Learning rate will linearly drop to `Minimum alpha` as training progresses.\n\n8. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n9. **Train epoch**: Number of iterations (epochs) over the corpus.\n\n10. **Number of workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\n11. **Hierarchical softmax**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n - Available Options: `True`, `False`\n\n12. **Negative**: If `Negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\n13. **Negative sampling exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n\n\n### Python\n#### USAGE\n\n```\ndoc2vec(table, input_col, dm=1, vector_size=100, window=10, min_count=1, max_vocab_size=None, train_epoch=100, workers=1, alpha=0.025, min_alpha=0.025, seed=None, hs=1, negative=5, ns_exponent=0.75, hashfxn=hash)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **doc_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n2. **word_table**: (Table) Output word Table. It contains input words columns and word_vectors column.\n3. **model**: (Model) Doc2Vec model.\n#### PARAMETER\n1. **input_col***: Columns to select as input. Only List of String type columns are possible.\n\t* Type: *str*\n2. **dm**: Training algorithm(1:PV-DM, 0:PV-DBOW). In the distributed bag of words(PV-DBOW) model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the distributed memory(`PV-DM`) model, the distributed representation of the input word is used to predict the context. PV-DM generally performs better than PV-DBOW.\n\t* Type: *int*\n\t* Default / Range: 1 ( 1 | 0 )\n3. **vector_size**: Dimensionality of the feature vectors.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n4. **window**: Maximum distance between the current and predicted word within a sentence.\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 1)\n5. **min_count**: Ignores all words with total frequency lower than this.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n6. **alpha**: The initial learning rate.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n7. **min_alpha**: Learning rate will linearly drop to `min_alpha` as training progresses.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n8. **seed**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n9. **train_epoch**: Number of iterations (epochs) over the corpus.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n10. **workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n11. **hs**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n\t* Type: *bool*\n\t* Default value: True \n12. **negative**: If `negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\t* Type: *int*\n\t* Default / Range: 5 (5 <= value <= 20)\n13. **ns_exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n\t* Type: *int*\n\t* Default / Range: 0.75 (0 <= value <= 1)\n\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, simple text data Table created by Create Table function are used as input of Doc2Vec function. The outputs of this function are a Doc2Vec model, a document Table, and a word Table.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Column*** : tokenized_document\n2. **Training Algorithm** : PV-DM\n3. **Dimension of Vectors** : 100\n4. **Window Size** : 5\n5. **Minimum Count** : 1\n6. **Alpha**: 0.025\n7. **Minimum Alpha** : 0.025\n8. **Seed** : None\n9. **Train epoch** : 100\n10. **Number of Workers** : 1\n11. **Hierarchical softmax** : False\n12. **Negative** : 5\n13. **Negative sampling exponent** : 0.75\n\n### Python\n```\nfrom brightics.function.textanalytics import doc2vec\ninput_table = inputs[0]\nresult = doc2vec(table=input_table, input_col='tokenized_document',\n dm=1, vector_size=100, window=10, min_count=1,\n max_vocab_size=None, train_epoch=100, workers=1,\n alpha=0.025, min_alpha=0.025, seed=None, hs=0,\n negative=5, ns_exponent=0.75, hashfxn=hash)\ndoc_table = result['doc_table']\nword_table = result['word_table']\noutput_model = result['model']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Doc2Vec function. The outputs of this function are a Doc2Vec model, a document Table, and a word Table.\n", + "md": "# Doc2Vec\nThis function trains Doc2Vec model from tokenized text data.\n\n## Description\nDoc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nReference: \n+ \n+ \n+ \n+ \"Distributed representations of sentences and documents\", Quoc Le and Tomas Mikolov, 2014\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **doc_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n2. **word_table**: (Table) Output word Table. It contains input words columns and word_vectors column.\n3. **model**: (Model) Doc2Vec model.\n#### PARAMETER\n1. **Input column***: Columns to select as input. Only List of String type columns are possible.\n\n2. **Training Algorithm**: Training algorithm. In the distributed bag of words(`PV-DBOW`) model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the distributed memory(`PV-DM`) model, the distributed representation of the input word is used to predict the context. `PV-DM` generally performs better than `PV-DBOW`.\n - Available Options : `PV-DM`, `PV-DBOW`\n\n3. **Dimension of Vectors**: Dimensionality of the feature vectors.\n\n4. **Window Size**: Maximum distance between the current and predicted word within a sentence.\n\n5. **Minimum count**: Ignores all words with total frequency lower than this.\n\n6. **Alpha**: The initial learning rate.\n\n7. **Minimum alpha**: Learning rate will linearly drop to `Minimum alpha` as training progresses.\n\n8. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n9. **Train epoch**: Number of iterations (epochs) over the corpus.\n\n10. **Number of workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\n11. **Hierarchical softmax**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n - Available Options: `True`, `False`\n\n12. **Negative**: If `Negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\n13. **Negative sampling exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n\n14. **Top N frequent words**: Number of top N frequent words to be illustrated on 2D graph.\n\n\n### Python\n#### USAGE\n\n```\ndoc2vec(table, input_col, dm=1, vector_size=100, window=10, min_count=1, max_vocab_size=None, train_epoch=100, workers=1, alpha=0.025, min_alpha=0.025, seed=None, hs=1, negative=5, ns_exponent=0.75, hashfxn=hash)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **doc_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n2. **word_table**: (Table) Output word Table. It contains input words columns and word_vectors column.\n3. **model**: (Model) Doc2Vec model.\n#### PARAMETER\n1. **input_col***: Columns to select as input. Only List of String type columns are possible.\n\t* Type: *str*\n2. **dm**: Training algorithm(1:PV-DM, 0:PV-DBOW). In the distributed bag of words(PV-DBOW) model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the distributed memory(`PV-DM`) model, the distributed representation of the input word is used to predict the context. PV-DM generally performs better than PV-DBOW.\n\t* Type: *int*\n\t* Default / Range: 1 ( 1 | 0 )\n3. **vector_size**: Dimensionality of the feature vectors.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n4. **window**: Maximum distance between the current and predicted word within a sentence.\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 1)\n5. **min_count**: Ignores all words with total frequency lower than this.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n6. **alpha**: The initial learning rate.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n7. **min_alpha**: Learning rate will linearly drop to `min_alpha` as training progresses.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n8. **seed**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n9. **train_epoch**: Number of iterations (epochs) over the corpus.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n10. **workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n11. **hs**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n\t* Type: *bool*\n\t* Default value: True \n12. **negative**: If `negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\t* Type: *int*\n\t* Default / Range: 5 (5 <= value <= 20)\n13. **ns_exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n14. **topn**: Number of top N frequent words to be illustrated on 2D graph.\n\t* Type: *int*\n\t* Default / Range: 30 (value >= 2)\n\t* Type: *int*\n\t* Default / Range: 0.75 (0 <= value <= 1)\n\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, simple text data Table created by Create Table function are used as input of Doc2Vec function. The outputs of this function are a Doc2Vec model, a document Table, and a word Table.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Column*** : tokenized_document\n2. **Training Algorithm** : PV-DM\n3. **Dimension of Vectors** : 100\n4. **Window Size** : 5\n5. **Minimum Count** : 1\n6. **Alpha**: 0.025\n7. **Minimum Alpha** : 0.025\n8. **Seed** : None\n9. **Train epoch** : 100\n10. **Number of Workers** : 1\n11. **Hierarchical softmax** : False\n12. **Negative** : 5\n13. **Negative sampling exponent** : 0.75\n\n### Python\n```\nfrom brightics.function.textanalytics import doc2vec\ninput_table = inputs[0]\nresult = doc2vec(table=input_table, input_col='tokenized_document',\n dm=1, vector_size=100, window=10, min_count=1,\n max_vocab_size=None, train_epoch=100, workers=1,\n alpha=0.025, min_alpha=0.025, seed=None, hs=0,\n negative=5, ns_exponent=0.75, hashfxn=hash)\ndoc_table = result['doc_table']\nword_table = result['word_table']\noutput_model = result['model']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Doc2Vec function. The outputs of this function are a Doc2Vec model, a document Table, and a word Table.\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$doc2vec.json", @@ -960,8 +974,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/doc2vec_model.json b/function/python/brightics/function/textanalytics/meta/doc2vec_model.json index a376aa083..96d5bdb99 100644 --- a/function/python/brightics/function/textanalytics/meta/doc2vec_model.json +++ b/function/python/brightics/function/textanalytics/meta/doc2vec_model.json @@ -9,7 +9,7 @@ "name": "brightics.function.textanalytics$doc2vec_model", "context": "python", "label": "Doc2Vec Model", - "description": "Doc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nThis function calculates feature vectors to represent documents from a input document Table with a input Doc2Vec model.\n\nReference: \n+ \n+ \n+ ", + "description": "Doc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nThis function calculates feature vectors to represent documents from a input document Table with a input Doc2Vec model.\n\nReference: \n+ \n+ \n+ \n+ \"Distributed representations of sentences and documents\", Quoc Le and Tomas Mikolov, 2014", "tags": [], "version": "3.6", "inputs": { @@ -33,7 +33,7 @@ "params": [], "summary": "This funcion generates vectors to represent documents with Doc2Vec." }, - "md": "# Doc2Vec Model\nThis funcion generates vectors to represent documents with Doc2Vec.\n\n## Description\nDoc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nThis function calculates feature vectors to represent documents from a input document Table with a input Doc2Vec model.\n\nReference: \n+ \n+ \n+ \n\n\n\n## Properties\n### VA\n#### INPUT\n1. **model***: (Model) Trained Doc2Vec Model.\n2. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n#### PARAMETER\n\n### Python\n#### USAGE\n\n```\ndoc2vec_model(model, table)\n```\n\n#### INPUT\n1. **model***: (Model) Trained Doc2Vec Model.\n2. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n#### PARAMETER\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Doc2Vec function after tokenizing. And the Doc2Vec output model and output Table are used as input of Doc2Vec Model function. The output of this function is a Table that contains document_vector of each document.\nThe parameter settings used in the function are shown below. \n\n\n### Python\n```\nfrom brightics.function.textanalytics import doc2vec_model\ninput_model = models[0]\ninput_table = inputs[0]\nresult = doc2vec_model(model=input_model, table=input_table)\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Doc2Vec function after tokenizing. And the Doc2Vec output model and output Table are used as input of Doc2Vec Model function. The output of this function is a Table that contains document_vector of each document.\n", + "md": "# Doc2Vec Model\nThis funcion generates vectors to represent documents with Doc2Vec.\n\n## Description\nDoc2vec is an unsupervised algorithm to generate vectors for documents. The algorithm is an adaptation of word2vec which can generate vectors for words. The vectors generated by doc2vec can be used for tasks like finding similarity between sentences/paragraphs/documents. Unlike sequence models like RNN, where word sequence is captured in generated sentence vectors, doc2vec sentence vectors are word order independent.\n\nThis function calculates feature vectors to represent documents from a input document Table with a input Doc2Vec model.\n\nReference: \n+ \n+ \n+ \n+ \"Distributed representations of sentences and documents\", Quoc Le and Tomas Mikolov, 2014\n\n\n\n## Properties\n### VA\n#### INPUT\n1. **model***: (Model) Trained Doc2Vec Model.\n2. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n#### PARAMETER\n\n### Python\n#### USAGE\n\n```\ndoc2vec_model(model, table)\n```\n\n#### INPUT\n1. **model***: (Model) Trained Doc2Vec Model.\n2. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output document Table. It contains input Table's columns and documnet_vectors column.\n#### PARAMETER\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Doc2Vec function after tokenizing. And the Doc2Vec output model and output Table are used as input of Doc2Vec Model function. The output of this function is a Table that contains document_vector of each document.\nThe parameter settings used in the function are shown below. \n\n\n### Python\n```\nfrom brightics.function.textanalytics import doc2vec_model\ninput_model = models[0]\ninput_table = inputs[0]\nresult = doc2vec_model(model=input_model, table=input_table)\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Doc2Vec function after tokenizing. And the Doc2Vec output model and output Table are used as input of Doc2Vec Model function. The output of this function is a Table that contains document_vector of each document.\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$doc2vec_model.json", @@ -296,8 +296,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/doc_doc_mtx.json b/function/python/brightics/function/textanalytics/meta/doc_doc_mtx.json index 6a69a3637..154c285f0 100644 --- a/function/python/brightics/function/textanalytics/meta/doc_doc_mtx.json +++ b/function/python/brightics/function/textanalytics/meta/doc_doc_mtx.json @@ -1255,8 +1255,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/doc_summarizer_eng.json b/function/python/brightics/function/textanalytics/meta/doc_summarizer_eng.json index e09f7c207..27aa5a101 100644 --- a/function/python/brightics/function/textanalytics/meta/doc_summarizer_eng.json +++ b/function/python/brightics/function/textanalytics/meta/doc_summarizer_eng.json @@ -65,27 +65,10 @@ "columnType": [], "targetTable": [] }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "Column to hold in output Table.", - "visibleOption": [ - { - "id": "result_type", - "value": "summarized_document" - } - ], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "columnType": [], - "multiple": true - }, { "id": "ratio", "label": "Compression Ratio", - "description": "Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary.", + "description": "Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary. If None, the ratio is set to the proportion of `Number of Sentences` parameter to the total number of sentences.", "visibleOption": [], "control": "InputBox", "validation": [], @@ -135,7 +118,7 @@ ], "summary": "This function summarizes English documents." }, - "md": "# Documents Summarizer (English)\nThis function summarizes English documents.\n\n## Description\nThis function summarizes the given text, by extracting one or more important sentences from the text.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) English documents in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Summarized English documents in a Table.\n#### PARAMETER\n1. **Input Column***: Column to select as input. The column must contain a English document in each row.\n\n2. **Result Type**: Output type of summarization. If `Summarized Document`, output table shows summarized document in `New Column Name`.\n - Available Options : `Summarized Document`, `Sentence`\n\n3. **Hold Columns**: Column to hold in output Table.\n\n4. **Compression Ratio**: Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary.\n\n5. **Number of Sentences**: Determines how many sentences will the output contains. If `Compression Ratio` is provided, then this parameter will be ignored.\n\n6. **New Column Name**: New column name for summarized English documents.\n\n\n### Python\n#### USAGE\n\n```\ndoc_summarizer_eng(table, input_col, result_type='sentence', hold_cols=None, ratio, num_sentence=1, new_col_name='summarized_document')\n```\n\n#### INPUT\n1. **table***: (Table) English documents in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Summarized English documents in a Table.\n#### PARAMETER\n1. **input_col***: Column to select as input. The column must contain a English document in each row.\n\t* Type: *str*\n2. **result_type**: Output type of summarization. If `summarized_document`, output table shows summarized document in `new_col_name`.\n - Available Options : `summarized_document`, `sentence`\n\t* Type: *str*\n\t* Default / Range: sentence ( summarized_document | sentence )\n3. **hold_cols**: Column to hold in output Table.\n\t* Type: *list[str]*\n4. **ratio**: Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary.\n\t* Type: *float*\n\t* Default / Range: ( 0 < value <= 1)\n5. **num_sentence**: Determines how many sentences will the output contains. If `Compression Ratio` is provided, then this parameter will be ignored.\n\t* Type: *int*\n\t* Default / Range: 1 ( value >= 1 )\n6. **new_col_name**: New column name for summarized English documents.\n\t* Type: *str*\n\t* Default / Range: summarized_document\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n
In this tutorial workflow, sample text data is used for summarization. With Documents Summarizer(English) function, summarized document is returned in output table. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: text \n2. **Result Type**: Sentence \n3. **Hold Columns**: None \n4. **Compression Ratio**: 0.2 \n5. **Number of Sentences**: 1 \n6. **New Column Name**: summarized_document \n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import doc_summarizer_eng\ninput_table = inputs[0]\nresult = doc_summarizer_eng(table=input_table, input_col='text', result_type='sentence', hold_cols=None, ratio=0.2)\noutput = result['out_table']\n```\n\n
In this python script, sample text data table which contains the Matrix synopsis is used for summarization. With _doc\\_summarizer\\_eng_ function, summarized document is returned in output table.\n\n", + "md": "# Documents Summarizer (English)\nThis function summarizes English documents.\n\n## Description\nThis function summarizes the given text, by extracting one or more important sentences from the text.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) English documents in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Summarized English documents in a Table.\n#### PARAMETER\n1. **Input Column***: Column to select as input. The column must contain a English document in each row.\n\n2. **Result Type**: Output type of summarization. If `Summarized Document`, output table shows summarized document in `New Column Name`.\n - Available Options : `Summarized Document`, `Sentence`\n\n3. **Compression Ratio**: Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary.\n\n4. **Number of Sentences**: Determines how many sentences will the output contains. If `Compression Ratio` is provided, then this parameter will be ignored.\n\n5. **New Column Name**: New column name for summarized English documents.\n\n\n### Python\n#### USAGE\n\n```\ndoc_summarizer_eng(table, input_col, result_type='sentence', ratio, num_sentence=1, new_col_name='summarized_document')\n```\n\n#### INPUT\n1. **table***: (Table) English documents in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Summarized English documents in a Table.\n#### PARAMETER\n1. **input_col***: Column to select as input. The column must contain a English document in each row.\n\t* Type: *str*\n2. **result_type**: Output type of summarization. If `summarized_document`, output table shows summarized document in `new_col_name`.\n - Available Options : `summarized_document`, `sentence`\n\t* Type: *str*\n\t* Default / Range: sentence ( summarized_document | sentence )\n3. **ratio**: Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary.\n\t* Type: *float*\n\t* Default / Range: ( 0 < value <= 1)\n4. **num_sentence**: Determines how many sentences will the output contains. If `Compression Ratio` is provided, then this parameter will be ignored.\n\t* Type: *int*\n\t* Default / Range: 1 ( value >= 1 )\n5. **new_col_name**: New column name for summarized English documents.\n\t* Type: *str*\n\t* Default / Range: summarized_document\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n
In this tutorial workflow, sample text data is used for summarization. With Documents Summarizer(English) function, summarized document is returned in output table. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: text \n2. **Result Type**: Sentence \n3. **Compression Ratio**: 0.2 \n4. **Number of Sentences**: 1 \n5. **New Column Name**: summarized_document \n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import doc_summarizer_eng\ninput_table = inputs[0]\nresult = doc_summarizer_eng(table=input_table, input_col='text', result_type='sentence', ratio=0.2)\noutput = result['out_table']\n```\n\n
In this python script, sample text data table which contains the Matrix synopsis is used for summarization. With _doc\\_summarizer\\_eng_ function, summarized document is returned in output table.\n\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$doc_summarizer_eng.json", @@ -160,7 +143,7 @@ "name": "brightics.function.io$load", "param": { "partial_path": [ - "/brightics@samsung.com/upload/text_eng.csv" + "/brightics@samsung.com/upload/sample_text_eng.csv" ] }, "display": { @@ -402,7 +385,7 @@ "name": "brightics.function.textanalytics$doc_summarizer_eng", "param": { "result_type": "sentence", - "input_col": "text_hold", + "input_col": "text", "num_sentence": 1, "ratio": 0.2 }, @@ -864,12 +847,7 @@ } ], "preferences": {}, - "variables": { - "path": { - "type": "string", - "value": "" - } - }, + "variables": {}, "variableRef": [], "innerModels": {}, "inData": [], diff --git a/function/python/brightics/function/textanalytics/meta/doc_summarizer_kor.json b/function/python/brightics/function/textanalytics/meta/doc_summarizer_kor.json index a3a0f0125..00809efd0 100644 --- a/function/python/brightics/function/textanalytics/meta/doc_summarizer_kor.json +++ b/function/python/brightics/function/textanalytics/meta/doc_summarizer_kor.json @@ -4,13 +4,12 @@ "content": "" }, "specJson": { - "isFunction": false, "category": "textanalytics", "func": "brightics.function.textanalytics$doc_summarizer_kor77426", "name": "brightics.function.textanalytics$doc_summarizer_kor", "context": "python", "label": "Documents Summarizer (Korean)", - "description": "This function summarizes Korean documents.", + "description": "This function summarizes the given text, by extracting one or more important sentences from the text.", "tags": [], "version": "3.6", "inputs": { @@ -21,32 +20,38 @@ }, "meta": { "table": { - "type": "table" + "type": "table", + "desc": "Korean documents in a Table.", + "optional": false }, "out_table": { - "type": "table" + "type": "table", + "desc": "Summarized Korean documents in a Table." } }, "params": [ { "id": "input_col", "label": "Input Column", - "description": "", - "mandatory": true, - "items": [], + "description": "Column to select as input. The column must contain a Korean document in each row.", "visibleOption": [], "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], "columnType": [ "String" ], - "validation": [], "type": "String", "multiple": false }, { "id": "result_type", "label": "Result Type", - "description": "Output type of summarization.", + "description": "Output type of summarization. If `Summarized Document`, output table shows summarized document in `New Column Name`.\n - Available Options : `Summarized Document`, `Scored Sentence`", + "visibleOption": [], + "control": "RadioButton", + "validation": [], "mandatory": false, "items": [ { @@ -60,41 +65,21 @@ "default": true } ], - "visibleOption": [], - "control": "RadioButton", "columnType": [], - "validation": [], "targetTable": [] }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "Column to select as hold.", - "mandatory": false, - "items": [], - "visibleOption": [ - { - "id": "result_type", - "value": "summarized_document" - } - ], - "control": "ColumnSelector", - "columnType": [], - "validation": [], - "multiple": true - }, { "id": "ratio", "label": "Compression Ratio", - "description": "Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary.", - "mandatory": false, - "items": [], + "description": "Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary. If None, the ratio is set to the proportion of `Number of Sentences` parameter to the total number of sentences.", "visibleOption": [], "control": "InputBox", - "columnType": [], "validation": [], + "mandatory": false, + "items": [], + "columnType": [], "targetTable": [], - "placeHolder": "", + "placeHolder": "(0 <= value <= 1)", "type": "Double", "min": 0, "max": 1 @@ -102,28 +87,28 @@ { "id": "num_sentence", "label": "Number of Sentences", - "description": "Determines how many sentences will the output contain. If ratio is provided, then this parameter will be ignored.", - "mandatory": false, - "items": [], + "description": "Determines how many sentences will the output contains. If `Compression Ratio` is provided, then this parameter will be ignored.", "visibleOption": [], "control": "InputBox", - "columnType": [], "validation": [], + "mandatory": false, + "items": [], + "columnType": [], "targetTable": [], "type": "Integer", "min": 1, - "placeHolder": "1" + "placeHolder": "1 (value >= 1)" }, { "id": "damping_factor", "label": "Damping Factor", "description": "Damping Factor used in the PageRank algorithm. The default value is 0.85.", - "mandatory": false, - "items": [], "visibleOption": [], "control": "InputBox", - "columnType": [], "validation": [], + "mandatory": false, + "items": [], + "columnType": [], "targetTable": [], "placeHolder": "0.85", "type": "Double", @@ -133,9 +118,7 @@ { "id": "new_col_name", "label": "New Column Name", - "description": "New column name", - "mandatory": false, - "items": [], + "description": "New column name for summarized Korean documents.", "visibleOption": [ { "id": "result_type", @@ -143,13 +126,911 @@ } ], "control": "InputBox", - "columnType": [], "validation": [], + "mandatory": false, + "items": [], + "columnType": [], "targetTable": [], "type": "String", "placeHolder": "summarized_document" } - ] + ], + "summary": "This function summarizes Korean documents." + }, + "md": { + "en": "# Documents Summarizer (Korean)\nThis function summarizes Korean documents.\n\n## Description\nThis function summarizes the given text, by extracting one or more important sentences from the text.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Korean documents in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Summarized Korean documents in a Table.\n#### PARAMETER\n1. **Input Column***: Column to select as input. The column must contain a Korean document in each row.\n\n2. **Result Type**: Output type of summarization. If `Summarized Document`, output table shows summarized document in `New Column Name`.\n - Available Options : `Summarized Document`, `Scored Sentence`\n\n3. **Compression Ratio**: Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary. If None, the ratio is set to the proportion of `Number of Sentences` parameter to the total number of sentences.\n\n4. **Number of Sentences**: Determines how many sentences will the output contains. If `Compression Ratio` is provided, then this parameter will be ignored.\n\n5. **Damping Factor**: Damping Factor used in the PageRank algorithm. The default value is 0.85.\n\n6. **New Column Name**: New column name for summarized Korean documents.\n\n\n### Python\n#### USAGE\n\n```\ndoc_summarizer_kor(table = , input_col = , result_type = , ratio = , num_sentence = , damping_factor = , new_col_name = )\n```\n\n#### INPUT\n1. **table***: (Table) Korean documents in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Summarized Korean documents in a Table.\n#### PARAMETER\n1. **input_col***: Column to select as input. The column must contain a Korean document in each row.\n\t* Type: *str*\n2. **result_type**: Output type of summarization. If `Summarized Document`, output table shows summarized document in `New Column Name`.\n - Available Options : `Summarized Document`, `Scored Sentence`\n\t* Type: *str*\n\t* Default / Range: ( summarized_documentscored_sentence | scored_sentence )\n3. **ratio**: Number between 0 and 1 that determines the proportion of the number of sentences of the original text to be chosen for the summary. If None, the ratio is set to the proportion of `Number of Sentences` parameter to the total number of sentences.\n\t* Type: *double*\n\t* Default / Range: (0 <= value <= 1)\n4. **num_sentence**: Determines how many sentences will the output contains. If `Compression Ratio` is provided, then this parameter will be ignored.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n5. **damping_factor**: Damping Factor used in the PageRank algorithm. The default value is 0.85.\n\t* Type: *double*\n\t* Default / Range: 0.85\n6. **new_col_name**: New column name for summarized Korean documents.\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_text_kor data is used as input of Documents Summarizer (Korean) function. The output of this function is a Table with summarized document data added to the input Table. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: doc1\n2. **Result Type**: Scored Sentence\n3. **Compression Ratio**: None\n4. **Number of Sentences**: 3\n5. **Damping Factor**: 0.85\n6. **New Column Name**: summarized_document\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import doc_summarizer_kor\ninput_table = inputs[0]\nresult = doc_summarizer_kor(table=input_table, input_col='doc1', result_type='scored_sentence', new_col_name='summarized_document', num_sentence=3, damping_factor=0.85)\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_nsmc data is used as input of Documents Summarizer (Korean) function. The output of this function is a Table with summarized document data added to the input Table.\n\n\n", + "kr": "" }, - "md": "" -} + "exampleModels": [ + { + "fileName": "documents_summarizer_kor.json", + "label": "Documents Summarizer (Korean)", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mbmmjxtxpx3xzmkc", + "project_id": "p54rtqvtnjme93ey", + "label": "Documents Summarizer (Korean)", + "contents": { + "mid": "mbmmjxtxpx3xzmkc", + "type": "data", + "title": "Documents Summarizer (Korean)", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_text_kor.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1594711251887", + "chartOption": { + "colorSet": [ + "#FFC14A", + "#20BAC2", + "#6952DB", + "#1E5FCB", + "#0EBB59", + "#D7C7FE", + "#FD9C94", + "#5C0931", + "#8EDDCF", + "#166440", + "#E6E6E6", + "#7394FF", + "#8B21A6", + "#BDBDBD", + "#F56813", + "#EBE3FE", + "#FECDC9", + "#AE8498", + "#C6EEE7", + "#8BB2A0", + "#F2F2F2", + "#B9C9FF", + "#C590D2", + "#DEDEDE", + "#FAB489" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove", + "confine": true, + "extraCssText": "z-index:9999" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "interval": "auto" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": "#cccccc", + "width": 1, + "type": "solid" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "interval": "auto" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": "#cccccc", + "width": 1, + "type": "solid" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + }, + "legendMap": [ + {} + ], + "grid": { + "use": false, + "rowColumnCount": 1 + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [], + "colWidths": [], + "rowIndex": { + "show": true + } + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ws3vv2bvubgaw7du9yfmvtid" + } + ], + "layout": { + "type": "panel", + "id": "default-1594711251887" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tyf72mjwzgdnmk45" + }, + "fid": "fzzuk42yudz3fq4j" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$doc_summarizer_kor77426", + "name": "brightics.function.textanalytics$doc_summarizer_kor", + "param": { + "result_type": "scored_sentence", + "input_col": "text", + "num_sentence": 3 + }, + "display": { + "label": "Documents Summarizer (Korean)", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1594711304812", + "chartOption": { + "colorSet": [ + "#FFC14A", + "#20BAC2", + "#6952DB", + "#1E5FCB", + "#0EBB59", + "#D7C7FE", + "#FD9C94", + "#5C0931", + "#8EDDCF", + "#166440", + "#E6E6E6", + "#7394FF", + "#8B21A6", + "#BDBDBD", + "#F56813", + "#EBE3FE", + "#FECDC9", + "#AE8498", + "#C6EEE7", + "#8BB2A0", + "#F2F2F2", + "#B9C9FF", + "#C590D2", + "#DEDEDE", + "#FAB489" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove", + "confine": true, + "extraCssText": "z-index:9999" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "interval": "auto" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": "#cccccc", + "width": 1, + "type": "solid" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "interval": "auto" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": "#cccccc", + "width": 1, + "type": "solid" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + }, + "legendMap": [ + {} + ], + "grid": { + "use": false, + "rowColumnCount": 1 + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [], + "colWidths": [], + "rowIndex": { + "show": true + } + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "7eivipvqaqqzprdtstrc3k3d" + } + ], + "layout": { + "type": "panel", + "id": "default-1594711304812" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1594711304864", + "chartOption": { + "colorSet": [ + "#FFC14A", + "#20BAC2", + "#6952DB", + "#1E5FCB", + "#0EBB59", + "#D7C7FE", + "#FD9C94", + "#5C0931", + "#8EDDCF", + "#166440", + "#E6E6E6", + "#7394FF", + "#8B21A6", + "#BDBDBD", + "#F56813", + "#EBE3FE", + "#FECDC9", + "#AE8498", + "#C6EEE7", + "#8BB2A0", + "#F2F2F2", + "#B9C9FF", + "#C590D2", + "#DEDEDE", + "#FAB489" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove", + "confine": true, + "extraCssText": "z-index:9999" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "interval": "auto" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": "#cccccc", + "width": 1, + "type": "solid" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "interval": "auto" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": "#cccccc", + "width": 1, + "type": "solid" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + }, + "legendMap": [ + {} + ], + "grid": { + "use": false, + "rowColumnCount": 1 + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [], + "colWidths": [], + "rowIndex": { + "show": true + } + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "r5ktuvaxtt79vfj5ha2wqrw5" + } + ], + "layout": { + "type": "panel", + "id": "default-1594711304864" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "desc": "Korean documents in a Table.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Summarized Korean documents in a Table." + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tyf72mjwzgdnmk45" + }, + "outputs": { + "out_table": "tztn55txcf3pz75e" + }, + "fid": "f2bwvhvfku88kw67" + } + ], + "links": [ + { + "kid": "kftgw9z8d95vgzab", + "sourceFid": "fzzuk42yudz3fq4j", + "targetFid": "f2bwvhvfku88kw67" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-13T06:59:16.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-14T08:24:15.000Z", + "event_key": "2020_082415.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "doc_sum(kor).png", + "label": "doc_sum(kor).png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_text_kor data is used as input of Documents Summarizer (Korean) function. The output of this function is a Table with summarized document data added to the input Table. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Column***: doc1\n2. **Result Type**: Scored Sentence\n3. **Compression Ratio**: None\n4. **Number of Sentences**: 3\n5. **Damping Factor**: 0.85\n6. **New Column Name**: summarized_document\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import doc_summarizer_kor\ninput_table = inputs[0]\nresult = doc_summarizer_kor(table=input_table, input_col='doc1', result_type='scored_sentence', new_col_name='summarized_document', num_sentence=3, damping_factor=0.85)\noutput = result['out_table']", + "context": "python", + "description": "In this tutorial workflow, sample_nsmc data is used as input of Documents Summarizer (Korean) function. The output of this function is a Table with summarized document data added to the input Table." + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/doc_term_mtx.json b/function/python/brightics/function/textanalytics/meta/doc_term_mtx.json index 50c44c1da..d9e73be0a 100644 --- a/function/python/brightics/function/textanalytics/meta/doc_term_mtx.json +++ b/function/python/brightics/function/textanalytics/meta/doc_term_mtx.json @@ -339,8 +339,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/dtm.json b/function/python/brightics/function/textanalytics/meta/dtm.json new file mode 100644 index 000000000..3c96befde --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/dtm.json @@ -0,0 +1,1460 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$dtm", + "name": "brightics.function.textanalytics$dtm", + "context": "python", + "label": "Dynamic Topic Modeling", + "description": "Dynamic topic models are generative models that can be used to analyze the evolution of (unobserved) topics of a collection of documents over time. This family of models was proposed by David Blei and John Lafferty and is an extension to Latent Dirichlet Allocation (LDA) that can handle sequential documents. In LDA, both the order the words appear in a document and the order the documents appear in the corpus are oblivious to the model. Whereas words are still assumed to be exchangeable, in a dynamic topic model the order of the documents plays a fundamental role. More precisely, the documents are grouped by time slice (e.g.: years) and it is assumed that the documents of each group come from a set of topics that evolved from the set of the previous slice.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Dynamic_topic_model", + "tags": [ + "dtm", + "topic modeling" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "topic_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Topic classification result attached to the input table." + }, + "topic_table": { + "type": "table", + "desc": "Table which consists of each topic's vocabulary and weights." + }, + "model": { + "type": "model", + "desc": "Result model." + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": "Text data column to select as an input. Data type should be of string array type.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "String[]" + ], + "multiple": false + }, + { + "id": "topic_name", + "label": "Topic Column Name", + "description": "Column name for topic modeling result.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "topic" + }, + { + "id": "num_topic", + "label": "Number of Topics", + "description": "The number of topics that will be contained in the entire documents. It should be greater than or equal to two.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 2, + "placeHolder": "5 (value >= 2)" + }, + { + "id": "num_topic_word", + "label": "Number of Terminologies", + "description": "Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "10 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "max_iter", + "label": "Iterations", + "description": "Maximum number of iterations you want to run your model. It should be at least one.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "20 (value >= 1)" + }, + { + "id": "time_slice", + "label": "Time Slice", + "description": "The numbers of documents for each period. The sum of the numbers should be equal to the total number of documents. Default value is a singleton with the number of documents alone.", + "visibleOption": [], + "control": "ArrayInput", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer", + "placeHolder": "(value >= 1)", + "min": 1 + }, + { + "id": "coherence", + "label": "Coherence Measure", + "description": "Coherence measure of the resulting topic modeling.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "UMass", + "value": "u_mass", + "default": true + }, + { + "label": "C_V", + "value": "c_v", + "default": false + } + ], + "columnType": [] + }, + { + "id": "vis_time", + "label": "Time to visualize", + "description": "Time period to visualize the result. pyLDAvis visualization for the chosen time period will be generated in the model tab. It should be greater than or equal to zero, and less than the number of time periods.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 0, + "placeHolder": "0 (0 <= value <= # time slices)" + }, + { + "id": "seed", + "label": "Seed", + "description": "The seed used by the random number generator.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "placeHolder": "" + } + ], + "summary": "This function builds a topic model for text documents with regard to time." + }, + "md": { + "en": "# Dynamic Topic Modeling\nThis function builds a topic model for text documents with regard to time.\n\n## Description\nDynamic topic models are generative models that can be used to analyze the evolution of (unobserved) topics of a collection of documents over time. This family of models was proposed by David Blei and John Lafferty and is an extension to Latent Dirichlet Allocation (LDA) that can handle sequential documents. In LDA, both the order the words appear in a document and the order the documents appear in the corpus are oblivious to the model. Whereas words are still assumed to be exchangeable, in a dynamic topic model the order of the documents plays a fundamental role. More precisely, the documents are grouped by time slice (e.g.: years) and it is assumed that the documents of each group come from a set of topics that evolved from the set of the previous slice.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Dynamic_topic_model\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Topic classification result attached to the input table.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **model**: (Model) Result model.\n#### PARAMETER\n1. **Input Column***: Text data column to select as an input. Data type should be of string array type.\n\n2. **Topic Column Name**: Column name for topic modeling result.\n\n3. **Number of Topics**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\n4. **Number of Terminologies**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\n5. **Iterations**: Maximum number of iterations you want to run your model. It should be at least one.\n\n6. **Time Slice**: The numbers of documents for each period. The sum of the numbers should be equal to the total number of documents. Default value is a singleton with the number of documents alone.\n\n7. **Coherence Measure**: Coherence measure of the resulting topic modeling.\n + Available Options: `UMass`, `C_V`\n\n8. **Time to visualize**: Time period to visualize the result. pyLDAvis visualization for the chosen time period will be generated in the model tab. It should be greater than or equal to zero, and less than the number of time periods.\n\n9. **Seed**: The seed used by the random number generator.\n\n\n### Python\n#### USAGE\n\n```\ndtm(table= ,input_col= ,topic_name= ,num_topic= ,num_topic_word= ,max_iter= ,time_slice= ,coherence= ,vis_time= ,seed=)\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Topic classification result attached to the input table.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **model**: (Model) Result model.\n#### PARAMETER\n1. **input_col***: Text data column to select as an input. Data type should be of string array type.\n\t* Type: *str*\n2. **topic_name**: Column name for topic modeling result.\n\t* Type: *str*\n3. **num_topic**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 2)\n4. **num_topic_word**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\t* Type: *int*\n\t* Default / Range: 10 (value >= 2)\n5. **max_iter**: Maximum number of iterations you want to run your model. It should be at least one.\n\t* Type: *int*\n\t* Default / Range: 20 (value >= 1)\n6. **time_slice**: The numbers of documents for each period. The sum of the numbers should be equal to the total number of documents. Default value is a singleton with the number of documents alone.\n\t* Type: *list[int]*\n7. **coherence**: Coherence measure of the resulting topic modeling.\n\t* Type: *str*\n\t* Default / Range: u_mass ( u_mass | c_v )\n8. **vis_time**: Time period to visualize the result. pyLDAvis visualization for the chosen time period will be generated in the model tab. It should be greater than or equal to zero, and less than the number of time periods.\n\t* Type: *int*\n\t* Default / Range: 0 (0 <= value <= # time slices)\n9. **seed**: The seed used by the random number generator.\n\t* Type: *int*\n\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Topics**: 3\n4. **Number of Terminologies**: 10\n5. **Iterations**: 20\n6. **Time Slice**: 2, 3, 3\n7. **Coherence Measure**: UMass\n8. **Time to visualize**: 0\n9. **Seed**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import dtm\ninput_table = inputs[0]\nresult = dtm(table=input_table, input_col='tokenized_text',\n topic_name='topic', num_topic=3, num_topic_word=10, max_iter=20, time_slice=[2, 3, 3],\n coherence='u_mass', vis_time=0, seed=None)\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "DTM.json", + "label": "DTM", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m8y8m6kp6hhzjz4e", + "project_id": "p7puh97cexbjrebu", + "label": "DTM", + "contents": { + "mid": "m8y8m6kp6hhzjz4e", + "type": "data", + "title": "DTM", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_LatentDirichletAllocation.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379170038", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "azckyqi7wtuya26c4gnbr98m" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379170038" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tyrb5hbx36e2psf9" + }, + "fid": "fjz6nyfwupy4sa38" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", + "param": { + "stemming": true, + "pos_extraction": [ + "CC", + "JJ", + "JJR", + "JJS", + "NN", + "NNS", + "NNP", + "NNPS", + "RB", + "RBR", + "RBS", + "VB", + "VBD", + "VBN", + "VBP", + "VBZ" + ], + "is_tagged": false, + "input_cols": [ + "text" + ] + }, + "display": { + "label": "Tokenizer (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202349", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "egs5kgsijmv3jj4xtfrijddr" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202349" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202452", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "j7qs838697v499h6ecbiy4mf" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202452" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tyrb5hbx36e2psf9" + }, + "outputs": { + "out_table": "tz2ttdaccxmpm853" + }, + "fid": "fnzqvuzat8np7nn8" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$dtm", + "name": "brightics.function.textanalytics$dtm", + "param": { + "coherence": "u_mass", + "input_col": "tokenized_text", + "num_topic": 3, + "time_slice": [ + 2, + 3, + 3 + ] + }, + "display": { + "label": "Dynamic Topic Modeling", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592380245312", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "jnc2sq38mv6vk95k8i9sa7ys" + } + ], + "layout": { + "type": "panel", + "id": "default-1592380245312" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592380245361", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "topic_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tz2ttdaccxmpm853" + }, + "outputs": { + "out_table": "trv8tyu9f9armgxb", + "topic_table": "t359rmgy3pkxfhx4", + "model": "tc6janustmz86sxw" + }, + "fid": "fdem63yxkfkbwnen" + } + ], + "links": [ + { + "kid": "k5tgymgjrfqjgzmm", + "sourceFid": "fjz6nyfwupy4sa38", + "targetFid": "fnzqvuzat8np7nn8" + }, + { + "kid": "kqvmzty7upsemf8s", + "sourceFid": "fnzqvuzat8np7nn8", + "targetFid": "fdem63yxkfkbwnen" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-17T07:50:31.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-17T07:51:36.000Z", + "event_key": "2020_075136.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "dtm.png", + "label": "dtm.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Topics**: 3\n4. **Number of Terminologies**: 10\n5. **Iterations**: 20\n6. **Time Slice**: 2, 3, 3\n7. **Coherence Measure**: UMass\n8. **Time to visualize**: 0\n9. **Seed**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import dtm\r\ninput_table = inputs[0]\r\nresult = dtm(table=input_table, input_col='tokenized_text',\r\n topic_name='topic', num_topic=3, num_topic_word=10, max_iter=20, time_slice=[2, 3, 3],\r\n coherence='u_mass', vis_time=0, seed=None)\r\noutput = result['out_table']", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/extract_senti_words.json b/function/python/brightics/function/textanalytics/meta/extract_senti_words.json index 6e484da9f..6b77dcde6 100644 --- a/function/python/brightics/function/textanalytics/meta/extract_senti_words.json +++ b/function/python/brightics/function/textanalytics/meta/extract_senti_words.json @@ -9,7 +9,7 @@ "name": "brightics.function.textanalytics$extract_senti_words", "context": "python", "label": "Extract Sentimental Words", - "description": "This function extracts sentimental words from given documents. A data of the first column in user-dictionary should be words and the second column should be sentimental scores. A range of scores of the default dictionary is [-2, 2].", + "description": "This function extracts sentimental words from given documents. A data of the first column in user-dictionary should be words and the second column should be sentimental scores. A range of scores of the default dictionary is [-2, 2]. This function uses the sentiment lexicon dataset from Hu and Liu, KDD-2004 for English and the KNU Korean sentiment lexicon dataset for Korean.", "tags": [], "version": "3.6", "inputs": { @@ -46,23 +46,11 @@ "String[]" ], "multiple": false - }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "Columns to select as hold.", - "visibleOption": [], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "columnType": [], - "multiple": true } ], "summary": "This function is to extract Sentimental Words." }, - "md": "# Extract Sentimental Words\nThis function is to extract Sentimental Words.\n\n## Description\nThis function extracts sentimental words from given documents. A data of the first column in user-dictionary should be words and the second column should be sentimental scores. A range of scores of the default dictionary is [-2, 2].\n\nReference\n- \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including sentimental words in a Table.\n2. **user_dict**: (Table) User dictionary data which includes sentiment score for a word.\n#### OUTPUT\n1. **out_table**: (Table) Extracted sentiment words in a table.\n\n#### PARAMETER\n1. **Input Column***: Words column to select as input. It should be a list of string.\n\n2. **Hold Columns**: Columns to select as hold.\n\n\n### Python\n#### USAGE\n\n```\nextract_senti_words(table, input_col, user_dict=None, hold_cols=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data including sentimental words in a Table.\n2. **user_dict**: (Table) User dictionary data which includes sentiment score for a word.\n#### OUTPUT\n1. **out_table**: (Table) Extracted sentiment words in a table.\n#### PARAMETER\n1. **input_col***: Words column to select as input.\n\t* Type: *list[str]*\n2. **hold_cols**: Columns to select as hold.\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, words data and user dictionary data are used to extract sentimental words. The result includes sentimental words extracted from the input words data. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_Sentence\n2. **Hold Columns**: None\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import extract_senti_words\ninput_table0 = inputs[0]\ninput_table1 = inputs[1]\nresult = extract_senti_words(table=input_table0,\n input_col='tokenized_Sentence',\n user_dict=input_table1,\n hold_cols=None)\noutput = result['out_table']\n```\nIn this python script, words data and user dictionary data are used to extract sentimental words. The result includes sentimental words extracted from the input words data.", + "md": "# Extract Sentimental Words\nThis function is to extract Sentimental Words.\n\n## Description\nThis function extracts sentimental words from given documents. A data of the first column in user-dictionary should be words and the second column should be sentimental scores. A range of scores of the default dictionary is [-2, 2]. This function uses the sentiment lexicon dataset from Hu and Liu, KDD-2004 for English and the KNU Korean sentiment lexicon dataset for Korean.\n\nReference\n+ \n+ \n+ \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including sentimental words in a Table.\n2. **user_dict**: (Table) User dictionary data which includes sentiment score for a word.\n#### OUTPUT\n1. **out_table**: (Table) Extracted sentiment words in a table.\n\n#### PARAMETER\n1. **Input Column***: Words column to select as input. It should be a list of string.\n\n\n### Python\n#### USAGE\n\n```\nextract_senti_words(table, input_col, user_dict=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data including sentimental words in a Table.\n2. **user_dict**: (Table) User dictionary data which includes sentiment score for a word.\n#### OUTPUT\n1. **out_table**: (Table) Extracted sentiment words in a table.\n#### PARAMETER\n1. **input_col***: Words column to select as input.\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, words data and user dictionary data are used to extract sentimental words. The result includes sentimental words extracted from the input words data. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_Sentence\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import extract_senti_words\ninput_table0 = inputs[0]\ninput_table1 = inputs[1]\nresult = extract_senti_words(table=input_table0,\n input_col='tokenized_Sentence',\n user_dict=input_table1)\noutput = result['out_table']\n```\nIn this python script, words data and user dictionary data are used to extract sentimental words. The result includes sentimental words extracted from the input words data.", "exampleModels": [ { "fileName": "brightics.function.textanalytics$extract_senti_words.json", @@ -87,7 +75,7 @@ "name": "brightics.function.io$load", "param": { "partial_path": [ - "/brightics@samsung.com/upload/script1.csv" + "/brightics@samsung.com/upload/sample_extractSentimentalWords.csv" ] }, "display": { @@ -329,7 +317,7 @@ "name": "brightics.function.io$load", "param": { "partial_path": [ - "/brightics@samsung.com/upload/user_dict.txt" + "/brightics@samsung.com/upload/sample_esw_user_dict.csv" ] }, "display": { @@ -1029,8 +1017,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_kor", - "name": "brightics.function.textanalytics$tokenizer_kor", + "func": "brightics.function.textanalytics$tokenizer_kor2", + "name": "brightics.function.textanalytics$tokenizer_kor2", "param": { "normalization": true, "stemming": true, diff --git a/function/python/brightics/function/textanalytics/meta/gsdmm.json b/function/python/brightics/function/textanalytics/meta/gsdmm.json new file mode 100644 index 000000000..081ae3c6c --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/gsdmm.json @@ -0,0 +1,1644 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$gsdmm", + "name": "brightics.function.textanalytics$gsdmm", + "context": "python", + "label": "GSDMM", + "description": "GSDMM stands for collapsed Gibbs Sampling algorithm for the Dirichlet Multinomial Mixture model. This function classifies given short text documents into clusters in which documents share the same topic. It is recommended to perform pre-process for the input, such as converting letters into lower case, removing stop-words, stemming for words, removing words with too high or too low frequencies, etc. This pre-process should be performed carefully to get better results.\n\nInput column should be in an array type containing tokenized terms. K is an upper bound of the number of topics, so if true number of topics is larger than K, it may not work properly as expected. Increasing number of iterations for running LDA model would give you stable results.\n\n+ Reference: Yin & Wang, 2014", + "tags": [ + "gsdmm", + "topic modeling", + "short text topic modeling" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "topic_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Topic classification result attached to the input table." + }, + "topic_table": { + "type": "table", + "desc": "Table which consists of each topic's vocabulary and weights." + }, + "model": { + "type": "model", + "desc": "Result model." + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": " Text data column to select as an input. Data type should be of string array type.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "String[]" + ], + "multiple": false + }, + { + "id": "topic_name", + "label": "Topic Column Name", + "description": "Column name for topic modeling result.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "topic" + }, + { + "id": "K", + "label": "K", + "description": "Upper bound of the number of topics that will be contained in the entire documents. It should be greater than or equal to two.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 2, + "placeHolder": "10 (value >= 2)" + }, + { + "id": "alpha", + "label": "Alpha", + "description": "Alpha, one of the parameters for GSDMM. It relates to the prior probability of a document choosing a cluster (completeness). If alpha gets larger, so does the probability of a document choosing an empty cluster. It should be greater than or equal to zero.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "placeHolder": "0.1 (value >= 0)" + }, + { + "id": "beta", + "label": "Beta", + "description": "Beta, one of the parameters for GSDMM. It relates to homogeneity. If beta gets larger, so does the probability of a cluster containing mixed topics. It should be greater than or equal to zero.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "placeHolder": "0.1 (value >= 0)" + }, + { + "id": "num_topic_words", + "label": "Number of Terminologies", + "description": "Maximum number of words to be shown for each topic. It should be greater than or equal to two.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "3 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "max_iter", + "label": "Iterations", + "description": "Maximum number of iterations you want to run your model. It should be at least one.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "50 (value >= 1)" + } + ], + "summary": "This function classifies given short text documents into clusters in which documents share the same topic." + }, + "md": { + "en": "# GSDMM\nThis function classifies given short text documents into clusters in which documents share the same topic.\n\n## Description\nGSDMM stands for collapsed Gibbs Sampling algorithm for the Dirichlet Multinomial Mixture model. This function classifies given short text documents into clusters in which documents share the same topic. It is recommended to perform pre-process for the input, such as converting letters into lower case, removing stop-words, stemming for words, removing words with too high or too low frequencies, etc. This pre-process should be performed carefully to get better results.\n\nInput column should be in an array type containing tokenized terms. K is an upper bound of the number of topics, so if true number of topics is larger than K, it may not work properly as expected. Increasing number of iterations for running LDA model would give you stable results.\n\n+ Reference: Yin & Wang, 2014\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Topic classification result attached to the input table.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **model**: (Model) Result model.\n#### PARAMETER\n1. **Input Column***: Text data column to select as an input. Data type should be of string array type.\n\n2. **Topic Column Name**: Column name for topic modeling result.\n\n3. **K**: Upper bound of the number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\n4. **Alpha**: Alpha, one of the parameters for GSDMM. It relates to the prior probability of a document choosing a cluster (completeness). If alpha gets larger, so does the probability of a document choosing an empty cluster. It should be greater than or equal to zero.\n\n5. **Beta**: Beta, one of the parameters for GSDMM. It relates to homogeneity. If beta gets larger, so does the probability of a cluster containing mixed topics. It should be greater than or equal to zero.\n\n6. **Number of Terminologies**: Maximum number of words to be shown for each topic. It should be greater than or equal to two.\n\n7. **Iterations**: Maximum number of iterations you want to run your model. It should be at least one.\n\n\n### Python\n#### USAGE\n\n```\ngsdmm(table= ,input_col= ,topic_name= ,K= ,alpha= ,beta= ,num_topic_words= ,max_iter=)\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Topic classification result attached to the input table.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **model**: (Model) Result model.\n#### PARAMETER\n1. **input_col***: Text data column to select as an input. Data type should be of string array type.\n\t* Type: *str*\n2. **topic_name**: Column name for topic modeling result.\n\t* Type: *str*\n3. **K**: Upper bound of the number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 10 (value >= 2)\n4. **alpha**: Alpha, one of the parameters for GSDMM. It relates to the prior probability of a document choosing a cluster (completeness). If alpha gets larger, so does the probability of a document choosing an empty cluster. It should be greater than or equal to zero.\n\t* Type: *double*\n\t* Default / Range: 0.1 (value >= 0)\n5. **beta**: Beta, one of the parameters for GSDMM. It relates to homogeneity. If beta gets larger, so does the probability of a cluster containing mixed topics. It should be greater than or equal to zero.\n\t* Type: *double*\n\t* Default / Range: 0.1 (value >= 0)\n6. **num_topic_words**: Maximum number of words to be shown for each topic. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 3 (value >= 2)\n7. **max_iter**: Maximum number of iterations you want to run your model. It should be at least one.\n\t* Type: *int*\n\t* Default / Range: 50 (value >= 1)\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **K**: 10\n4. **Alpha**: 0.1\n5. **Beta**: 0.1\n6. **Number of Terminologies**: 3\n7. **Iterations**: 50\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import gsdmm\ninput_table = inputs[0]\nresult = gsdmm(table=input_table, input_col='tokenized_text',\n topic_name='topic', K=10, alpha=0.1, beta=0.1,\n max_iter=50, num_topic_words=3)\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "GSDMM.json", + "label": "GSDMM", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mn5jxghaytrnaa37", + "project_id": "p7puh97cexbjrebu", + "label": "GSDMM", + "contents": { + "mid": "mn5jxghaytrnaa37", + "type": "data", + "title": "GSDMM", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_LatentDirichletAllocation.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379170038", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "azckyqi7wtuya26c4gnbr98m" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379170038" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tfav63jnxqa4zrr5" + }, + "fid": "fk3e7e3a4zqjnjfp" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", + "param": { + "stemming": true, + "pos_extraction": [ + "CC", + "JJ", + "JJR", + "JJS", + "NN", + "NNS", + "NNP", + "NNPS", + "RB", + "RBR", + "RBS", + "VB", + "VBD", + "VBN", + "VBP", + "VBZ" + ], + "is_tagged": false, + "input_cols": [ + "text" + ] + }, + "display": { + "label": "Tokenizer (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202349", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "egs5kgsijmv3jj4xtfrijddr" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202349" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202452", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "j7qs838697v499h6ecbiy4mf" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202452" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tfav63jnxqa4zrr5" + }, + "outputs": { + "out_table": "t6etw7jqx8tdzp3m" + }, + "fid": "frruef2uxx62t7uq" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$gsdmm", + "name": "brightics.function.textanalytics$gsdmm", + "param": { + "input_col": "tokenized_text", + "topic_name": "" + }, + "display": { + "label": "GSDMM", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379243038", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "9apc5tkivk8vqw8wwgbp8pm3" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379243038" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379243125", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "pm6krnsxr7dvwa8fpgqs2dic", + "tableIndexes": [ + 1 + ] + }, + { + "id": "zq9qgxcj", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "pm6krnsxr7dvwa8fpgqs2dic" + } + ], + "layout": { + "type": "splitter", + "direction": "horizontal", + "ratio": "50%", + "items": [ + { + "id": "zq9qgxcj", + "type": "panel" + }, + { + "id": "default-1592379243125", + "type": "panel" + } + ] + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "topic_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t6etw7jqx8tdzp3m" + }, + "outputs": { + "out_table": "tjf7643cxp5sj4sy", + "topic_table": "tyvqxgu6zufsr948", + "model": "t6rvp43n4yj3y3rq" + }, + "fid": "fbdwcr2rdxdx3ruu" + } + ], + "links": [ + { + "kid": "k9vdwaez66xhrwfz", + "sourceFid": "fk3e7e3a4zqjnjfp", + "targetFid": "frruef2uxx62t7uq" + }, + { + "kid": "ken47sexw3ngb472", + "sourceFid": "frruef2uxx62t7uq", + "targetFid": "fbdwcr2rdxdx3ruu" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-17T07:32:45.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-17T07:34:49.000Z", + "event_key": "2020_073449.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "gsdmm.png", + "label": "gsdmm.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **K**: 10\n4. **Alpha**: 0.1\n5. **Beta**: 0.1\n6. **Number of Terminologies**: 3\n7. **Iterations**: 50\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import gsdmm\r\ninput_table = inputs[0]\r\nresult = gsdmm(table=input_table, input_col='tokenized_text',\r\n topic_name='topic', K=10, alpha=0.1, beta=0.1,\r\n max_iter=50, num_topic_words=3)\r\noutput = result['out_table']", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributions of each word to assigned topic. The parameter settings used in the function are shown below.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/lda2.json b/function/python/brightics/function/textanalytics/meta/lda2.json new file mode 100644 index 000000000..a0eca1dd9 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/lda2.json @@ -0,0 +1,178 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "deprecated": true, + "category": "textanalytics", + "func": "brightics.function.textanalytics$lda204291", + "name": "brightics.function.textanalytics$lda2", + "context": "python", + "label": "Latent Dirichlet Allocation", + "description": "This function builds a topic model for text documents. The generated model is then used for classifying the documents based on topics automatically chosen by the model. To choose topics, this function adapts Gibbs sampling.\n\nWhen we have a dataset (text documents) to analyze, we need to do pre-process for the dataset. In general, we split texts into terms (words), build a vocabulary that only consider the top max_features ordered by term frequency across the corpus, and then remove (1) terms that have a document frequency strictly higher than 0.95 (2) terms that have a document frequency strictly lower than counts 2 (3) a built-in stop word list for English is used. \n\nThis pre-process should be performed carefully to get better results. This function performs this pre-process with default setting we mentioned above.\n\nAlso, choosing the number of topics based on the dataset is very important. It could be possible for you to choose either randomly till you can get your desired results or thoroughly based on knowledge of the given text. Increasing number of iterations for running LDA model would give you stable results.\n\nReference:\n+ ", + "tags": [ + "lda", + "topic modeling" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": "", + "mandatory": true, + "items": [], + "visibleOption": [], + "control": "ColumnSelector", + "columnType": [ + "String", + "String[]" + ], + "validation": [], + "multiple": false + }, + { + "id": "num_voca", + "label": "Number of Vocabularies", + "description": "The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "placeHolder": "1000 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "num_topic", + "label": "Number of Topics", + "description": "The number of topics that will be contained in the entire documents. It should be greater than or equal to two.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "type": "Integer", + "min": 2, + "placeHolder": "3 (value >= 2)" + }, + { + "id": "num_topic_word", + "label": "Number of Terminologies", + "description": "Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "placeHolder": "3 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "max_iter", + "label": "Iterations", + "description": "Maximum number of iterations you want to run your model. It should be at least one.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "type": "Integer", + "min": 1, + "placeHolder": "20 (value >= 1)" + }, + { + "id": "learning_method", + "label": "Learning Method", + "description": "Method used to update variational parameters for topic word distribution. Choose 'Online' or 'Batch'.\n- 'Online': Online variational Bayes method. In each EM update, use mini-batch of training data to update the variational parameters for topic word distribution variable incrementally. The learning rate is controlled the 'Learning Offset' parameters.\n- 'Batch': Batch variational Bayes method. Use all training data in each EM update. Old variational parameters for topic word distribution will be overwritten in each iteration.", + "mandatory": false, + "items": [ + { + "label": "Online", + "value": "online", + "default": true + }, + { + "label": "Batch", + "value": "batch", + "default": false + } + ], + "visibleOption": [], + "control": "RadioButton", + "columnType": [], + "validation": [] + }, + { + "id": "learning_offset", + "label": "Learning Offset", + "description": "A (positive) parameter that downweights early iterations in online learning. It should be greater than 1.0.", + "mandatory": false, + "items": [], + "visibleOption": [ + { + "id": "learning_method", + "value": "online" + } + ], + "control": "InputBox", + "columnType": [], + "validation": [], + "placeHolder": "10.0 (value > 1.0)", + "type": "Double" + }, + { + "id": "random_state", + "label": "Seed", + "description": "The seed used by the random number generator.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "type": "Integer", + "placeHolder": "" + }, + { + "id": "group_by", + "label": "Group By", + "description": "", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "ColumnSelector", + "columnType": [], + "validation": [], + "multiple": true, + "rowCount": 5 + } + ] + }, + "md": "" +} diff --git a/function/python/brightics/function/textanalytics/meta/lda3.json b/function/python/brightics/function/textanalytics/meta/lda3.json index 98c5774be..5270e01fb 100644 --- a/function/python/brightics/function/textanalytics/meta/lda3.json +++ b/function/python/brightics/function/textanalytics/meta/lda3.json @@ -4,12 +4,13 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "textanalytics", "func": "brightics.function.textanalytics$lda3", "name": "brightics.function.textanalytics$lda3", "context": "python", "label": "Latent Dirichlet Allocation", - "description": "The generated topic model is then used for classifying the documents based on topics automatically chosen by the model. To choose topics, this function adapts Gibbs sampling.\n\nWhen we have a text document dataset to analyze, we need to do pre-process for the dataset. In general, we split texts into terms (words), build a vocabulary that only consider the top max_features ordered by term frequency across the corpus, and then remove (1) terms that have a document frequency strictly higher than 0.95 (2) terms that have a document frequency strictly lower than counts 2 (3) a built-in stopwords list for English is used. \n\nThis pre-processing should be performed carefully to get better results. This function performs this pre-processing with default setting we mentioned above.\n\nAlso, choosing the number of topics based on the dataset is very important. It could be possible for you to choose either randomly till you can get your desired results or thoroughly based on knowledge of the given text. Increasing number of iterations for running LDA model would give you stable results.", + "description": "The generated topic model is then used for classifying the documents based on topics automatically chosen by the model. To choose topics, this function adapts Gibbs sampling.\n\nWhen we have a text document dataset to analyze, we need to do pre-process for the dataset. In general, we split texts into terms (words), build a vocabulary that only consider the top max_features ordered by term frequency across the corpus, and then remove (1) terms that have a document frequency strictly higher than 0.95 (2) terms that have a document frequency strictly lower than counts 2 (3) a built-in stopwords list for English is used. \n\nThis pre-processing should be performed carefully to get better results. This function performs this pre-processing with default setting we mentioned above.\n\nAlso, choosing the number of topics based on the dataset is very important. It could be possible for you to choose either randomly till you can get your desired results or thoroughly based on knowledge of the given text. Increasing number of iterations for running LDA model would give you stable results.\n\nReference: \n+ \n+ \"Online Learning for Latent Dirichlet Allocation\", Matthew D. Hoffman, David M. Blei, Francis Bach, 2010", "tags": [ "lda", "topic modeling" @@ -184,7 +185,7 @@ "summary": "This function builds a topic model for text documents with LDA.", "tutorialLink": "https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/35_market_saledata_lda" }, - "md": "# Latent Dirichlet Allocation\nThis function builds a topic model for text documents with LDA.\n\n## Description\nThe generated topic model is then used for classifying the documents based on topics automatically chosen by the model. To choose topics, this function adapts Gibbs sampling.\n\nWhen we have a text document dataset to analyze, we need to do pre-process for the dataset. In general, we split texts into terms (words), build a vocabulary that only consider the top max_features ordered by term frequency across the corpus, and then remove (1) terms that have a document frequency strictly higher than 0.95 (2) terms that have a document frequency strictly lower than counts 2 (3) a built-in stopwords list for English is used. \n\nThis pre-processing should be performed carefully to get better results. This function performs this pre-processing with default setting we mentioned above.\n\nAlso, choosing the number of topics based on the dataset is very important. It could be possible for you to choose either randomly till you can get your desired results or thoroughly based on knowledge of the given text. Increasing number of iterations for running LDA model would give you stable results.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including topic modeling result.\n#### PARAMETER\n1. **Input Column***: Text data column to select as an input. Data type should be a string or list of string.\n\n2. **Topic Column Name**: Column name for topic modeling result.\n\n3. **Number of Vocabularies**: The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.\n\n4. **Number of Topics**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\n5. **Number of Terminologies**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\n6. **Iterations**: Maximum number of iterations you want to run your model. It should be at least one.\n\n7. **Learning Method**: Method used to update parameters for topic word distribution. In each EM(Expectation Maximization) update, `Online` uses mini-batch of training data to update the parameters for topic word distribution variable incrementally. `Batch` uses all training data in each EM update. Old parameters for topic word distribution will be overwritten in each iteration.\n - Available Options : `Online`, `Batch` \n\n8. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n9. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nlda3(table, input_col, topic_name='topic', num_voca=1000, num_topic=3, num_topic_word=3, max_iter=20, learning_method='online', learning_offset=10., random_state=None, group_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including topic modeling result.\n#### PARAMETER\n1. **input_col***: Text data column to select as an input.\n\t* Type: *str* or *list[str]*\n2. **topic_name**: Column name for topic modeling result.\n\t* Type: *str*\n\t* Default: topic\n3. **num_voca**: The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 1000 (value >= 2)\n4. **num_topic**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 3 (value >= 2)\n5. **num_topic_word**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\t* Type: *int*\n\t* Default / Range: 3 (value >= 2)\n6. **max_iter**: Maximum number of iterations you want to run your model. It should be at least one.\n\t* Type: *int*\n\t* Default / Range: 20 (value >= 1)\n7. **learning_method**: Method used to update parameters for topic word distribution. In each EM(Expectation Maximization) update, `Online` uses mini-batch of training data to update the parameters for topic word distribution variable incrementally. `Batch` uses all training data in each EM update. Old parameters for topic word distribution will be overwritten in each iteration.\n\t* Type: *str*\n\t* Default / Range: online ( online | batch )\n8. **learning_offset**: A (positive) parameter that downweights early iterations in online learning. It should be greater than 1.0.\n\t* Type: *float*\n * Default / Range: 10.0 (value > 1.0)\n9. **random_state**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n10. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Vocabularies**: 1000\n4. **Number of Topics**: 3\n5. **Number of Terminologies**: 3 \n6. **Iterations**: 20\n7. **Learning Method**: Batch\n8. **Seed**: 0\n9. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import lda3\ninput_table = inputs[0]\nresult = lda3(table=input_table,\n input_col='tokenized_text',\n topic_name='topic',\n num_voca=1000,\n num_topic=3,\n num_topic_word=3,\n max_iter=20,\n learning_method='online',\n learning_offset=10.,\n random_state=None,\n group_by=None)\noutput = result['out_table']\n```\nIn this python script, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic.\n", + "md": "# Latent Dirichlet Allocation\nThis function builds a topic model for text documents with LDA.\n\n## Description\nThe generated topic model is then used for classifying the documents based on topics automatically chosen by the model. To choose topics, this function adapts Gibbs sampling.\n\nWhen we have a text document dataset to analyze, we need to do pre-process for the dataset. In general, we split texts into terms (words), build a vocabulary that only consider the top max_features ordered by term frequency across the corpus, and then remove (1) terms that have a document frequency strictly higher than 0.95 (2) terms that have a document frequency strictly lower than counts 2 (3) a built-in stopwords list for English is used. \n\nThis pre-processing should be performed carefully to get better results. This function performs this pre-processing with default setting we mentioned above.\n\nAlso, choosing the number of topics based on the dataset is very important. It could be possible for you to choose either randomly till you can get your desired results or thoroughly based on knowledge of the given text. Increasing number of iterations for running LDA model would give you stable results.\n\nReference\n+ \n+ \"Online Learning for Latent Dirichlet Allocation\", Matthew D. Hoffman, David M. Blei, Francis Bach, 2010 \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including topic modeling result.\n#### PARAMETER\n1. **Input Column***: Text data column to select as an input. Data type should be a string or list of string.\n\n2. **Topic Column Name**: Column name for topic modeling result.\n\n3. **Number of Vocabularies**: The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.\n\n4. **Number of Topics**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\n5. **Number of Terminologies**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\n6. **Iterations**: Maximum number of iterations you want to run your model. It should be at least one.\n\n7. **Learning Method**: Method used to update parameters for topic word distribution. In each EM(Expectation Maximization) update, `Online` uses mini-batch of training data to update the parameters for topic word distribution variable incrementally. `Batch` uses all training data in each EM update. Old parameters for topic word distribution will be overwritten in each iteration.\n - Available Options : `Online`, `Batch` \n\n8. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n9. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nlda3(table, input_col, topic_name='topic', num_voca=1000, num_topic=3, num_topic_word=3, max_iter=20, learning_method='online', learning_offset=10., random_state=None, group_by=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including topic modeling result.\n#### PARAMETER\n1. **input_col***: Text data column to select as an input.\n\t* Type: *str* or *list[str]*\n2. **topic_name**: Column name for topic modeling result.\n\t* Type: *str*\n\t* Default: topic\n3. **num_voca**: The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 1000 (value >= 2)\n4. **num_topic**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 3 (value >= 2)\n5. **num_topic_word**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\t* Type: *int*\n\t* Default / Range: 3 (value >= 2)\n6. **max_iter**: Maximum number of iterations you want to run your model. It should be at least one.\n\t* Type: *int*\n\t* Default / Range: 20 (value >= 1)\n7. **learning_method**: Method used to update parameters for topic word distribution. In each EM(Expectation Maximization) update, `Online` uses mini-batch of training data to update the parameters for topic word distribution variable incrementally. `Batch` uses all training data in each EM update. Old parameters for topic word distribution will be overwritten in each iteration.\n\t* Type: *str*\n\t* Default / Range: online ( online | batch )\n8. **learning_offset**: A (positive) parameter that downweights early iterations in online learning. It should be greater than 1.0.\n\t* Type: *float*\n * Default / Range: 10.0 (value > 1.0)\n9. **random_state**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n10. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Vocabularies**: 1000\n4. **Number of Topics**: 3\n5. **Number of Terminologies**: 3 \n6. **Iterations**: 20\n7. **Learning Method**: Batch\n8. **Seed**: 0\n9. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import lda3\ninput_table = inputs[0]\nresult = lda3(table=input_table,\n input_col='tokenized_text',\n topic_name='topic',\n num_voca=1000,\n num_topic=3,\n num_topic_word=3,\n max_iter=20,\n learning_method='online',\n learning_offset=10.,\n random_state=None,\n group_by=None)\noutput = result['out_table']\n```\nIn this python script, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic.\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$lda3.json", diff --git a/function/python/brightics/function/textanalytics/meta/lda4.json b/function/python/brightics/function/textanalytics/meta/lda4.json new file mode 100644 index 000000000..e6b4a67f1 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/lda4.json @@ -0,0 +1,1465 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$lda4", + "name": "brightics.function.textanalytics$lda4", + "context": "python", + "label": "Latent Dirichlet Allocation", + "description": "The generated topic model is then used for classifying the documents based on topics automatically chosen by the model. To choose topics, this function adapts Gibbs sampling.\n\nWhen we have a text document dataset to analyze, we need to do pre-process for the dataset. In general, we split texts into terms (words), build a vocabulary that only consider the top max_features ordered by term frequency across the corpus, and then remove (1) terms that have a document frequency strictly higher than 0.95 (2) terms that have a document frequency strictly lower than counts 2 (3) a built-in stopwords list for English is used. \n\nThis pre-processing should be performed carefully to get better results. This function performs this pre-processing with default setting we mentioned above.\n\nAlso, choosing the number of topics based on the dataset is very important. It could be possible for you to choose either randomly till you can get your desired results or thoroughly based on knowledge of the given text. Increasing number of iterations for running LDA model would give you stable results.\n\nReference: \n+ \n+ \"Online Learning for Latent Dirichlet Allocation\", Matthew D. Hoffman, David M. Blei, Francis Bach, 2010", + "tags": [ + "lda", + "topic modeling" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "topic_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Table including topic modeling result." + }, + "topic_table": { + "type": "table", + "desc": "Table which consists of each topic's vocabulary and weights." + }, + "model": { + "type": "model", + "desc": "Result model." + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": "Text data column to select as an input.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String", + "String[]" + ], + "multiple": false + }, + { + "id": "topic_name", + "label": "Topic Column Name", + "description": "Column name for topic modeling result.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "topic" + }, + { + "id": "num_voca", + "label": "Number of Vocabularies", + "description": "The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "placeHolder": "1000 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "num_topic", + "label": "Number of Topics", + "description": "The number of topics that will be contained in the entire documents. It should be greater than or equal to two.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer", + "min": 2, + "placeHolder": "5 (value >= 2)" + }, + { + "id": "num_topic_word", + "label": "Number of Terminologies", + "description": "Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "placeHolder": "10 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "max_iter", + "label": "Iterations", + "description": "Maximum number of iterations you want to run your model. It should be at least one.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer", + "min": 1, + "placeHolder": "20 (value >= 1)" + }, + { + "id": "learning_method", + "label": "Learning Method", + "description": "Method used to update parameters for topic word distribution. In each EM(Expectation Maximization) update, `Online` uses mini-batch of training data to update the parameters for topic word distribution variable incrementally. `Batch` uses all training data in each EM update. Old parameters for topic word distribution will be overwritten in each iteration.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Online", + "value": "online", + "default": true + }, + { + "label": "Batch", + "value": "batch", + "default": false + } + ], + "columnType": [] + }, + { + "id": "learning_offset", + "label": "Learning Offset", + "description": "A (positive) parameter that downweights early iterations in online learning. It should be greater than 1.0.", + "visibleOption": [ + { + "id": "learning_method", + "value": "online" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "placeHolder": "10.0 (value > 1.0)", + "type": "Double" + }, + { + "id": "random_state", + "label": "Seed", + "description": "Random seed. Use the same seed in order to reproduce the same results.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "Integer", + "placeHolder": "" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true, + "rowCount": 5 + } + ], + "summary": "This function builds a topic model for text documents with LDA.", + "tutorialLink": "https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/35_market_saledata_lda" + }, + "md": { + "en": "# Latent Dirichlet Allocation\nThis function builds a topic model for text documents with LDA.\n\n## Description\nThe generated topic model is then used for classifying the documents based on topics automatically chosen by the model. To choose topics, this function adapts Gibbs sampling.\n\nWhen we have a text document dataset to analyze, we need to do pre-process for the dataset. In general, we split texts into terms (words), build a vocabulary that only consider the top max_features ordered by term frequency across the corpus, and then remove (1) terms that have a document frequency strictly higher than 0.95 (2) terms that have a document frequency strictly lower than counts 2 (3) a built-in stopwords list for English is used. \n\nThis pre-processing should be performed carefully to get better results. This function performs this pre-processing with default setting we mentioned above.\n\nAlso, choosing the number of topics based on the dataset is very important. It could be possible for you to choose either randomly till you can get your desired results or thoroughly based on knowledge of the given text. Increasing number of iterations for running LDA model would give you stable results.\n\nReference: \n+ \n+ \"Online Learning for Latent Dirichlet Allocation\", Matthew D. Hoffman, David M. Blei, Francis Bach, 2010\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including topic modeling result.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **model**: (Model) Result model.\n#### PARAMETER\n1. **Input Column***: Text data column to select as an input.\n\n2. **Topic Column Name**: Column name for topic modeling result.\n\n3. **Number of Vocabularies**: The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.\n\n4. **Number of Topics**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\n5. **Number of Terminologies**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\n6. **Iterations**: Maximum number of iterations you want to run your model. It should be at least one.\n\n7. **Learning Method**: Method used to update parameters for topic word distribution. In each EM(Expectation Maximization) update, `Online` uses mini-batch of training data to update the parameters for topic word distribution variable incrementally. `Batch` uses all training data in each EM update. Old parameters for topic word distribution will be overwritten in each iteration.\n\n8. **Learning Offset**: A (positive) parameter that downweights early iterations in online learning. It should be greater than 1.0.\n\n9. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n10. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nlda4(table = , input_col = , topic_name = , num_voca = , num_topic = , num_topic_word = , max_iter = , learning_method = , learning_offset = , random_state = , group_by = )\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including topic modeling result.\n2. **topic_table**: (Table) Table which consists of each topic's vocabulary and weights.\n3. **model**: (Model) Result model.\n#### PARAMETER\n1. **input_col***: Text data column to select as an input.\n\t* Type: *str*\n2. **topic_name**: Column name for topic modeling result.\n\t* Type: *str*\n3. **num_voca**: The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 1000 (value >= 2)\n4. **num_topic**: The number of topics that will be contained in the entire documents. It should be greater than or equal to two.\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 2)\n5. **num_topic_word**: Maximum number of terminologies you want to show for particular topics. It should be greater than or equal to two. Terminology number should be less than or equal to vocabulary size also.\n\t* Type: *int*\n\t* Default / Range: 10 (value >= 2)\n6. **max_iter**: Maximum number of iterations you want to run your model. It should be at least one.\n\t* Type: *int*\n\t* Default / Range: 20 (value >= 1)\n7. **learning_method**: Method used to update parameters for topic word distribution. In each EM(Expectation Maximization) update, `Online` uses mini-batch of training data to update the parameters for topic word distribution variable incrementally. `Batch` uses all training data in each EM update. Old parameters for topic word distribution will be overwritten in each iteration.\n\t* Type: *str*\n\t* Default / Range: online ( online | batch )\n8. **learning_offset**: A (positive) parameter that downweights early iterations in online learning. It should be greater than 1.0.\n\t* Type: *double*\n\n9. **random_state**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n\n10. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Vocabularies**: 1000\n4. **Number of Topics**: 5\n5. **Number of Terminologies**: 10\n6. **Iterations**: 20\n7. **Learning Method**: Online\n8. **Learning Offset**: 10\n9. **Seed**: None\n10. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import lda4\ninput_table = inputs[0]\nresult = lda4(table=input_table,\n input_col='tokenized_text',\n topic_name='topic',\n num_voca=1000,\n num_topic=5,\n num_topic_word=10,\n max_iter=20,\n learning_method='online',\n learning_offset=10,\n random_state=None,\n group_by=None)\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "brightics.function.textanalytics$lda4.json", + "label": "LDA", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mpy8tjb4k2epuuzb", + "project_id": "p5dmzu78qb564crk", + "label": "LDA", + "contents": { + "mid": "mpy8tjb4k2epuuzb", + "type": "data", + "title": "LDA", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", + "param": { + "stemming": false, + "pos_extraction": [ + "CC", + "JJ", + "JJR", + "JJS", + "NN", + "NNS", + "NNP", + "NNPS", + "RB", + "RBR", + "RBS", + "VB", + "VBD", + "VBN", + "VBP", + "VBZ" + ], + "is_tagged": false, + "input_cols": [ + "text" + ] + }, + "display": { + "label": "Tokenizer (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1584326103012", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "n6e2zvwrtud5yxzstdkvgrqa" + } + ], + "layout": { + "type": "panel", + "id": "default-1584326103012" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1584326103075", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "dtfrdd397mk3gsakyxisigiq" + } + ], + "layout": { + "type": "panel", + "id": "default-1584326103075" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tgrbv5y7zeypzgm3" + }, + "outputs": { + "out_table": "tec488t5u3teeq3z" + }, + "fid": "fe2f3b28rt4x9cf4" + }, + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_LatentDirichletAllocation.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1584925311657", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "gufsnav9w9kxm7dsf2dheg9w" + } + ], + "layout": { + "type": "panel", + "id": "default-1584925311657" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tgrbv5y7zeypzgm3" + }, + "fid": "fe8cpks75nyh2we9" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$lda4", + "name": "brightics.function.textanalytics$lda4", + "param": { + "learning_method": "online", + "input_col": "tokenized_text" + }, + "display": { + "label": "Latent Dirichlet Allocation", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501731489", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "uuckmtqhxycjw9qvwfmk6v4v" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501731489" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501731537", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Table including topic modeling result." + }, + "topic_table": { + "type": "table", + "desc": "Table which consists of each topic's vocabulary and weights." + }, + "model": { + "type": "model", + "desc": "Result model." + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tec488t5u3teeq3z" + }, + "outputs": { + "out_table": "ttgpe5hu5xcu29fg", + "topic_table": "tuyphdpn85gmr77q", + "model": "tnjvmt48vgan24r8" + }, + "fid": "fhyrk3cwmsazwgzq" + } + ], + "links": [ + { + "kid": "kqt43da2qs4tqttx", + "sourceFid": "fe8cpks75nyh2we9", + "targetFid": "fe2f3b28rt4x9cf4" + }, + { + "kid": "kpkc9wpyjkptpn9u", + "sourceFid": "fe2f3b28rt4x9cf4", + "targetFid": "fhyrk3cwmsazwgzq" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T07:21:29.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T07:22:20.000Z", + "event_key": "2020_072220.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "lda4.png", + "label": "lda4.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Column***: tokenized_text\n2. **Topic Column Name**: topic\n3. **Number of Vocabularies**: 1000\n4. **Number of Topics**: 5\n5. **Number of Terminologies**: 10\n6. **Iterations**: 20\n7. **Learning Method**: Online\n8. **Learning Offset**: 10\n9. **Seed**: None\n10. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import lda4\r\ninput_table = inputs[0]\r\nresult = lda4(table=input_table,\r\n input_col='tokenized_text',\r\n topic_name='topic',\r\n num_voca=1000,\r\n num_topic=5,\r\n num_topic_word=10,\r\n max_iter=20,\r\n learning_method='online',\r\n learning_offset=10,\r\n random_state=None,\r\n group_by=None)\r\noutput = result['out_table']", + "context": "python", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes assigned topic and contributiveness of each word to assigned topic." + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/n_gram.json b/function/python/brightics/function/textanalytics/meta/n_gram.json index 0ced3f0f1..661540c9f 100644 --- a/function/python/brightics/function/textanalytics/meta/n_gram.json +++ b/function/python/brightics/function/textanalytics/meta/n_gram.json @@ -536,8 +536,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": true, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/ner_crf_predict.json b/function/python/brightics/function/textanalytics/meta/ner_crf_predict.json new file mode 100644 index 000000000..26cb47283 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/ner_crf_predict.json @@ -0,0 +1,1403 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$ner_crf_predict", + "name": "brightics.function.textanalytics$ner_crf_predict", + "context": "python", + "label": "NER CRF Predict", + "description": "Named-entity recognition (NER) (also known as entity identification, entity chunking and entity extraction) is a subtask of information extraction that seeks to locate and classify named entities mentioned in unstructured text into pre-defined categories such as person names, organizations, locations, medical codes, time expressions, quantities, monetary values, percentages, etc.\n\nThis function extracts named entities from given text using a CRF model obtained from the Named Entity Recognition CRF Train function.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Named-entity_recognition", + "tags": [ + "ner", + "named entity recognition", + "crf" + ], + "version": "3.6", + "inputs": { + "table": "", + "model": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "model": { + "type": "model", + "desc": "Output model from NER CRF Train function.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Table including found named entities with their tags." + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "String column names to apply the named entity recognition. Available input type is string only.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": true, + "rowCount": 5 + }, + { + "id": "language", + "label": "Language", + "description": "Language of the text data.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "English", + "value": "eng", + "default": true + }, + { + "label": "Korean", + "value": "kor", + "default": false + } + ], + "columnType": [] + }, + { + "id": "extraction_set", + "label": "Extraction", + "description": "Extraction of items to return.", + "visibleOption": [], + "control": "ArrayInput", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "" + }, + { + "id": "new_col_prefix", + "label": "Column Name Prefix", + "description": "Prefix for new column names.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "named_entity" + } + ], + "summary": "This function extracts named entities from given text using a CRF model obtained from the Named Entity Recognition CRF Train function." + }, + "md": { + "en": "# NER CRF Predict\nThis function extracts named entities from given text using a CRF model obtained from the Named Entity Recognition CRF Train function.\n\n## Description\nNamed-entity recognition (NER) (also known as entity identification, entity chunking and entity extraction) is a subtask of information extraction that seeks to locate and classify named entities mentioned in unstructured text into pre-defined categories such as person names, organizations, locations, medical codes, time expressions, quantities, monetary values, percentages, etc.\n\nThis function extracts named entities from given text using a CRF model obtained from the Named Entity Recognition CRF Train function.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Named-entity_recognition\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n2. **model***: (Model) Output model from NER CRF Train function.\n#### OUTPUT\n1. **out_table**: (Table) Table including found named entities with their tags.\n#### PARAMETER\n1. **Input Columns***: String column names to apply the named entity recognition. Available input type is string only.\n\n2. **Language**: Language of the text data.\n\n3. **Extraction**: Extraction of items to return. If None, every possible named entity tag will be chosen.\n\n4. **Column Name Prefix**: Prefix for new column names.\n\n\n### Python\n#### USAGE\n\n```\nner_crf_predict(table = , model = , input_cols = , language = , extraction_set = , new_col_prefix = )\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n2. **model***: (Model) Output model from NER CRF Train function.\n#### OUTPUT\n1. **out_table**: (Table) Table including found named entities with their tags.\n#### PARAMETER\n1. **input_cols***: String column names to apply the named entity recognition. Available input type is string only.\n\t* Type: *list[str]*\n2. **language**: Language of the text data.\n\t* Type: *str*\n\t* Default / Range: eng ( eng | kor )\n3. **extraction_set**: Extraction of items to return. If None, every possible named entity tag will be chosen.\n\t* Type: *str*\n4. **new_col_prefix**: Prefix for new column names.\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, text_eng data is used to predict named entities. The output model from NER CRF Train function is applied to predict named entity category of each word. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Columns***: text\n2. **Language**: English\n3. **Extraction**: None\n4. **Column Name Prefix**:named_entity \n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import ner_crf_predict\ninput_table = inputs[0]\ninput_model = models[0]\nresult = ner_crf_predict(table=input_table, model=input_model, input_cols=['text'],\n language='eng', new_col_prefix='named_entity', extraction_set=None)\noutput = result['out_table']\n```\nIn this tutorial workflow, text_eng data is used to predict named entities. The output model from NER CRF Train function is applied to predict named entity category of each word.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "NER CRF.json", + "label": "NER CRF", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mnkcmj537fw9e7f8", + "project_id": "p7puh97cexbjrebu", + "label": "NER CRF", + "contents": { + "mid": "mnkcmj537fw9e7f8", + "type": "data", + "title": "NER CRF", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_ner_crf_train.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446040912", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ivznai52q8haijhp6hyaxv2u" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446040912" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tbwhmwdef4pf7jw2" + }, + "fid": "f8d2vxmm577k299p" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$ner_crf_train", + "name": "brightics.function.textanalytics$ner_crf_train", + "param": { + "algorithm": "lbfgs", + "all_possible_transitions": true, + "sentence_col": "sent", + "token_col": "word", + "pos_col": "pos", + "label_col": "tag" + }, + "display": { + "label": "NER CRF Train", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446118813", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "4dh4cmmae3d4fthriufd7agf" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446118813" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tbwhmwdef4pf7jw2" + }, + "outputs": { + "model": "tm7723fua2a6gdym" + }, + "fid": "fmhc99x8ss8n9gxm" + }, + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_text_eng.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446168212", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "d7ywpykbuws2g56x3hyfpc4i" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446168212" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tm7g7pwga8b3crwk" + }, + "fid": "fcq4pkygn2xxz7zt" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$ner_crf_predict", + "name": "brightics.function.textanalytics$ner_crf_predict", + "param": { + "language": "eng", + "input_cols": [ + "text" + ] + }, + "display": { + "label": "NER CRF Predict", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446198006", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "426ft2vxkx8enzrwtpu8r8v2" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446198006" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446198068", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tm7g7pwga8b3crwk", + "model": "tm7723fua2a6gdym" + }, + "outputs": { + "out_table": "tu5ydb824f8drtkg" + }, + "fid": "fmaug3auvumr3ph2" + } + ], + "links": [ + { + "kid": "kteze5xajb25ezdx", + "sourceFid": "f8d2vxmm577k299p", + "targetFid": "fmhc99x8ss8n9gxm" + }, + { + "kid": "kyyb57de2haavtfn", + "sourceFid": "fmhc99x8ss8n9gxm", + "targetFid": "fmaug3auvumr3ph2" + }, + { + "kid": "ks4yn2s8ngvr2gx9", + "sourceFid": "fcq4pkygn2xxz7zt", + "targetFid": "fmaug3auvumr3ph2" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-18T02:07:16.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-18T02:10:04.000Z", + "event_key": "2020_021004.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "ner_crf_predict.png", + "label": "ner_crf_predict.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, text_eng data is used to predict named entities. The output model from NER CRF Train function is applied to predict named entity category of each word. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Columns***: text\n2. **Language**: English\n3. **Extraction**: None\n4. **Column Name Prefix**:named_entity \n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import ner_crf_predict\r\ninput_table = inputs[0]\r\ninput_model = models[0]\r\nresult = ner_crf_predict(table=input_table, model=input_model, input_cols=['text'],\r\n language='eng', new_col_prefix='named_entity', extraction_set=None)\r\noutput = result['out_table']", + "context": "python", + "description": "In this tutorial workflow, text_eng data is used to predict named entities. The output model from NER CRF Train function is applied to predict named entity category of each word." + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/ner_crf_train.json b/function/python/brightics/function/textanalytics/meta/ner_crf_train.json new file mode 100644 index 000000000..7defcfa41 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/ner_crf_train.json @@ -0,0 +1,1486 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$ner_crf_train", + "name": "brightics.function.textanalytics$ner_crf_train", + "context": "python", + "label": "NER CRF Train", + "description": "Named-entity recognition (NER) (also known as entity identification, entity chunking and entity extraction) is a subtask of information extraction that seeks to locate and classify named entities mentioned in unstructured text into pre-defined categories such as person names, organizations, locations, medical codes, time expressions, quantities, monetary values, percentages, etc.\n\nThis function trains a CRF model to perform the named entity recognition. An input corpus must contain four columns: sentence column which identifies each sentence, token column, pos column, and label column. It is assumed that the IOB system is used and each label starts with letters 'I', 'O', or 'B'.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Named-entity_recognition", + "tags": [ + "ner", + "named entity recognition", + "crf" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Train data including sentence info, token info, part of speech, and named entity label.", + "optional": false + }, + "model": { + "type": "model", + "desc": "Trained model which will be used in the NER CRF Predict function." + } + }, + "params": [ + { + "id": "sentence_col", + "label": "Sentence Column", + "description": "Sentence column which identifies each sentence. It may contain sentence ID, sentence itself, etc. This value for tokens in the same sentence should be identical.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Float", + "Double", + "Long", + "String" + ], + "multiple": false + }, + { + "id": "token_col", + "label": "Token Column", + "description": "Token column which contains a tokenized item.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": false + }, + { + "id": "pos_col", + "label": "POS Column", + "description": "POS column which contains a part of speech information.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": false + }, + { + "id": "label_col", + "label": "Label Column", + "description": "Label column which contains a named entity label.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": false + }, + { + "id": "algorithm", + "label": "Algorithm", + "description": "Training algorithm for CRF.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "L-BFGS Gradient Descent", + "value": "lbfgs", + "default": true + }, + { + "label": "L2 Stochastic Gradient Descent", + "value": "l2sgd", + "default": false + }, + { + "label": "Averaged Perceptron", + "value": "ap", + "default": false + }, + { + "label": "Passive Aggressive", + "value": "pa", + "default": false + }, + { + "label": "Adaptive Regularization Of Weight Vector", + "value": "arow", + "default": false + } + ], + "columnType": [] + }, + { + "id": "c1", + "label": "c1", + "description": "The coefficient for L1 regularization. Affects when algorithm is set to L-BFGS.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [], + "placeHolder": "0.1 (value >= 0)", + "type": "Double", + "min": 0 + }, + { + "id": "c2", + "label": "c2", + "description": "The coefficient for L2 regularization. Affects when algorithm is set to L2 SGD or L-BFGS.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [], + "placeHolder": "0.1 (value >= 0)", + "type": "Double", + "min": 0 + }, + { + "id": "max_iterations", + "label": "Maximum number of iterations", + "description": "The maximum number of iterations for optimization algorithm. Suggested default values for each training algorithm: unlimited for L-BFGS, 1000 for L2 SGD, and 100 for AP, PA, and AROW.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "100 (value >= 1)" + }, + { + "id": "all_possible_transitions", + "label": "Use all possible transitions", + "description": "Specify whether CRF generates transition features that do not even occur in the training data.", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": true + } + ], + "summary": "This function trains a CRF model to perform the named entity recognition." + }, + "md": { + "en": "# NER CRF Train\nThis function trains a CRF model to perform the named entity recognition.\n\n## Description\nNamed-entity recognition (NER) (also known as entity identification, entity chunking and entity extraction) is a subtask of information extraction that seeks to locate and classify named entities mentioned in unstructured text into pre-defined categories such as person names, organizations, locations, medical codes, time expressions, quantities, monetary values, percentages, etc.\n\nThis function trains a CRF model to perform the named entity recognition. An input corpus must contain four columns:\n1. sentence column which identifies each sentence,\n2. token column which contains each word,\n3. pos column which contains part of speech of each word, and\n4. label column which contains named entity label of each word. It is assumed that the IOB system is used and each label starts with letters 'I', 'O', or 'B'.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Named-entity_recognition\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Train data including sentence info, token info, part of speech, and named entity label.\n#### OUTPUT\n1. **model**: (Model) Trained model which will be used in the NER CRF Predict function.\n#### PARAMETER\n1. **Sentence Column***: Sentence column which identifies each sentence. It may contain sentence ID, sentence itself, etc. This value for tokens in the same sentence should be identical.\n\n2. **Token Column***: Token column which contains a tokenized item.\n\n3. **POS Column***: POS column which contains a part of speech information.\n\n4. **Label Column***: Label column which contains a named entity label. It is assumed that the IOB system is used and each label starts with letters 'I', 'O', or 'B'.\n\n5. **Algorithm**: Training algorithm for CRF.\n + Available Items: `L-BFGS Gradient Descent`, `L2 Stochastic Gradient Descent`, `Averaged Perceptron`, `Passive Aggressive`, `Adaptive Regularization Of Weight Vector`\n\n6. **c1**: The coefficient for L1 regularization. Affects when algorithm is set to `L-BFGS Gradient Descent`.\n\n7. **c2**: The coefficient for L2 regularization. Affects when algorithm is set to `L2 Stochastic Gradient Descent` or `L-BFGS Gradient Descent`.\n\n8. **Maximum number of iterations**: The maximum number of iterations for optimization algorithm. Suggested default values for each training algorithm: unlimited for `L-BFGS Gradient Descent`, 1000 for `L2 Stochastic Gradient Descent`, and 100 for `Averaged Perceptron`, `Passive Aggressive`, `Adaptive Regularization Of Weight Vector`.\n\n9. **Use all possible transitions**: Specify whether CRF generates transition features that do not even occur in the training data.\n\n\t* Default value: true \n\n### Python\n#### USAGE\n\n```\nner_crf_train(table = , sentence_col = , token_col = , pos_col = , label_col = , algorithm = , c1 = , c2 = , max_iterations = , all_possible_transitions = true)\n```\n\n#### INPUT\n1. **table***: (Table) Train data including sentence info, token info, part of speech, and named entity label.\n#### OUTPUT\n1. **model**: (Model) Trained model which will be used in the NER CRF Predict function.\n#### PARAMETER\n1. **sentence_col***: Sentence column which identifies each sentence. It may contain sentence ID, sentence itself, etc. This value for tokens in the same sentence should be identical.\n\t* Type: *str*\n2. **token_col***: Token column which contains a tokenized item.\n\t* Type: *str*\n3. **pos_col***: POS column which contains a part of speech information.\n\t* Type: *str*\n4. **label_col***: Label column which contains a named entity label.\n\t* Type: *str*\n5. **algorithm**: Training algorithm for CRF.\n\t* Type: *str*\n\t* Default / Range: lbfgs ( lbfgs | l2sgd | ap | pa | arow )\n6. **c1**: The coefficient for L1 regularization. Affects when algorithm is set to lbfgs.\n\t* Type: *double*\n\t* Default / Range: 0.1 (value >= 0)\n7. **c2**: The coefficient for L2 regularization. Affects when algorithm is set to l2sgd or lbfgs.\n\t* Type: *double*\n\t* Default / Range: 0.1 (value >= 0)\n8. **max_iterations**: The maximum number of iterations for optimization algorithm. Suggested default values for each training algorithm: unlimited for lbfgs, 1000 for l2sgd, and 100 for ap, pa, and arow.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n9. **all_possible_transitions**: Specify whether CRF generates transition features that do not even occur in the training data.\n\t* Type: *bool*\n\t* Default value: true \n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, ner_crf_train data is used to train a NER CRF model and to predict named entities. The generated model is afterward applied to another text data to predict named entity category of each word in the NER CRF Predict function. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Sentence Column***: sent\n2. **Token Column***: word\n3. **POS Column***: pos\n4. **Label Column***: tag\n5. **Algorithm**: L-BFGS Gradient Descent\n6. **c1**: 0.1\n7. **c2**: 0.1\n8. **Maximum number of iterations**: 100\n9. **Use all possible transitions**: true\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import ner_crf_train\ninput_table = inputs[0]\nresult = ner_crf_train(table=input_table,\n sentence_col='sent', token_col='word', pos_col='pos', label_col='tag',\n algorithm='lbfgs', c1=0.1, c2=0.1,\n max_iterations=100, all_possible_transitions=True)\nmodel = result['model']\n```\nIn this tutorial workflow, ner_crf_train data is used to train a NER CRF model and to predict named entities. The generated model is afterward applied to another text data to predict named entity category of each word in the NER CRF Predict function.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "NER CRF.json", + "label": "NER CRF", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mnkcmj537fw9e7f8", + "project_id": "p7puh97cexbjrebu", + "label": "NER CRF", + "contents": { + "mid": "mnkcmj537fw9e7f8", + "type": "data", + "title": "NER CRF", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_ner_crf_train.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446040912", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ivznai52q8haijhp6hyaxv2u" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446040912" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tbwhmwdef4pf7jw2" + }, + "fid": "f8d2vxmm577k299p" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$ner_crf_train", + "name": "brightics.function.textanalytics$ner_crf_train", + "param": { + "algorithm": "lbfgs", + "all_possible_transitions": true, + "sentence_col": "sent", + "token_col": "word", + "pos_col": "pos", + "label_col": "tag" + }, + "display": { + "label": "NER CRF Train", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446118813", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "4dh4cmmae3d4fthriufd7agf" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446118813" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tbwhmwdef4pf7jw2" + }, + "outputs": { + "model": "tm7723fua2a6gdym" + }, + "fid": "fmhc99x8ss8n9gxm" + }, + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_text_eng.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446168212", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "d7ywpykbuws2g56x3hyfpc4i" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446168212" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tm7g7pwga8b3crwk" + }, + "fid": "fcq4pkygn2xxz7zt" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$ner_crf_predict", + "name": "brightics.function.textanalytics$ner_crf_predict", + "param": { + "language": "eng", + "input_cols": [ + "text" + ] + }, + "display": { + "label": "NER CRF Predict", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446198006", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "426ft2vxkx8enzrwtpu8r8v2" + } + ], + "layout": { + "type": "panel", + "id": "default-1592446198006" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592446198068", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "model": { + "type": "model" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tm7g7pwga8b3crwk", + "model": "tm7723fua2a6gdym" + }, + "outputs": { + "out_table": "tu5ydb824f8drtkg" + }, + "fid": "fmaug3auvumr3ph2" + } + ], + "links": [ + { + "kid": "kteze5xajb25ezdx", + "sourceFid": "f8d2vxmm577k299p", + "targetFid": "fmhc99x8ss8n9gxm" + }, + { + "kid": "kyyb57de2haavtfn", + "sourceFid": "fmhc99x8ss8n9gxm", + "targetFid": "fmaug3auvumr3ph2" + }, + { + "kid": "ks4yn2s8ngvr2gx9", + "sourceFid": "fcq4pkygn2xxz7zt", + "targetFid": "fmaug3auvumr3ph2" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-18T02:07:16.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-18T02:10:04.000Z", + "event_key": "2020_021004.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "ner_crf_train.png", + "label": "ner_crf_train.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, ner_crf_train data is used to train a NER CRF model and to predict named entities. The generated model is afterward applied to another text data to predict named entity category of each word in the NER CRF Predict function. The parameter settings used in the function are shown below.", + "parameter": "1. **Sentence Column***: sent\n2. **Token Column***: word\n3. **POS Column***: pos\n4. **Label Column***: tag\n5. **Algorithm**: L-BFGS Gradient Descent\n6. **c1**: 0.1\n7. **c2**: 0.1\n8. **Maximum number of iterations**: 100\n9. **Use all possible transitions**: true\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import ner_crf_train\r\ninput_table = inputs[0]\r\nresult = ner_crf_train(table=input_table,\r\n sentence_col='sent', token_col='word', pos_col='pos', label_col='tag',\r\n algorithm='lbfgs', c1=0.1, c2=0.1,\r\n max_iterations=100, all_possible_transitions=True)\r\nmodel = result['model']", + "description": "In this tutorial workflow, ner_crf_train data is used to train a NER CRF model and to predict named entities. The generated model is afterward applied to another text data to predict named entity category of each word in the NER CRF Predict function.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/ner_eng.json b/function/python/brightics/function/textanalytics/meta/ner_eng.json new file mode 100644 index 000000000..c00dbd594 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/ner_eng.json @@ -0,0 +1,1116 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$ner_eng", + "name": "brightics.function.textanalytics$ner_eng", + "context": "python", + "label": "NER (English)", + "description": "Named-entity recognition (NER) (also known as entity identification, entity chunking and entity extraction) is a subtask of information extraction that seeks to locate and classify named entities mentioned in unstructured text into pre-defined categories such as person names, organizations, locations, medical codes, time expressions, quantities, monetary values, percentages, etc.\n\nThere are three methods available; NLTK uses the NLTK chunker method, Spacy uses Spacy NER method, and CRF uses pre-trained CRF model which has been obtained by training with GMB corpus.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Named-entity_recognition", + "tags": [ + "ner", + "named entity recognition" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Table including found named entities with their tags." + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "String column names to apply the named entity recognition. Available input type is string only.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": true, + "rowCount": 5 + }, + { + "id": "method", + "label": "Method", + "description": "Method for Named Entity Recognition.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "NLTK", + "value": "nltk", + "default": true + }, + { + "label": "Spacy", + "value": "spacy", + "default": false + }, + { + "label": "CRF", + "value": "crf", + "default": false + } + ], + "columnType": [] + }, + { + "id": "ne_extraction_nltk", + "label": "Extraction", + "description": "Extraction of items to return for NLTK mode.", + "visibleOption": [ + { + "id": "method", + "value": "nltk" + } + ], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "FACILITY", + "value": "FACILITY", + "default": true + }, + { + "label": "GPE (Geo-Political Entities)", + "value": "GPE", + "default": true + }, + { + "label": "GSP (Geographical-Social-Political Entities)", + "value": "GSP", + "default": true + }, + { + "label": "LOCATION", + "value": "LOCATION", + "default": true + }, + { + "label": "ORGANIZATION", + "value": "ORGANIZATION", + "default": true + }, + { + "label": "PERSON", + "value": "PERSON", + "default": true + } + ], + "columnType": [] + }, + { + "id": "ne_extraction_spacy", + "label": "Extraction", + "description": "Extraction of items to return for Spacy mode.", + "visibleOption": [ + { + "id": "method", + "value": "spacy" + } + ], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "CARDINAL", + "value": "CARDINAL", + "default": true + }, + { + "label": "DATE", + "value": "DATE", + "default": true + }, + { + "label": "EVENT", + "value": "EVENT", + "default": true + }, + { + "label": "FAC (Facilities)", + "value": "FAC", + "default": true + }, + { + "label": "GPE (Geo-Political Entities)", + "value": "GPE", + "default": true + }, + { + "label": "LANGUAGE", + "value": "LANGUAGE", + "default": true + }, + { + "label": "LAW", + "value": "LAW", + "default": true + }, + { + "label": "LOC (Location)", + "value": "LOC", + "default": true + }, + { + "label": "MONEY", + "value": "MONEY", + "default": true + }, + { + "label": "NORP (Nationalities Or Religious/Political Groups)", + "value": "NORP", + "default": true + }, + { + "label": "ORDINAL", + "value": "ORDINAL", + "default": true + }, + { + "label": "ORG (Organizations)", + "value": "ORG", + "default": true + }, + { + "label": "PERCENT", + "value": "PERCENT", + "default": true + }, + { + "label": "PERSON", + "value": "PERSON", + "default": true + }, + { + "label": "PRODUCT", + "value": "PRODUCT", + "default": true + }, + { + "label": "QUANTITY", + "value": "QUANTITY", + "default": true + }, + { + "label": "TIME", + "value": "TIME", + "default": true + }, + { + "label": "WORK_OF_ART", + "value": "WORK_OF_ART", + "default": true + } + ], + "columnType": [] + }, + { + "id": "ne_extraction_crf", + "label": "Extraction", + "description": "Extraction of items to return for CRF mode.", + "visibleOption": [ + { + "id": "method", + "value": "crf" + } + ], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "ART (Artifact)", + "value": "ART", + "default": true + }, + { + "label": "EVE (Event)", + "value": "EVE", + "default": true + }, + { + "label": "GEO (Geographical Entities)", + "value": "GEO", + "default": true + }, + { + "label": "GPE (Geo-Political Entities)", + "value": "GPE", + "default": true + }, + { + "label": "NAT (Natural Phenomenon)", + "value": "NAT", + "default": true + }, + { + "label": "ORG (Organizations)", + "value": "ORG", + "default": true + }, + { + "label": "PER (Person)", + "value": "PER", + "default": true + }, + { + "label": "TIM (Time)", + "value": "TIM", + "default": true + } + ], + "columnType": [] + }, + { + "id": "new_col_prefix", + "label": "Column Name Prefix", + "description": "Prefix for new column names.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "named_entity" + } + ], + "summary": "This function extracts named entities from given text." + }, + "md": { + "en": "# NER (English)\nThis function extracts named entities from given text.\n\n## Description\nNamed-entity recognition (NER) (also known as entity identification, entity chunking and entity extraction) is a subtask of information extraction that seeks to locate and classify named entities mentioned in unstructured text into pre-defined categories such as person names, organizations, locations, medical codes, time expressions, quantities, monetary values, percentages, etc.\n\nThere are three methods available;\n1. `NLTK` uses the NLTK chunker method,\n2. `Spacy` uses Spacy NER method, and\n3. `CRF` uses pre-trained CRF model which has been obtained by training with GMB corpus.\n\nReference\n\n+ https://en.wikipedia.org/wiki/Named-entity_recognition\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including found named entities with their tags.\n#### PARAMETER\n1. **Input Columns***: String column names to apply the named entity recognition. Available input type is string only.\n\n2. **Method**: Method for Named Entity Recognition.\n\n3. **Extraction**: Extraction of items to return for NLTK mode. This option appears only when Method is set to `NLTK`. Initially all available options will be chosen as default.\n + Available Options: `FACILITY`, `GPE (Geo-Political Entities)`, `GSP (Geographical-Social-Political Entities)`, `LOCATION`, `ORGANIZATION`, `PERSON`\n4. **Extraction**: Extraction of items to return for Spacy mode. This option appears only when Method is set to `Spacy`. Initially all available options will be chosen as default.\n + Abailable Options: `CARDINAL`, `DATE`, `EVENT`, `FAC (Facilities)`, `GPE (Geo-Political Entities)`, `LANGUAGE`, `LAW`, `LOC (Location)`, `MONEY`, `NORP (Nationalities Or Religious/Political Groups)`, `ORDINAL`, `ORG (Organizations)`, `PERCENT`, `PERSON`, `PRODUCT`, `QUANTITY`, `TIME`, `WORK_OF_ART`\n5. **Extraction**: Extraction of items to return for CRF mode. This option appears only when Method is set to `CRF`. Initially all available options will be chosen as default.\n + Abailable Options: `ART (Artifact)`, `EVE (Event)`, `GEO (Geographical Entities)`, `GPE (Geo-Political Entities)`, `NAT (Natural Phenomenon)`, `ORG (Organizations)`, `PER (Person)`, `TIM (Time)`\n6. **Column Name Prefix**: Prefix for new column names.\n\n\n### Python\n#### USAGE\n\n```\nner_eng(table = , input_cols = , method = , ne_extraction_nltk = , ne_extraction_spacy = , ne_extraction_crf = , new_col_prefix = )\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n#### OUTPUT\n1. **out_table**: (Table) Table including found named entities with their tags.\n#### PARAMETER\n1. **input_cols***: String column names to apply the named entity recognition. Available input type is string only.\n\t* Type: *list[str]*\n2. **method**: Method for Named Entity Recognition.\n\t* Type: *str*\n\t* Default / Range: nltk ( nltk | spacy | crf )\n3. **ne_extraction_nltk**: Extraction of items to return for NLTK mode. This option appears only when method='nltk'. Initially all available options will be chosen as default.\n\t* Type: *str*\n\t* Default / Range: FACILITY ( FACILITYGPE | GPEGSP | GSPLOCATION | LOCATIONORGANIZATION | ORGANIZATIONPERSON | PERSON )\n4. **ne_extraction_spacy**: Extraction of items to return for Spacy mode. This option appears only when method='spacy'. Initially all available options will be chosen as default.\n\t* Type: *str*\n\t* Default / Range: CARDINAL ( CARDINALDATE | DATEEVENT | EVENTFAC | FACGPE | GPELANGUAGE | LANGUAGELAW | LAWLOC | LOCMONEY | MONEYNORP | NORPORDINAL | ORDINALORG | ORGPERCENT | PERCENTPERSON | PERSONPRODUCT | PRODUCTQUANTITY | QUANTITYTIME | TIMEWORK_OF_ART | WORK_OF_ART )\n5. **ne_extraction_crf**: Extraction of items to return for CRF mode. This option appears only when method='crf'. Initially all available options will be chosen as default.\n\t* Type: *str*\n\t* Default / Range: ART ( ARTEVE | EVEGEO | GEOGPE | GPENAT | NATORG | ORGPER | PERTIM | TIM )\n6. **new_col_prefix**: Prefix for new column names.\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_data_tokenizer_eng data is used as input of NER (English) function. The output of this function is a Table with all numbers within the text data. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Columns***: document\n2. **Method**: NLTK\n3. **Extraction**: Facility, GPE (Geo-Political Entities), GSP (Geographical-Social-Political Entities), LOCATION, ORGANIZATION, PERSON\n4. **Column Name Prefix**: named_entity\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import ner_eng\ninput_table = inputs[0]\nresult = ner_eng(table=input_table, input_cols=['document'], method='nltk',\n ne_extraction_nltk=None, ne_extraction_spacy=None, ne_extraction_crf=None,\n new_col_prefix='named_entity')\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_data_tokenizer_eng data is used as input of NER (English) function. The output of this function is a Table with all numbers within the text data.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "NER (English).json", + "label": "NER (English)", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mptz7rnxphhrvkav", + "project_id": "p7puh97cexbjrebu", + "label": "NER (English)", + "contents": { + "mid": "mptz7rnxphhrvkav", + "type": "data", + "title": "NER (English)", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_data_tokenizer_eng.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592443927055", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "s3r5ga68xn65qegqm38ryq6y" + } + ], + "layout": { + "type": "panel", + "id": "default-1592443927055" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tny3hz39nkrdp84j" + }, + "fid": "f2xk88zeqsfdajnx" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$ner_eng", + "name": "brightics.function.textanalytics$ner_eng", + "param": { + "method": "nltk", + "ne_extraction_nltk": [ + "FACILITY", + "GPE", + "GSP", + "LOCATION", + "ORGANIZATION", + "PERSON" + ], + "ne_extraction_spacy": [ + "CARDINAL", + "DATE", + "EVENT", + "FAC", + "GPE", + "LANGUAGE", + "LAW", + "LOC", + "MONEY", + "NORP", + "ORDINAL", + "ORG", + "PERCENT", + "PERSON", + "PRODUCT", + "QUANTITY", + "TIME", + "WORK_OF_ART" + ], + "ne_extraction_crf": [ + "ART", + "EVE", + "GEO", + "GPE", + "NAT", + "ORG", + "PER", + "TIM" + ], + "input_cols": [ + "document" + ] + }, + "display": { + "label": "NER (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592443952578", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "vrpt4yywiekn8bukby2q7szm" + } + ], + "layout": { + "type": "panel", + "id": "default-1592443952578" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592443952627", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tny3hz39nkrdp84j" + }, + "outputs": { + "out_table": "tvk6dqt2vh4kqak5" + }, + "fid": "fjfepva7cv3p4xyw" + } + ], + "links": [ + { + "kid": "kz9k2y44pqut5xs9", + "sourceFid": "f2xk88zeqsfdajnx", + "targetFid": "fjfepva7cv3p4xyw" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-18T01:32:03.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-18T01:32:36.000Z", + "event_key": "2020_013236.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "ner_eng.png", + "label": "ner_eng.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_data_tokenizer_eng data is used as input of NER (English) function. The output of this function is a Table with all numbers within the text data. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Columns***: document\n2. **Method**: NLTK\n3. **Extraction**: Facility, GPE (Geo-Political Entities), GSP (Geographical-Social-Political Entities), LOCATION, ORGANIZATION, PERSON\n4. **Column Name Prefix**: named_entity\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import ner_eng\r\ninput_table = inputs[0]\r\nresult = ner_eng(table=input_table, input_cols=['document'], method='nltk',\r\n ne_extraction_nltk=None, ne_extraction_spacy=None, ne_extraction_crf=None,\r\n new_col_prefix='named_entity')\r\noutput = result['out_table']", + "description": "In this tutorial workflow, sample_data_tokenizer_eng data is used as input of NER (English) function. The output of this function is a Table with all numbers within the text data.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/ner_kor.json b/function/python/brightics/function/textanalytics/meta/ner_kor.json new file mode 100644 index 000000000..e99aa7ee7 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/ner_kor.json @@ -0,0 +1,104 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "isFunction": false, + "category": "textanalytics", + "func": "brightics.function.textanalytics$ner_kor", + "name": "brightics.function.textanalytics$ner_kor", + "context": "python", + "label": "NER (Korean)", + "description": "Extracts named entities from given text. It uses pre-trained CRF model which has been obtained by training with Korean NER Corpus.", + "tags": [ + "ner", + "named entity recognition" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "String column names to apply the named entity recognition. Available input type is string only.", + "mandatory": true, + "items": [], + "visibleOption": [], + "control": "ColumnSelector", + "columnType": [ + "String" + ], + "validation": [], + "multiple": true, + "rowCount": 5 + }, + { + "id": "ne_extraction_crf", + "label": "Extraction", + "description": "Extraction of items to return.", + "mandatory": false, + "items": [ + { + "label": "DT (Date)", + "value": "DT", + "default": true + }, + { + "label": "LC (Location)", + "value": "LC", + "default": true + }, + { + "label": "OG (Organization)", + "value": "OG", + "default": true + }, + { + "label": "PS (Person)", + "value": "PS", + "default": true + }, + { + "label": "TI (Time)", + "value": "TI", + "default": true + } + ], + "visibleOption": [], + "control": "CheckBox", + "columnType": [], + "validation": [] + }, + { + "id": "new_col_prefix", + "label": "Column Name Prefix", + "description": "Prefix for new column names", + "mandatory": false, + "items": [], + "visibleOption": [], + "globalVariable": false, + "control": "InputBox", + "columnType": [], + "validation": [], + "targetTable": [], + "type": "String", + "placeHolder": "named_entity" + } + ] + }, + "md": "" +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/regex.json b/function/python/brightics/function/textanalytics/meta/regex.json new file mode 100644 index 000000000..6c59210f4 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/regex.json @@ -0,0 +1,1051 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$regex", + "name": "brightics.function.textanalytics$regex", + "context": "python", + "label": "Regular Expression", + "description": "A regular expression (shortened as regex or regexp; also referred to as rational expression) is a sequence of characters that define a search pattern. Usually such patterns are used by string searching algorithms for \"find\" or \"find and replace\" operations on strings, or for input validation. It is a technique developed in theoretical computer science and formal language theory.\n\nYou can choose a regular expression pattern from the pre-defined patterns, or input your own custom pattern. You can also make use of user-dictionary, which contains pattern names in the first column and regular expression patterns in the second column. The user dictionary patterns will be loaded by inputting the corresponding pattern name. The user dictionary may have duplicate pattern names; corresponding patterns will be merged into a single pattern.\n\nReference\n+ https://en.wikipedia.org/wiki/Regular_expression", + "tags": [ + "regex", + "regular expression" + ], + "version": "3.6", + "inputs": { + "table": "", + "user_dict": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "user_dict": { + "type": "table", + "desc": "User dictionary containing pre-defined regular expression patterns. The first column contains pattern names which a user had set for convenience, and the second column contains regular expression patterns.", + "optional": true + }, + "out_table": { + "type": "table", + "desc": "Table including result of a desired text manipulation." + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "String column names to apply the regex function. It should be of string type.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": true, + "rowCount": 5 + }, + { + "id": "transformation_mode", + "label": "Transformation Mode", + "description": "What to do on the selected column. Extract: Find substrings matching the given pattern. Replace: The found matching substrings will be replaced to another given pattern. Remove: The found matching substrings will be removed. Split: Split the string by the given pattern. Default: Extract", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Extract", + "value": "extract", + "default": true + }, + { + "label": "Replace", + "value": "replace", + "default": false + }, + { + "label": "Remove", + "value": "remove", + "default": false + }, + { + "label": "Split", + "value": "split", + "default": false + } + ], + "columnType": [] + }, + { + "id": "find_mode", + "label": "Find Mode", + "description": "How many substrings to be transformed. All: All the matching substrings. First: Only the first matching substring. Default: All", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "All", + "value": "all", + "default": true + }, + { + "label": "First", + "value": "first", + "default": false + } + ], + "columnType": [] + }, + { + "id": "pattern", + "label": "Pattern", + "description": "Input pattern.", + "visibleOption": [], + "control": "DropDownList", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Alphabet (Latin)", + "value": "alphabet", + "default": true + }, + { + "label": "Numeric", + "value": "numeric", + "default": false + }, + { + "label": "Blank", + "value": "blank", + "default": false + }, + { + "label": "Korean character (Hangul)", + "value": "hangul", + "default": false + }, + { + "label": "Chinese character", + "value": "chinese", + "default": false + }, + { + "label": "Japanese character", + "value": "japanese", + "default": false + }, + { + "label": "Emoji", + "value": "emoji", + "default": false + }, + { + "label": "Quotation mark", + "value": "quotation_mark", + "default": false + }, + { + "label": "Special character", + "value": "special_character", + "default": false + }, + { + "label": "E-mail address", + "value": "e_mail", + "default": false + }, + { + "label": "URL", + "value": "url", + "default": false + }, + { + "label": "HTML", + "value": "html", + "default": false + }, + { + "label": "IP address (IPv4)", + "value": "ipv4", + "default": false + }, + { + "label": "RT", + "value": "rt", + "default": false + }, + { + "label": "Hashtag", + "value": "hashtag", + "default": false + }, + { + "label": "Date", + "value": "date", + "default": false + }, + { + "label": "Cell phone number", + "value": "cell_phone_number", + "default": false + }, + { + "label": "Phone number", + "value": "phone_number", + "default": false + }, + { + "label": "Zip code", + "value": "zip_code", + "default": false + }, + { + "label": "From user dictionary", + "value": "user_dictionary", + "default": false + }, + { + "label": "Custom", + "value": "custom", + "default": false + } + ], + "columnType": [] + }, + { + "id": "user_dict_pattern", + "label": "Pattern From User Dictionary", + "description": "Regex pattern from the given user dictionary. This option is available only when Pattern option is set to \"From user dictionary\".", + "visibleOption": [ + { + "id": "pattern", + "value": "user_dictionary" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "" + }, + { + "id": "custom_pattern", + "label": "Custom Pattern", + "description": "Custom regex pattern. This option is available only when Pattern option is set to \"Custom\".", + "visibleOption": [ + { + "id": "pattern", + "value": "custom" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "" + }, + { + "id": "replacement_string", + "label": "Replacement String", + "description": "String with which the source pattern will be replaced. This option is available only when Transformation Mode is set to \"Replace\".", + "visibleOption": [ + { + "id": "transformation_mode", + "value": "replace" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "" + } + ], + "summary": "This function extracts, replaces, removes, or splits strings using regex patterns." + }, + "md": { + "en": "# Regular Expression\nThis function extracts, replaces, removes, or splits strings using regex patterns.\n\n## Description\nA regular expression (shortened as regex or regexp; also referred to as rational expression) is a sequence of characters that define a search pattern. Usually such patterns are used by string searching algorithms for \"find\" or \"find and replace\" operations on strings, or for input validation. It is a technique developed in theoretical computer science and formal language theory.\n\nYou can choose a regular expression pattern from the pre-defined patterns, or input your own custom pattern. You can also make use of user-dictionary, which contains pattern names in the first column and regular expression patterns in the second column. The user dictionary patterns will be loaded by inputting the corresponding pattern name. The user dictionary may have duplicate pattern names; corresponding patterns will be merged into a single pattern.\n\nReference\n+ https://en.wikipedia.org/wiki/Regular_expression\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n2. **user_dict***: (Table) User dictionary containing pre-defined regular expression patterns. The first column contains pattern names which a user had set for convenience, and the second column contains regular expression patterns.\n#### OUTPUT\n1. **out_table**: (Table) Table including result of a desired text manipulation.\n#### PARAMETER\n1. **Input Columns***: String column names to apply the regex function. It should be of string type.\n\n2. **Transformation Mode**: What to do on the selected column.\n + Available Options: `Extract`, `Replace`, `Remove`, `Split` (Default: `Extract`)\n + `Extract`: Find substrings matching the given pattern.\n + `Replace`: The found matching substrings will be replaced to another given pattern.\n + `Remove`: The found matching substrings will be removed.\n + `Split`: Split the string by the given pattern. \n\n3. **Find Mode**: How many substrings to be transformed.\n + Available Options: `All`, `First` (Default: `All`)\n + `All`: All the matching substrings.\n + `First`: Only the first matching substring.\n\n4. **Pattern***: Input pattern.\n + Available Options: `Alphabet (Latin)`,`Numeric`, `Blank`, `Korean character (Hangul)`, `Chinese character`, `Japanese character`, `Emoji`, `Quotation mark`, `Special character`, `E-mail address`, `URL`, `HTML`, `IP address (IPv4)`, `RT`, `Hashtag`, `Date`, `Cell phone number`, `Phone number`, `Zip code`, `From user dictionary`, `Custom`\n\n5. **Pattern From User Dictionary**: Regex pattern from the given user dictionary. This option is available only when Pattern option is set to \"From user dictionary\".\n\n6. **Custom Pattern**: Custom regex pattern. This option is available only when Pattern option is set to \"Custom\".\n\n7. **Replacement String**: String with which the source pattern will be replaced. This option is available only when Transformation Mode is set to \"Replace\".\n\n\n### Python\n#### USAGE\n\n```\nregex(table, user_dict, input_cols, transformation_mode=, find_mode=, pattern=, user_dict_pattern=, custom_pattern=, replacement_string=)\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n2. **user_dict***: (Table) User dictionary containing pre-defined regular expression patterns. The first column contains pattern names which a user had set for convenience, and the second column contains regular expression patterns.\n#### OUTPUT\n1. **out_table**: (Table) Table including result of a desired text manipulation.\n#### PARAMETER\n1. **input_cols***: String column names to apply the regex function. It should be of string type.\n\t* Type: *list[str]*\n2. **transformation_mode**: What to do on the selected column. Extract: Find substrings matching the given pattern. Replace: The found matching substrings will be replaced to another given pattern. Remove: The found matching substrings will be removed. Split: Split the string by the given pattern. Default: Extract\n\t* Type: *str*\n\t* Default / Range: extract ( extract | replace | remove | split )\n3. **find_mode**: How many substrings to be transformed. All: All the matching substrings. First: Only the first matching substring. Default: All\n\t* Type: *str*\n\t* Default / Range: all ( all | first )\n4. **pattern**: Input pattern.\n\t* Type: *str*\n\t* Default / Range: alphabet ( alphabet | numeric | blank | hangul | chinese | japanese | emoji | quotation_mark | special_character | e_mail | url | html | ipv4 | rt | hashtag | date | cell_phone_number | phone_number | zip_code | user_dictionary | custom )\n5. **user_dict_pattern**: Regex pattern from the given user dictionary. This option is available only when Pattern option is set to \"From user dictionary\".\n\t* Type: *str*\n6. **custom_pattern**: Custom regex pattern. This option is available only when Pattern option is set to \"Custom\".\n\t* Type: *str*\n7. **replacement_string**: String with which the source pattern will be replaced. This option is available only when Transformation Mode is set to \"Replace\".\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, text_eng data is used as input of Regular Expression function. The output of this function is a Table with all numbers within the text data. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Columns***: text\n2. **Transformation Mode**: Extract\n3. **Find Mode**: All\n4. **Pattern**: Numeric\n5. **Pattern From User Dictionary**: \n6. **Custom Pattern**: \n7. **Replacement String**: \n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import regex\ninput_table = inputs[0]\nresult = regex(table=input_table, input_cols=['text'],\n transformation_mode='extract', find_mode='all', pattern='numeric',\n user_dict_pattern='', custom_pattern='', replacement_string='', user_dict=None)\noutput = result['out_table']\n```\nIn this tutorial workflow, text_eng data is used as input of Regular Expression function. The output of this function is a Table with all numbers within the text data.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "Regular Expression.json", + "label": "Regular Expression", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mbpcnp347c2rwx28", + "project_id": "p7puh97cexbjrebu", + "label": "Regular Expression", + "contents": { + "mid": "mbpcnp347c2rwx28", + "type": "data", + "title": "Regular Expression", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_text_eng.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592375862952", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "txp76fy7vmp8v74e" + }, + "fid": "fgdd9yej2jmsvtc2" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$regex", + "name": "brightics.function.textanalytics$regex", + "param": { + "transformation_mode": "extract", + "find_mode": "all", + "input_cols": [ + "text" + ], + "pattern": "numeric" + }, + "display": { + "label": "Regular Expression", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592376629303", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "e8vnafz6sc4p62qphtvkq55w" + } + ], + "layout": { + "type": "panel", + "id": "default-1592376629303" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592376629367", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "user_dict": { + "type": "table", + "optional": true + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "txp76fy7vmp8v74e", + "user_dict": "" + }, + "outputs": { + "out_table": "tmqcesgm49szratg" + }, + "fid": "feesccm63pxr5cqp" + } + ], + "links": [ + { + "kid": "kc9s7bemt9t559xt", + "sourceFid": "fgdd9yej2jmsvtc2", + "targetFid": "feesccm63pxr5cqp" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-17T06:35:02.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-17T06:50:42.000Z", + "event_key": "2020_065042.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "regex.png", + "label": "regex.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, text_eng data is used as input of Regular Expression function. The output of this function is a Table with all numbers within the text data. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Columns***: text\n2. **Transformation Mode**: Extract\n3. **Find Mode**: All\n4. **Pattern**: Numeric\n5. **Pattern From User Dictionary**: \n6. **Custom Pattern**: \n7. **Replacement String**: \n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import regex\r\ninput_table = inputs[0]\r\nresult = regex(table=input_table, input_cols=['text'],\r\n transformation_mode='extract', find_mode='all', pattern='numeric',\r\n user_dict_pattern='', custom_pattern='', replacement_string='', user_dict=None)\r\noutput = result['out_table']", + "description": "In this tutorial workflow, text_eng data is used as input of Regular Expression function. The output of this function is a Table with all numbers within the text data. The parameter settings used in the function are shown below.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/search2.json b/function/python/brightics/function/textanalytics/meta/search2.json index 1ebfc776c..8f34a69e5 100644 --- a/function/python/brightics/function/textanalytics/meta/search2.json +++ b/function/python/brightics/function/textanalytics/meta/search2.json @@ -53,19 +53,6 @@ ], "multiple": true }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.", - "visibleOption": [], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "globalVariable": false, - "columnType": [], - "multiple": true - }, { "id": "bool_search", "label": "Boolean Search", @@ -132,7 +119,7 @@ ], "summary": "This funcion search text in a document." }, - "md": "# Text Search\nThis funcion search text in a document.\n\n## Description\nText Search is to search text in a document. Keywords and the elements of Keyword Dictionary are the search text. If a search text is contained in the first column of Synonym Dictionary, then Text Search uses the synonyms as the original keyword.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table. It must contain at least one _str_ type column as input.\n2. **keyword_dict**: (Table) Keyword dictionary. The first column of the Table must be search keywords.\n3. **synonym_dict**: (Table) Synonym dictionary. The first column of the Table must be keywords and the second column must be synonyms of keywords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain search result. The setting value of `How to Handle Missing Data` parameter determines whether or not rows that do not include search keywords are deleted.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only String type columns are possible.\n\n2. **Hold Columns**: Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.\n\n3. **Boolean Search**: A type of search allowing users to combine keywords with operators such as And and Or.\n - Available Options: `Or`, `And`\n\n4. **Keywords**: Additional search keywords.\n\n5. **How to Handle Missing Data**: How to handle missing data.\n - Available Options: `Not to remove`, `To remove rows with all values missing`, `To remove rows with any values missing`\n\n\n### Python\n#### USAGE\n\n```\nsearch2(table, input_cols, hold_cols=None, bool_search=\"or\", keyword_dict=None, keywords=None, synonym_dict=None, remove_na=\"no\")\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table. It must contain at least one _str_ type column as input.\n2. **keyword_dict**: (Table) Keyword dictionary. The first column of the Table must be search keywords.\n3. **synonym_dict**: (Table) Synonym dictionary. The first column of the Table must be keywords and the second column must be synonyms of keywords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain search result. The setting value of `remove_na` parameter determines whether or not rows that do not include search keywords are deleted.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only String type columns are possible.\n\t* Type: *list[str]*\n2. **hold_cols**: Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.\n\t* Type: *list[str]*\n3. **bool_search**: A type of search allowing users to combine keywords with operators such as And and Or.\n\t* Type: *str*\n\t* Default / Range: or ( or | and )\n4. **keywords**: Additional search keywords.\n\t* Type: *list[str]*\n5. **remove_na**: How to handle missing data.\n\t* Type: *str*\n\t* Default / Range: no ( no | all | any )\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng and User_dict data are used as input of Text Search function. This function search keywords from input text data then, return search result Table data.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : document\n2. **Hold Columns** : None\n3. **Boolean Search** : Or\n4. **Keywords** : None\n5. **How to Handle Missing Data** : Not to remove\n\n\n### Python\n```\nfrom brightics.function.textanalytics import search2\ninput_table = inputs[0]\nkeyword_dict = inputs[1]\nsynonym_dict = inputs[2]\nresult = search2(table=input_table,\n keyword_dict=keyword_dict,\n synonym_dict=synonym_dict,\n input_cols=['document'],\n hold_cols=None,\n bool_search='or',\n keywords=None,\n remove_na='no')\noutput = result['out_table']\n```\n\n
In this python script, simple text data, sample_data_tokenizer_eng and User_dict data are used as input of search2 function. This function search keywords from input text data then, return search result Table data.\n", + "md": "# Text Search\nThis funcion search text in a document.\n\n## Description\nText Search is to search text in a document. Keywords and the elements of Keyword Dictionary are the search text. If a search text is contained in the first column of Synonym Dictionary, then Text Search uses the synonyms as the original keyword.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table. It must contain at least one _str_ type column as input.\n2. **keyword_dict**: (Table) Keyword dictionary. The first column of the Table must be search keywords.\n3. **synonym_dict**: (Table) Synonym dictionary. The first column of the Table must be keywords and the second column must be synonyms of keywords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain search result. The setting value of `How to Handle Missing Data` parameter determines whether or not rows that do not include search keywords are deleted.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only String type columns are possible.\n\n2. **Boolean Search**: A type of search allowing users to combine keywords with operators such as And and Or.\n - Available Options: `Or`, `And`\n\n3. **Keywords**: Additional search keywords.\n\n4. **How to Handle Missing Data**: How to handle missing data.\n - Available Options: `Not to remove`, `To remove rows with all values missing`, `To remove rows with any values missing`\n\n\n### Python\n#### USAGE\n\n```\nsearch2(table, input_cols, bool_search=\"or\", keyword_dict=None, keywords=None, synonym_dict=None, remove_na=\"no\")\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table. It must contain at least one _str_ type column as input.\n2. **keyword_dict**: (Table) Keyword dictionary. The first column of the Table must be search keywords.\n3. **synonym_dict**: (Table) Synonym dictionary. The first column of the Table must be keywords and the second column must be synonyms of keywords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain search result. The setting value of `remove_na` parameter determines whether or not rows that do not include search keywords are deleted.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only String type columns are possible.\n\t* Type: *list[str]*\n2. **bool_search**: A type of search allowing users to combine keywords with operators such as And and Or.\n\t* Type: *str*\n\t* Default / Range: or ( or | and )\n3. **keywords**: Additional search keywords.\n\t* Type: *list[str]*\n4. **remove_na**: How to handle missing data.\n\t* Type: *str*\n\t* Default / Range: no ( no | all | any )\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng and sample_data_ts_user_dict data are used as input of Text Search function. This function search keywords from input text data then, return search result Table data.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : document\n2. **Boolean Search** : Or\n3. **Keywords** : None\n4. **How to Handle Missing Data** : Not to remove\n\n\n### Python\n```\nfrom brightics.function.textanalytics import search2\ninput_table = inputs[0]\nkeyword_dict = inputs[1]\nsynonym_dict = inputs[2]\nresult = search2(table=input_table,\n keyword_dict=keyword_dict,\n synonym_dict=synonym_dict,\n input_cols=['document'],\n bool_search='or',\n keywords=None,\n remove_na='no')\noutput = result['out_table']\n```\n\n
In this python script, simple text data, sample_data_tokenizer_eng and sample_data_ts_user_dict data are used as input of search2 function. This function search keywords from input text data then, return search result Table data.\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$search2.json", @@ -381,7 +368,7 @@ "name": "brightics.function.io$load", "param": { "partial_path": [ - "/brightics@samsung.com/upload/User_dict.csv" + "/brightics@samsung.com/upload/sample_ts_user_dict.csv" ] }, "display": { @@ -1094,7 +1081,7 @@ "name": "brightics.function.io$load", "param": { "partial_path": [ - "/brightics@samsung.com/upload/User_dict.csv" + "/brightics@samsung.com/upload/sample_ts_user_dict.csv" ] }, "display": { diff --git a/function/python/brightics/function/textanalytics/meta/split_sentences.json b/function/python/brightics/function/textanalytics/meta/split_sentences.json index accd0b170..27d555a29 100644 --- a/function/python/brightics/function/textanalytics/meta/split_sentences.json +++ b/function/python/brightics/function/textanalytics/meta/split_sentences.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "textanalytics", "func": "brightics.function.textanalytics$split_sentences19300", "name": "brightics.function.textanalytics$split_sentences", diff --git a/function/python/brightics/function/textanalytics/meta/split_sentences2.json b/function/python/brightics/function/textanalytics/meta/split_sentences2.json new file mode 100644 index 000000000..fb5bb4a17 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/split_sentences2.json @@ -0,0 +1,922 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$split_sentences2", + "name": "brightics.function.textanalytics$split_sentences2", + "context": "python", + "label": "Split Sentences", + "description": "To split sentences is a basic preprocessing method for text analysis.", + "tags": [], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Text data in a Table.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Text data table with all sentences split." + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": "Column to select as input. Only String type column are possible.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [], + "multiple": false + }, + { + "id": "language", + "label": "Language", + "description": "Language selection option. Korean and English are available", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Korean", + "value": "kor", + "default": true + }, + { + "label": "English", + "value": "eng", + "default": false + }, + { + "label": "Mixed (Korean and English)", + "value": "mixed", + "default": false + } + ], + "columnType": [], + "targetTable": [] + }, + { + "id": "doc_id_col_name", + "label": "Document ID Column Name", + "description": "Document ID column name to be appeared in the output", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "doc_id" + }, + { + "id": "sentence_id_col_name", + "label": "Sentence ID Column Name", + "description": "Sentence ID column name to be appeared in the output", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "sentence_id" + }, + { + "id": "sentence_col_name", + "label": "Sentence Column Name", + "description": "Sentence column name to be appeared in the output", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "sentence" + }, + { + "id": "duplicate_original", + "label": "Duplicate original texts", + "description": "If True, the original text will be appearing in all the rows. Otherwise, the original text will be shown only for the first row for each text.", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": false + } + ], + "summary": "This function splits text into sentences." + }, + "md": { + "en": "# Split Sentences\nThis function splits text into sentences.\n\n## Description\nTo split sentences is a basic preprocessing method for text analysis.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Text data table with all sentences split.\n#### PARAMETER\n1. **Input Column***: Column to select as input. Only String type column are possible.\n\n2. **Language**: Language selection option.\n + Available Options: `Korean`, `English`, `Mixed (Korean and English)`\n\n3. **Document ID Column Name**: Document ID column name to be appeared in the output\n\n4. **Sentence ID Column Name**: Sentence ID column name to be appeared in the output\n\n5. **Sentence Column Name**: Sentence column name to be appeared in the output\n\n6. **Duplicate original texts**: If True, the original text will be appearing in all the rows. Otherwise, the original text will be shown only for the first row for each text.\n\n\t* Default value: false \n\n### Python\n#### USAGE\n\n```\nsplit_sentences2(table = , input_col = , language = , doc_id_col_name = , sentence_id_col_name = , sentence_col_name = , duplicate_original = false)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Text data table with all sentences split.\n#### PARAMETER\n1. **input_col***: Column to select as input. Only String type column are possible.\n\t* Type: *str*\n2. **language**: Language selection option. Korean and English are available\n\t* Type: *str*\n\t* Default / Range: kor ( kor | eng | mixed )\n3. **doc_id_col_name**: Document ID column name to be appeared in the output\n\t* Type: *str*\n4. **sentence_id_col_name**: Sentence ID column name to be appeared in the output\n\t* Type: *str*\n5. **sentence_col_name**: Sentence column name to be appeared in the output\n\t* Type: *str*\n6. **duplicate_original**: If True, the original text will be appearing in all the rows. Otherwise, the original text will be shown only for the first row for each text.\n\t* Type: *bool*\n\t* Default value: false \n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_data_tokenizer_eng data is used as input of Split Sentences function. The output of this function is a Table with splited sentences data. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: document\n2. **Language**: English\n3. **Document ID Column Name**: doc_id\n4. **Sentence ID Column Name**: sentence_id\n5. **Sentence Column Name**: sentence\n6. **Duplicate original texts**: false\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import split_sentences2\ninput_table = inputs[0]\nresult = split_sentences2(table=input_table, input_col='document', language='eng',\n doc_id_col_name='doc_id', sentence_id_col_name='sentence_id',\n sentence_col_name='sentence', duplicate_original=False)\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_data_tokenizer_eng data is used as input of Split Sentences function. The output of this function is a Table with splited sentences data.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "Split Sentences 2.json", + "label": "Split Sentences", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mj3zy7ca22rjzhv6", + "project_id": "p7puh97cexbjrebu", + "label": "Split Sentences", + "contents": { + "mid": "mj3zy7ca22rjzhv6", + "type": "data", + "title": "Split Sentences", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_data_tokenizer_eng.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585022815084", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "qich2jeere7taynwwcs8udmq" + } + ], + "layout": { + "type": "panel", + "id": "default-1585022815084" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "ten7m45wmje23r29" + }, + "fid": "f57q94ssne5ergxu" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$split_sentences2", + "name": "brightics.function.textanalytics$split_sentences2", + "param": { + "language": "eng", + "duplicate_original": false, + "input_col": "document", + "doc_id_col_name": "" + }, + "display": { + "label": "Split Sentences", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592457215526", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "czctg8vbrrhw5bkdkzgqzmh9" + } + ], + "layout": { + "type": "panel", + "id": "default-1592457215526" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592457215979", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "9dc9k59ba64htdtzinyysm8h" + } + ], + "layout": { + "type": "panel", + "id": "default-1592457215979" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "ten7m45wmje23r29" + }, + "outputs": { + "out_table": "tcdnu9fkdsgry6nu" + }, + "fid": "f6kesxtxh7xxtcwx" + } + ], + "links": [ + { + "kid": "kdtpd2c2hhp6nzy6", + "sourceFid": "f57q94ssne5ergxu", + "targetFid": "f6kesxtxh7xxtcwx" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "

Split Sentences sample model.

", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-18T05:13:07.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-18T05:15:55.000Z", + "event_key": "2020_051555.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "split_sentences2.png", + "label": "split_sentences2.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Split Sentences function. The output of this function is a Table with splited sentences data. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Column***: document\n2. **Language**: English\n3. **Document ID Column Name**: doc_id\n4. **Sentence ID Column Name**: sentence_id\n5. **Sentence Column Name**: sentence\n6. **Duplicate original texts**: false\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import split_sentences2\r\ninput_table = inputs[0]\r\nresult = split_sentences2(table=input_table, input_col='document', language='eng',\r\n doc_id_col_name='doc_id', sentence_id_col_name='sentence_id',\r\n sentence_col_name='sentence', duplicate_original=False)\r\noutput = result['out_table']", + "description": "In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Split Sentences function. The output of this function is a Table with splited sentences data.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/stopwords_remover_user_dict.json b/function/python/brightics/function/textanalytics/meta/stopwords_remover_user_dict.json index 3b84bcf99..744e045ef 100644 --- a/function/python/brightics/function/textanalytics/meta/stopwords_remover_user_dict.json +++ b/function/python/brightics/function/textanalytics/meta/stopwords_remover_user_dict.json @@ -42,19 +42,9 @@ "validation": [], "mandatory": true, "items": [], - "columnType": [], - "multiple": true - }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.", - "visibleOption": [], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "columnType": [], + "columnType": [ + "String[]" + ], "multiple": true }, { @@ -98,7 +88,7 @@ ], "summary": "This function removes stopwords from tokenized text data." }, - "md": "# Stopwords Remover\nThis function removes stopwords from tokenized text data.\n\n## Description\nIn order to screen only meaningful word tokens from the text data, it is necessary to remove the meaningless word tokens. The word meaningless here refers to words that appear frequently in sentences but are not very helpful in analyzing the sentences. For example, words such as I, my, me, over, and suffix often appear in sentences, but contribute little to actual semantic analysis. These words are called stopwords.\n\nReference: \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined stopword dictionary. The first column of the Table must be stopwords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and stopwords-removed text data.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only List of String type columns are possible.\n\n2. **Hold Columns**: Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.\n\n3. **Default Dictionary**: Whether to use default dictionary.\n - Available Options : `True`, `False`\n\n4. **Stop Words**: User list of stopwords.\n\n5. **Prefix**: Prefix for new column name.\n\n\n### Python\n#### USAGE\n\n```\nstopwords_remover_user_dict(table, input_cols, hold_cols=None, default_dict=False, stop_words=None, prefix='stopwords', user_dict=None)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined stopword dictionary. The first column of the Table must be stopwords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and stopwords-removed text data.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only List of String type columns are possible.\n\t* Type: *list[str]*\n2. **hold_cols**: Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.\n\t* Type: *list[str]*\n3. **default_dict**: Whether to use default dictionary.\n\t* Type: *bool*\n\t* Default value: False \n4. **stop_words**: User list of stopwords.\n\t* Type: *list[str]*\n5. **prefix**: Prefix for new column name.\n\t* Type: *str*\n\t* Default / Range: 'stopwords'\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, tokenized sample_data_tokenizer_eng data is used as input of Synonym Converter function. The ouput of this function is a Table that has input Table's columns and stopwords-removed text data column.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : tokenized_text\n2. **Hold Columns** : None\n3. **Default Dictionary** : True\n4. **Stop Words** : like, monday\n5. **Prefix** : stopwords\n\n\n### Python\n```\nfrom brightics.function.textanalytics import stopwords_remover_user_dict\ninput_table = inputs[0]\nuser_dict = inputs[1]\nresult = stopwords_remover_user_dict(table=input_table,\n user_dict=user_dict,\n input_cols=['tokenized_text'],\n hold_cols=None,\n default_dict=True,\n stop_words=['like', 'monday'],\n prefix='stopwords')\noutput = result['out_table']\n```\n\n
In this python script, tokenized sample_data_tokenizer_eng data is used as input of synonym_converter_user_dict function. The ouput of this function is a Table that has input Table's columns and stopwords-removed text data column.\n\n", + "md": "# Stopwords Remover\nThis function removes stopwords from tokenized text data.\n\n## Description\nIn order to screen only meaningful word tokens from the text data, it is necessary to remove the meaningless word tokens. The word meaningless here refers to words that appear frequently in sentences but are not very helpful in analyzing the sentences. For example, words such as I, my, me, over, and suffix often appear in sentences, but contribute little to actual semantic analysis. These words are called stopwords.\n\nReference: \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined stopword dictionary. The first column of the Table must be stopwords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and stopwords-removed text data.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only List of String type columns are possible.\n\n2. **Default Dictionary**: Whether to use default dictionary.\n - Available Options : `True`, `False`\n\n3. **Stop Words**: User list of stopwords.\n\n4. **Prefix**: Prefix for new column name.\n\n\n### Python\n#### USAGE\n\n```\nstopwords_remover_user_dict(table, input_cols, default_dict=False, stop_words=None, prefix='stopwords', user_dict=None)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined stopword dictionary. The first column of the Table must be stopwords.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and stopwords-removed text data.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only List of String type columns are possible.\n\t* Type: *list[str]*\n2. **default_dict**: Whether to use default dictionary.\n\t* Type: *bool*\n\t* Default value: False \n3. **stop_words**: User list of stopwords.\n\t* Type: *list[str]*\n4. **prefix**: Prefix for new column name.\n\t* Type: *str*\n\t* Default / Range: 'stopwords'\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, tokenized sample_data_tokenizer_eng data is used as input of Synonym Converter function. The ouput of this function is a Table that has input Table's columns and stopwords-removed text data column.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : tokenized_text\n2. **Default Dictionary** : True\n3. **Stop Words** : like, monday\n4. **Prefix** : stopwords\n\n\n### Python\n```\nfrom brightics.function.textanalytics import stopwords_remover_user_dict\ninput_table = inputs[0]\nuser_dict = inputs[1]\nresult = stopwords_remover_user_dict(table=input_table,\n user_dict=user_dict,\n input_cols=['tokenized_text'],\n default_dict=True,\n stop_words=['like', 'monday'],\n prefix='stopwords')\noutput = result['out_table']\n```\n\n
In this python script, tokenized sample_data_tokenizer_eng data is used as input of synonym_converter_user_dict function. The ouput of this function is a Table that has input Table's columns and stopwords-removed text data column.\n\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$stopwords_remover_user_dict.json", @@ -826,8 +816,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/synonym_converter_user_dict.json b/function/python/brightics/function/textanalytics/meta/synonym_converter_user_dict.json index efecec963..e22f9536c 100644 --- a/function/python/brightics/function/textanalytics/meta/synonym_converter_user_dict.json +++ b/function/python/brightics/function/textanalytics/meta/synonym_converter_user_dict.json @@ -42,19 +42,9 @@ "validation": [], "mandatory": true, "items": [], - "columnType": [], - "multiple": true - }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.", - "visibleOption": [], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "columnType": [], + "columnType": [ + "String[]" + ], "multiple": true }, { @@ -88,7 +78,7 @@ ], "summary": "This function converts similar words into a representative word." }, - "md": "# Synonym Converter\nThis function converts similar words into a representative word.\n\n## Description\nIn text analysis, text data can be processed more effectively by changing synonyms into representative words. This reduces the size of word corpus, allowing data to ve processed using less memory. Also, This also increases the number of sentence(or document) samples for a word.\n\nThe first column of `user_dict` must be representative words and the second column must be synonyms.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined synonym dictionary. The first column of the Table must be representative words and the second column must be synonyms.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and synonym removed columns.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only List of words type columns are possible.\n\n2. **Hold Columns**: Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.\n\n3. **Synonym List**: User list of synonyms. To change 'apple', 'banana' and 'carrot' to 'fruits', enter : fruits, apple, banana, carrot\n\n4. **Prefix**: Prefix for new column name.\n\n\n### Python\n#### USAGE\n\n```\nsynonym_converter(table, input_cols, hold_cols=None, default_dict=False, synonym_list=None, prefix='synonym', user_dict=None)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined synonym dictionary. The first column of the Table must be representative words and the second column must be synonyms.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and synonym removed columns.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only List of words type columns are possible.\n\t* Type: *list[str]*\n2. **hold_cols**: Result table includes hold columns in input table as well as the result of the operation. If None, all columns are included.\n\t* Type: *list[str]*\n3. **synonym_list**: User list of synonyms. To change 'apple', 'banana' and 'carrot' to 'fruits', enter : fruits, apple, banana, carrot\n\t* Type: *list[str]*\n4. **prefix**: Prefix for new column name.\n\t* Type: *str*\n\t* Default / Range: 'synonym'\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data and synonym_dict Table that is created by Create Table function are used as input of Synonym Converter function.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : tokenized_text\n2. **Hold Columns** : None\n3. **Synonym List** : None\n4. **Prefix** : synonym\n\n\n### Python\n```\nfrom brightics.function.textanalytics import synonym_converter_user_dict\ninput_table = inputs[0]\nuser_dict = inputs[1]\nresult = synonym_converter_user_dict(table=input_table,\n user_dict=user_dict,\n input_cols=['tokenized_text'],\n hold_cols=None,\n synonym_list=None,\n prefix='synonym')\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data and synonym_dict Table that is created by Create Table function are used as input of synonym_converter_user_dict.\n\n", + "md": "# Synonym Converter\nThis function converts similar words into a representative word.\n\n## Description\nIn text analysis, text data can be processed more effectively by changing synonyms into representative words. This reduces the size of word corpus, allowing data to ve processed using less memory. Also, This also increases the number of sentence(or document) samples for a word.\n\nThe first column of `user_dict` must be representative words and the second column must be synonyms.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined synonym dictionary. The first column of the Table must be representative words and the second column must be synonyms.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and synonym removed columns.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only List of words type columns are possible.\n\n2. **Synonym List**: User list of synonyms. To change 'apple', 'banana' and 'carrot' to 'fruits', enter : fruits, apple, banana, carrot\n\n3. **Prefix**: Prefix for new column name.\n\n\n### Python\n#### USAGE\n\n```\nsynonym_converter(table, input_cols, default_dict=False, synonym_list=None, prefix='synonym', user_dict=None)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n2. **user_dict**: (Table) User defined synonym dictionary. The first column of the Table must be representative words and the second column must be synonyms.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and synonym removed columns.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only List of words type columns are possible.\n\t* Type: *list[str]*\n2. **synonym_list**: User list of synonyms. To change 'apple', 'banana' and 'carrot' to 'fruits', enter : fruits, apple, banana, carrot\n\t* Type: *list[str]*\n3. **prefix**: Prefix for new column name.\n\t* Type: *str*\n\t* Default / Range: 'synonym'\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data and synonym_dict Table that is created by Create Table function are used as input of Synonym Converter function.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : tokenized_text\n2. **Synonym List** : None\n3. **Prefix** : synonym\n\n\n### Python\n```\nfrom brightics.function.textanalytics import synonym_converter_user_dict\ninput_table = inputs[0]\nuser_dict = inputs[1]\nresult = synonym_converter_user_dict(table=input_table,\n user_dict=user_dict,\n input_cols=['tokenized_text'],\n synonym_list=None,\n prefix='synonym')\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data and synonym_dict Table that is created by Create Table function are used as input of synonym_converter_user_dict.\n\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$synonym_converter_user_dict.json", @@ -815,8 +805,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/term_term_mtx.json b/function/python/brightics/function/textanalytics/meta/term_term_mtx.json index 349c79ae7..779eb8481 100644 --- a/function/python/brightics/function/textanalytics/meta/term_term_mtx.json +++ b/function/python/brightics/function/textanalytics/meta/term_term_mtx.json @@ -334,8 +334,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ @@ -1074,482 +1074,6 @@ }, "fid": "f397a9hvz863mra5" }, - { - "persist-mode": "auto", - "func": "pythonScript", - "name": "PythonScript", - "inputs": { - "inputs": [], - "models": [], - "images": [] - }, - "outputs": { - "output": "tu38s7jvqsyw2zfx" - }, - "param": { - "script": "#\n# NOTE : Enter \"Out Table Alias\"\n# ex)\n# inputDataframe = inputs[0]\n# result = inputDataframe\n#\nfrom brightics.function.textanalytics import term_term_mtx\ninput_table = inputs[1]\ninput_model = models[0]\nresult = term_term_mtx(table=input_table, model=input_model, input_col='tokenized_description2', result_type='dense')\noutput = result['out_table']" - }, - "display": { - "label": "Python Script", - "diagram": { - "position": { - "x": 770, - "y": 220 - } - }, - "sheet": { - "in": { - "partial": [ - { - "panel": [ - { - "id": "default-1583990471381", - "chartOption": { - "colorSet": [ - "#FD026C", - "#4682B8", - "#A5D22D", - "#F5CC0A", - "#FE8C01", - "#6B9494", - "#B97C46", - "#84ACD0", - "#C2E173", - "#F9DD5B", - "#FE569D", - "#FEB356", - "#9CB8B8", - "#D0A884", - "#2E6072", - "#6D8C1E", - "#A48806", - "#A90148", - "#A95E01", - "#476363", - "#7B532F" - ], - "title": { - "show": true, - "text": "", - "subtext": "", - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "subtextStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "left": "50%", - "top": "0px" - }, - "toolbar": { - "show": false, - "right": "8px", - "top": "8px", - "orientation": "horizontal", - "menu": {} - }, - "chart": { - "border": "1px #000000 none", - "background": "rgba(255, 255, 255,1)", - "animationDuration": 1000, - "type": "table" - }, - "tooltip": { - "triggerOn": "mousemove" - }, - "grid": { - "left": "10%", - "right": "10%", - "top": "60px", - "bottom": "60px", - "width": "auto", - "height": "auto" - }, - "xAxis": [ - { - "selected": [], - "title": { - "show": true, - "text": "", - "subtext": "", - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "subtextStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "left": "50%", - "bottom": "5px" - }, - "axisTick": { - "show": true - }, - "axisLine": { - "onZero": false - }, - "scale": true, - "axisLabel": { - "show": true, - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - } - }, - "zlevel": 1 - } - ], - "yAxis": [ - { - "selected": [], - "title": { - "show": true, - "text": "", - "subtext": "", - "rotate": -90, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "subtextStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "left": "8px", - "top": "50%" - }, - "axisTick": { - "show": true - }, - "axisLine": { - "onZero": false - }, - "scale": true, - "axisLabel": { - "show": true, - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - } - }, - "zlevel": 1 - } - ], - "colorBy": [ - { - "selected": [] - } - ], - "legend": { - "show": true, - "orientation": "horizontal", - "left": "50%", - "right": "auto", - "top": "10px", - "bottom": "auto", - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "", - "fontStyle": "normal", - "fontWeight": "normal", - "fontDecoration": "none" - } - }, - "noDataMessage": "", - "plotOptions": { - "table": { - "formatter": [] - }, - "map": { - "geoData": {} - } - }, - "source": { - "dataType": "lazy", - "lazyData": [] - }, - "guide": { - "message": "Set data options using Chart Setting Button." - } - }, - "dataSource": { - "selectable": true - }, - "style": {}, - "group": "6cu2w9v6juamba4qjjazg3xi" - } - ], - "layout": { - "type": "panel", - "id": "default-1583990471381" - } - } - ], - "full": [ - { - "panel": [], - "layout": {} - } - ] - }, - "out": { - "partial": [ - { - "panel": [ - { - "id": "default-1583990471656", - "chartOption": { - "colorSet": [ - "#FD026C", - "#4682B8", - "#A5D22D", - "#F5CC0A", - "#FE8C01", - "#6B9494", - "#B97C46", - "#84ACD0", - "#C2E173", - "#F9DD5B", - "#FE569D", - "#FEB356", - "#9CB8B8", - "#D0A884", - "#2E6072", - "#6D8C1E", - "#A48806", - "#A90148", - "#A95E01", - "#476363", - "#7B532F" - ], - "title": { - "show": true, - "text": "", - "subtext": "", - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "subtextStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "left": "50%", - "top": "0px" - }, - "toolbar": { - "show": false, - "right": "8px", - "top": "8px", - "orientation": "horizontal", - "menu": {} - }, - "chart": { - "border": "1px #000000 none", - "background": "rgba(255, 255, 255,1)", - "animationDuration": 1000, - "type": "table" - }, - "tooltip": { - "triggerOn": "mousemove" - }, - "grid": { - "left": "10%", - "right": "10%", - "top": "60px", - "bottom": "60px", - "width": "auto", - "height": "auto" - }, - "xAxis": [ - { - "selected": [], - "title": { - "show": true, - "text": "", - "subtext": "", - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "subtextStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "left": "50%", - "bottom": "5px" - }, - "axisTick": { - "show": true - }, - "axisLine": { - "onZero": false - }, - "scale": true, - "axisLabel": { - "show": true, - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - } - }, - "zlevel": 1 - } - ], - "yAxis": [ - { - "selected": [], - "title": { - "show": true, - "text": "", - "subtext": "", - "rotate": -90, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "subtextStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - }, - "left": "8px", - "top": "50%" - }, - "axisTick": { - "show": true - }, - "axisLine": { - "onZero": false - }, - "scale": true, - "axisLabel": { - "show": true, - "rotate": 0, - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "" - } - }, - "zlevel": 1 - } - ], - "colorBy": [ - { - "selected": [] - } - ], - "legend": { - "show": true, - "orientation": "horizontal", - "left": "50%", - "right": "auto", - "top": "10px", - "bottom": "auto", - "textStyle": { - "color": "#000000", - "fontSize": 12, - "fontFamily": "", - "fontStyle": "normal", - "fontWeight": "normal", - "fontDecoration": "none" - } - }, - "noDataMessage": "", - "plotOptions": { - "table": { - "formatter": [] - }, - "map": { - "geoData": {} - } - }, - "source": { - "dataType": "lazy", - "lazyData": [] - }, - "guide": { - "message": "Set data options using Chart Setting Button." - } - }, - "dataSource": { - "selectable": true - }, - "style": {}, - "group": "m276a86x2b5u33e2swvxx544" - } - ], - "layout": { - "type": "panel", - "id": "default-1583990471656" - } - } - ], - "full": [ - { - "panel": [], - "layout": {} - } - ] - } - } - }, - "version": "3.6", - "context": "python", - "meta": { - "inputs": { - "type": "table", - "range": { - "min": 1, - "max": 10 - } - }, - "models": { - "type": "model", - "range": { - "min": 1, - "max": 10 - } - }, - "images": { - "type": "image", - "range": { - "min": 1, - "max": 10 - } - }, - "output": { - "type": "table" - } - }, - "fid": "fe7u9bs7auxznj3g" - }, { "persist-mode": "auto", "func": "brightics.function.textanalytics$term_term_mtx98834", diff --git a/function/python/brightics/function/textanalytics/meta/tfidf3.json b/function/python/brightics/function/textanalytics/meta/tfidf3.json new file mode 100644 index 000000000..4051be253 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/tfidf3.json @@ -0,0 +1,182 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$tfidf376642", + "name": "brightics.function.textanalytics$tfidf3", + "context": "python", + "label": "TF-IDF", + "description": "This is a function to calculate TF-IDF, abbreviated term for term frequency-inverse document frequency. \n\nReference:\n+ ", + "tags": [], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "out_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": "", + "mandatory": true, + "items": [], + "visibleOption": [], + "control": "ColumnSelector", + "columnType": [ + "String", + "String[]" + ], + "validation": [], + "multiple": false + }, + { + "id": "max_df", + "label": "Maximum Document Frequency", + "description": "When building the vocabulary, ignore terms that have a document frequency strictly higher than the given threshold (corpus-specific stop words).", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "targetTable": [], + "placeHolder": "the number of documents", + "type": "Integer" + }, + { + "id": "min_df", + "label": "Minimum Document Frequency", + "description": "When building the vocabulary, ignore terms that have a document frequency strictly lower than the given threshold. This value is also called cut-off in the literature.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "targetTable": [], + "placeHolder": "1 (value >= 0)", + "type": "Integer", + "min": 0 + }, + { + "id": "max_features", + "label": "Maximum Number of Vocabularies", + "description": "The number of vocabularies that will be utilized to count their frequencies in the entire documents. It should be greater than or equal to two.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "targetTable": [], + "placeHolder": "100 (value >= 2)", + "type": "Integer", + "min": 2 + }, + { + "id": "use_idf", + "label": "Using IDF", + "description": "Weighting scheme for IDF. Currently it is providing \"Unary\" and \"Inverse Document Frequency\" only.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "BooleanRadio", + "columnType": [], + "validation": [], + "targetTable": [], + "defaultValue": true + }, + { + "id": "norm", + "label": "Norm", + "description": "Norm used to normalize term vectors.", + "mandatory": false, + "items": [ + { + "label": "L1", + "value": "l1", + "default": false + }, + { + "label": "L2", + "value": "l2", + "default": true + } + ], + "visibleOption": [], + "control": "RadioButton", + "columnType": [], + "validation": [], + "targetTable": [] + }, + { + "id": "smooth_idf", + "label": "Smooth IDF", + "description": "Smooth idf weights by adding one to document frequencies, as if an extra document was seen containing every term in the collection exactly once. Prevents zero divisions.", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "BooleanRadio", + "columnType": [], + "validation": [], + "targetTable": [], + "defaultValue": true + }, + { + "id": "sublinear_tf", + "label": "Sublinear TF", + "description": "Apply sublinear tf scaling, i.e. replace \"tf\" with \"1 + log(tf)\".", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "BooleanRadio", + "columnType": [], + "validation": [], + "targetTable": [], + "defaultValue": false + }, + { + "id": "res_type", + "label": "Result Type", + "description": "Result type", + "mandatory": false, + "items": [ + { + "label": "Sparse", + "value": "sparse", + "default": true + }, + { + "label": "Dense", + "value": "dense", + "default": false + } + ], + "visibleOption": [], + "control": "RadioButton", + "columnType": [], + "validation": [], + "targetTable": [] + } + ] + }, + "md": "" +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/tokenizer_eng.json b/function/python/brightics/function/textanalytics/meta/tokenizer_eng.json index b9219aa34..2e3ab0b13 100644 --- a/function/python/brightics/function/textanalytics/meta/tokenizer_eng.json +++ b/function/python/brightics/function/textanalytics/meta/tokenizer_eng.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "textanalytics", "func": "brightics.function.textanalytics$tokenizer_eng51532", "name": "brightics.function.textanalytics$tokenizer_eng", diff --git a/function/python/brightics/function/textanalytics/meta/tokenizer_eng2.json b/function/python/brightics/function/textanalytics/meta/tokenizer_eng2.json new file mode 100644 index 000000000..49e6bb3f3 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/tokenizer_eng2.json @@ -0,0 +1,1147 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", + "context": "python", + "label": "Tokenizer (English)", + "description": "Tokenization is the process of demarcating and possibly classifying sections of a string of input characters. The resulting tokens are then passed on to some other form of processing. The process can be considered a sub-task of parsing input.\n\nIn corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or POST), also called grammatical tagging or word-category disambiguation, is the process of marking up a word in a text (corpus) as corresponding to a particular part of speech, based on both its definition and its context—i.e., its relationship with adjacent and related words in a phrase, sentence, or paragraph. A simplified form of this is commonly taught to school-age children, in the identification of words as nouns, verbs, adjectives, adverbs, etc.\n\nThis function uses NLTK Tokenizer. The first column of the user-dictionary consists of compound words that the user wants to be kept, and the second column, which is optional, consists of tokens (separated by commas) to be combined.\n\nReference: \n+ \n+ ", + "tags": [], + "version": "3.6", + "inputs": { + "table": "", + "user_dict": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "user_dict": { + "type": "table", + "optional": true + }, + "out_table": { + "type": "table" + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "Columns to select as input. Only String type columns are possible.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": true + }, + { + "id": "new_col_prefix", + "label": "New Column Prefix", + "description": "Name of the new column to be added.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "tokenized" + }, + { + "id": "stemming", + "label": "Stemming", + "description": "Whether to use stemming; the process of reducing inflected words to their word stem, base or root form.\n - Available Options : `True`, `False`", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": false + }, + { + "id": "pos_extraction", + "label": "Extraction", + "description": "Extraction of items to return.\n - Available Options : `Coordinating Conjunction`, `Cardinal Digit`, `Determiner`, `Existential There`, `Foreign Word`, `Preposition/Subordinating Conjunction`, `Adjective`, `Adjective, Comparative`, `Adjective, Superlative`, `List Marker`, `Modal`, `Noun, Singular`, `Noun Plural`, `Proper Noun, Singular`, `Proper Noun, Plural`, `Predeterminer`, `Possessive Ending`, `Personal Pronoun`, `Possessive Pronoun`, `Adverb`, `Adverb, Comparative`, `Adverb, Superlative`, `Particle`, `To`, `Interjection`, `Verb, Base`, `Verb, Past Tense`, `Verb, Gerund/Present Participle`, `Verb, Past Participle`, `Verb, Sing. Present, Non-3d`, `Verb, 3rd Person Sing. Present`, `Wh-determiner`, `Wh-pronoun`, `Possessive Wh-pronoun`, `Wh-abverb`", + "visibleOption": [], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Coordinating Conjunction", + "value": "CC", + "default": true + }, + { + "label": "Cardinal Digit", + "value": "CD", + "default": false + }, + { + "label": "Determiner", + "value": "DT", + "default": false + }, + { + "label": "Existential There", + "value": "EX", + "default": false + }, + { + "label": "Foreign Word", + "value": "FW", + "default": false + }, + { + "label": "Preposition/Subordinating Conjunction", + "value": "IN", + "default": false + }, + { + "label": "Adjective", + "value": "JJ", + "default": true + }, + { + "label": "Adjective, Comparative", + "value": "JJR", + "default": true + }, + { + "label": "Adjective, Superlative", + "value": "JJS", + "default": true + }, + { + "label": "List Marker", + "value": "LS", + "default": false + }, + { + "label": "Modal", + "value": "MD", + "default": false + }, + { + "label": "Noun, Singular", + "value": "NN", + "default": true + }, + { + "label": "Noun Plural", + "value": "NNS", + "default": true + }, + { + "label": "Proper Noun, Singular", + "value": "NNP", + "default": true + }, + { + "label": "Proper Noun, Plural", + "value": "NNPS", + "default": true + }, + { + "label": "Predeterminer", + "value": "PDT", + "default": false + }, + { + "label": "Possessive Ending", + "value": "POS", + "default": false + }, + { + "label": "Personal Pronoun", + "value": "PRP", + "default": false + }, + { + "label": "Possessive Pronoun", + "value": "PRP$", + "default": false + }, + { + "label": "Adverb", + "value": "RB", + "default": true + }, + { + "label": "Adverb, Comparative", + "value": "RBR", + "default": true + }, + { + "label": "Adverb, Superlative", + "value": "RBS", + "default": true + }, + { + "label": "Particle", + "value": "RP", + "default": false + }, + { + "label": "To", + "value": "TO", + "default": false + }, + { + "label": "Interjection", + "value": "UH", + "default": false + }, + { + "label": "Verb, Base", + "value": "VB", + "default": true + }, + { + "label": "Verb, Past Tense", + "value": "VBD", + "default": true + }, + { + "label": "Verb, Gerund/Present Participle", + "value": "VBG", + "default": false + }, + { + "label": "Verb, Past Participle", + "value": "VBN", + "default": true + }, + { + "label": "Verb, Sing. Present, Non-3d", + "value": "VBP", + "default": true + }, + { + "label": "Verb, 3rd Person Sing. Present", + "value": "VBZ", + "default": true + }, + { + "label": "Wh-determiner", + "value": "WDT", + "default": false + }, + { + "label": "Wh-pronoun", + "value": "WP", + "default": false + }, + { + "label": "Possessive Wh-pronoun", + "value": "WP$", + "default": false + }, + { + "label": "Wh-abverb", + "value": "WRB", + "default": false + } + ], + "columnType": [] + }, + { + "id": "is_tagged", + "label": "Part of Speech Tagging", + "description": "Whether to show parts of speech with tokenized words.\n - Available Options : `True`, `False`", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": false + }, + { + "id": "lower_case", + "label": "Lower Case", + "description": "Whether to convert all characters to lower cases.\n - Available Options : `True`, `False`", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "BooleanRadio", + "columnType": [], + "validation": [], + "defaultValue": true + } + ], + "summary": "This function tokenizes english string data into parts of speech(POS)." + }, + "md": "# Tokenizer (English)\nThis function tokenizes english string data into parts of speech(POS).\n\n## Description\nTokenization is the process of demarcating and possibly classifying sections of a string of input characters. The resulting tokens are then passed on to some other form of processing. The process can be considered a sub-task of parsing input.\n\nIn corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or POST), also called grammatical tagging or word-category disambiguation, is the process of marking up a word in a text (corpus) as corresponding to a particular part of speech, based on both its definition and its context—i.e., its relationship with adjacent and related words in a phrase, sentence, or paragraph. A simplified form of this is commonly taught to school-age children, in the identification of words as nouns, verbs, adjectives, adverbs, etc. \n\nThis function uses NLTK Tokenizer. The first column of the user-dictionary consists of compound words that the user wants to be kept, and the second column, which is optional, consists of tokens (separated by commas) to be combined.\n\nReference: \n+ \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and tokenized text column.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only String type columns are possible.\n\n2. **New Column Prefix**: Name of the new column to be added.\n\n3. **Stemming**: Whether to use stemming; the process of reducing inflected words to their word stem, base or root form.\n - Available Options : `True`, `False`\n\n4. **Extraction**: Extraction of items to return.\n - Available Options : `Coordinating Conjunction`, `Cardinal Digit`, `Determiner`, `Existential There`, `Foreign Word`, `Preposition/Subordinating Conjunction`, `Adjective`, `Adjective, Comparative`, `Adjective, Superlative`, `List Marker`, `Modal`, `Noun, Singular`, `Noun Plural`, `Proper Noun, Singular`, `Proper Noun, Plural`, `Predeterminer`, `Possessive Ending`, `Personal Pronoun`, `Possessive Pronoun`, `Adverb`, `Adverb, Comparative`, `Adverb, Superlative`, `Particle`, `To`, `Interjection`, `Verb, Base`, `Verb, Past Tense`, `Verb, Gerund/Present Participle`, `Verb, Past Participle`, `Verb, Sing. Present, Non-3d`, `Verb, 3rd Person Sing. Present`, `Wh-determiner`, `Wh-pronoun`, `Possessive Wh-pronoun`, `Wh-abverb`\n\n5. **Part of Speech Tagging**: Whether to show parts of speech with tokenized words.\n - Available Options : `True`, `False`\n\n6. **Lower Case**: Whether to convert all characters to lower cases.\n - Available Options : `True`, `False`\n\n\n### Python\n#### USAGE\n\n```\ntokenizer_eng2(table, input_cols, new_col_prefix='tokenized', stemming=True, pos_extraction=None, is_tagged=False, lower_case=False)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contain input table's columns and tokenized text column.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only String type columns are possible.\n\t* Type: *list[str]*\n2. **new_col_prefix**: Name of the new column to be added.\n\t* Type: *str*\n\t* Default / Range: 'tokenized'\n3. **stemming**: Whether to use stemming; the process of reducing inflected words to their word stem, base or root form.\n\t* Type: *bool*\n\t* Default / Range: False \n4. **pos_extraction**: Extraction of items to return.\n\t* Type: *list[str]*\n\t* Default / Range: CC ( CC | CD | DT | EX | FW | INJJ | JJJJR | JJRJJS | JJS | LS | MDNN | NNNNS | NNSNNP | NNPNNPS | NNPS | PDT | POS | PRP | PRP$RB | RBRBR | RBRRBS | RBS | RP | TO | UHVB | VBVBD | VBD | VBGVBN | VBNVBP | VBPVBZ | VBZ | WDT | WP | WP$ | WRB )\n5. **is_tagged**: Whether to show parts of speech with tokenized words.\n\t* Type: *bool*\n\t* Default value: False\n6. **lower_case**: Whether to convert all characters to lower cases.\n\t* Type: *bool*\n\t* Default value: False \n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Tokenizer(English) function. The output of this function is a Table with tokenized text data added to the input Table.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : document\n2. **New Column Prefix** : tokenized\n3. **Stemming** : False\n4. **Extraction** : Select All\n5. **Part of Speech Tagging** : True\n6. **Lower Case** : False\n\n### Python\n```\nfrom brightics.function.textanalytics import tokenizer_eng2\ninput_table = inputs[0]\nresult = tokenizer_eng2(table=input_table, input_cols=['document'],\n new_col_prefix='tokenized',\n stemming=False, pos_extraction=None, is_tagged=True, lower_case=False)\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of tokenizer_eng function. The output of this function is a Table with tokenized text data added to the input Table.\n\n", + "exampleModels": [ + { + "fileName": "brightics.function.textanalytics$tokenizer_eng.json", + "label": "Tokenizer(English)", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m3h4sb5ugnxrmwej", + "project_id": "phvesm6fsjmzbzfa", + "label": "Tokenizer(English)", + "contents": { + "mid": "m3h4sb5ugnxrmwej", + "type": "data", + "title": "Tokenizer(English)", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_data_tokenizer_eng.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1584947362154", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "6xsyyuh4w6t34xm7jejk64dn" + } + ], + "layout": { + "type": "panel", + "id": "default-1584947362154" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "t9r5pg5m4cfyazgz" + }, + "fid": "fjxpaxgy7cfzj82a" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", + "param": { + "stemming": false, + "pos_extraction": [ + "CC", + "CD", + "DT", + "EX", + "FW", + "IN", + "JJ", + "JJR", + "JJS", + "LS", + "MD", + "NN", + "NNS", + "NNP", + "NNPS", + "PDT", + "POS", + "PRP", + "PRP$", + "RB", + "RBR", + "RBS", + "RP", + "TO", + "UH", + "VB", + "VBD", + "VBG", + "VBN", + "VBP", + "VBZ", + "WDT", + "WP", + "WP$", + "WRB" + ], + "is_tagged": true, + "input_cols": [ + "document" + ] + }, + "display": { + "label": "Tokenizer (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1584947381251", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "iehm2fjww86ysr5tjfqvggk4" + } + ], + "layout": { + "type": "panel", + "id": "default-1584947381251" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1584947381344", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": { + "zoom": { + "zoomAxis": "xAxis" + } + } + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "area": { + "smooth": true, + "marker": { + "symbolSize": 1, + "itemStyle": { + "normal": { + "opacity": 1 + } + } + }, + "stripLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "trendLine": { + "lineStyle": { + "normal": { + "color": "#000000", + "type": "solid", + "width": 1 + } + }, + "data": [ + {} + ] + }, + "tooltip": { + "trigger": "axis" + }, + "showSymbol": { + "all": "auto" + } + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "dpuvzvkp2pd5hke6izzhxu3b" + } + ], + "layout": { + "type": "panel", + "id": "default-1584947381344" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t9r5pg5m4cfyazgz" + }, + "outputs": { + "out_table": "t2qyy39tz2mqpf87" + }, + "fid": "fnj2vrk842v7j2mq" + } + ], + "links": [ + { + "kid": "kb5n2gephgjxdwex", + "sourceFid": "fjxpaxgy7cfzj82a", + "targetFid": "fnj2vrk842v7j2mq" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "

Tokenizer(English) sample model.

", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-03-23T07:46:08.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-03-23T07:48:06.000Z", + "event_key": "2020_074806.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "brightics.function.textanalytics$tokenizer_eng.PNG", + "label": "brightics.function.textanalytics$tokenizer_eng.PNG", + "base64": "data:image/png;base64,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" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/tokenizer_kor.json b/function/python/brightics/function/textanalytics/meta/tokenizer_kor.json index 1887b06cd..2aac2dde9 100644 --- a/function/python/brightics/function/textanalytics/meta/tokenizer_kor.json +++ b/function/python/brightics/function/textanalytics/meta/tokenizer_kor.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "textanalytics", "func": "brightics.function.textanalytics$tokenizer_kor51577", "name": "brightics.function.textanalytics$tokenizer_kor", diff --git a/function/python/brightics/function/textanalytics/meta/tokenizer_kor2.json b/function/python/brightics/function/textanalytics/meta/tokenizer_kor2.json new file mode 100644 index 000000000..932b0319f --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/tokenizer_kor2.json @@ -0,0 +1,1056 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$tokenizer_kor2", + "name": "brightics.function.textanalytics$tokenizer_kor2", + "context": "python", + "label": "Tokenizer (Korean)", + "description": "In corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or POST), also called grammatical tagging or word-category disambiguation, is the process of marking up a word in a text (corpus) as corresponding to a particular part of speech, based on both its definition and its context—i.e., its relationship with adjacent and related words in a phrase, sentence, or paragraph. A simplified form of this is commonly taught to school-age children, in the identification of words as nouns, verbs, adjectives, adverbs, etc.\n\nThis function uses Twitter Korean Tokenizer. The first column of the user-dictionary consists of compound words that the user wants to be kept, and the second column, which is optional, consists of tokens (separated by commas) to be combined.\n\nReference: \n+ \n+ ", + "tags": [], + "version": "3.6", + "inputs": { + "table": "", + "user_dict": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "user_dict": { + "type": "table", + "optional": true + }, + "out_table": { + "type": "table" + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "Columns to select as input. Only String type columns are possible.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "String" + ], + "multiple": true + }, + { + "id": "new_col_prefix", + "label": "New Column Prefix", + "description": "Name of the new column to be added.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "tokenized" + }, + { + "id": "normalization", + "label": "Normalization", + "description": "Whether to use normalization; the process of canonicalizing tokens so that matches occur despite superficial differences in the character sequences of the tokens.\n - Available Options : `True'|'False`", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": true + }, + { + "id": "stemming", + "label": "Stemming", + "description": "Whether to use stemming; the process of reducing inflected words to their word stem, base or root form.\n - Available Options : `True'|'False`", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": true + }, + { + "id": "pos_extraction", + "label": "Extraction", + "description": "Extraction of items to return.\n - Available Options : `Noun`, `Verb`, `Adjective`, `Adverb`, `Determiner`, `Exclamation`, `Josa`, `Eomi`, `PreEomi`, `Conjunction`, `Modifier`, `VerbPrefix`, `Suffix`, `Unknown`, `Korean`, `Foreign`, `Number`, `KoreanParticle`, `Alpha`, `Punctuation`, `Hashtag`, `ScreenName`, `Email`, `URL`, `CashTag`, `Space`, `Others`", + "visibleOption": [], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Noun", + "value": "Noun", + "default": true + }, + { + "label": "Verb", + "value": "Verb", + "default": false + }, + { + "label": "Adjective", + "value": "Adjective", + "default": false + }, + { + "label": "Adverb", + "value": "Adverb", + "default": false + }, + { + "label": "Determiner", + "value": "Determiner", + "default": false + }, + { + "label": "Exclamation", + "value": "Exclamation", + "default": false + }, + { + "label": "Josa", + "value": "Josa", + "default": false + }, + { + "label": "Eomi", + "value": "Eomi", + "default": false + }, + { + "label": "PreEomi", + "value": "PreEomi", + "default": false + }, + { + "label": "Conjunction", + "value": "Conjunction", + "default": false + }, + { + "label": "Modifier", + "value": "Modifier", + "default": false + }, + { + "label": "VerbPrefix", + "value": "VerbPrefix", + "default": false + }, + { + "label": "Suffix", + "value": "Suffix", + "default": false + }, + { + "label": "Unknown", + "value": "Unknown", + "default": false + }, + { + "label": "Korean", + "value": "Korean", + "default": false + }, + { + "label": "Foreign", + "value": "Foreign", + "default": false + }, + { + "label": "Number", + "value": "Number", + "default": false + }, + { + "label": "KoreanParticle", + "value": "KoreanParticle", + "default": false + }, + { + "label": "Alpha", + "value": "Alpha", + "default": false + }, + { + "label": "Punctuation", + "value": "Punctuation", + "default": false + }, + { + "label": "Hashtag", + "value": "Hashtag", + "default": false + }, + { + "label": "ScreenName", + "value": "ScreenName", + "default": false + }, + { + "label": "Email", + "value": "Email", + "default": false + }, + { + "label": "URL", + "value": "URL", + "default": false + }, + { + "label": "CashTag", + "value": "CashTag", + "default": false + }, + { + "label": "Space", + "value": "Space", + "default": false + }, + { + "label": "Others", + "value": "Others", + "default": false + } + ], + "columnType": [] + }, + { + "id": "is_tagged", + "label": "Part of Speech Tagging", + "description": "Whether to show parts of speech with tokenized words.\n - Available Options : `True', 'False`", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": false + } + ], + "summary": "This function tokenizes korean string data into parts of speech(POS)." + }, + "md": "# Tokenizer (Korean)\nThis function tokenizes korean string data into parts of speech(POS).\n\n## Description\nIn corpus linguistics, part-of-speech tagging (POS tagging or PoS tagging or POST), also called grammatical tagging or word-category disambiguation, is the process of marking up a word in a text (corpus) as corresponding to a particular part of speech, based on both its definition and its context—i.e., its relationship with adjacent and related words in a phrase, sentence, or paragraph. A simplified form of this is commonly taught to school-age children, in the identification of words as nouns, verbs, adjectives, adverbs, etc. \n\nThis function uses Twitter Korean Tokenizer. The first column of the user-dictionary consists of compound words that the user wants to be kept, and the second column, which is optional, consists of tokens (separated by commas) to be combined.\n\nReference: \n+ \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **table**: (Table) Output Table. It contain input table's columns and tokenized text column.\n#### PARAMETER\n1. **Input Columns***: Columns to select as input. Only String type columns are possible.\n\n2. **New Column Prefix**: Name of the new column to be added.\n\n3. **Normalization**: Whether to use normalization; the process of canonicalizing tokens so that matches occur despite superficial differences in the character sequences of the tokens.\n * Available Options: `True`, `False`\n4. **Stemming**: Whether to use stemming; the process of reducing inflected words to their word stem, base or root form.\n * Available Options: `True`, `False`\n5. **Extraction**: Extraction of items to return.\n - Available Options: `Noun`, `Verb`, `Adjective`, `Adverb`, `Determiner`, `Exclamation`, `Josa`, `Eomi`, `PreEomi`, `Conjunction`, `Modifier`, `VerbPrefix`, `Suffix`, `Unknown`, `Korean`, `Foreign`, `Number`, `KoreanParticle`, `Alpha`, `Punctuation`, `Hashtag`, `ScreenName`, `Email`, `URL`, `CashTag`, `Space`, `Others`\n\n6. **Part of Speech Tagging**: Whether to show parts of speech with tokenized words.\n * Available Options: `True`, `False`\n\n### Python\n#### USAGE\n\n```\ntokenizer_kor2(table, input_cols, new_col_prefix='tokenized', normalization=True, stemming=True, pos_extraction=None, is_tagged=False)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **table**: (Table) Output Table. It contain input table's columns and tokenized text column.\n#### PARAMETER\n1. **input_cols***: Columns to select as input. Only String type columns are possible.\n\t* Type: *list[str]*\n2. **new_col_prefix**: Name of the new column to be added.\n\t* Type: *str*\n\t* Default value: 'tokenized'\n3. **normalization**: Whether to use normalization; the process of canonicalizing tokens so that matches occur despite superficial differences in the character sequences of the tokens.\n\t* Type: *bool*\n\t* Default value: True \n4. **stemming**: Whether to use stemming; the process of reducing inflected words to their word stem, base or root form.\n\t* Type: *bool*\n\t* Default value: True \n5. **pos_extraction**: Extraction of items to return.\n\t* Type: *list[str]*\n\t* Default / Range: Noun ( Noun | Verb | Adjective | Adverb | Determiner | Exclamation | Josa | Eomi | PreEomi | Conjunction | Modifier | VerbPrefix | Suffix | Unknown | Korean | Foreign | Number | KoreanParticle | Alpha | Punctuation | Hashtag | ScreenName | Email | URL | CashTag | Space | Others )\n6. **is_tagged**: Whether to show parts of speech with tokenized words.\n\t* Type: *bool*\n\t* Default value: False \n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_nsmc data is used as input of Tokenizer(Korean) function. The output of this function is a Table with tokenized text data added to the input Table.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Columns*** : doc1, doc2\n2. **New Column Prefix** : tokenized\n3. **Normalization** : True\n4. **Stemming** : True\n5. **Extraction** : Select All\n6. **Part of Speech Tagging** : False\n\n### Python\n```\nfrom brightics.function.textanalytics import tokenizer_kor2\ninput_table = inputs[0]\nresult = tokenizer_kor2(table=input_table, input_cols=['doc1', 'doc2'],\n new_col_prefix='tokenized', normalization=True,\n stemming=True, pos_extraction=None, is_tagged=False)\noutput = result['out_table']\n```\n\n
In this python script, sample_nsmc data is used as input of tokenizer_kor function. The output of this function is a Table with tokenized text data added to the input Table.\n\n", + "exampleModels": [ + { + "fileName": "brightics.function.textanalytics$tokenizer_kor.json", + "label": "Tokenizer(Korean)", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "maxqvzx6bvxs5u6u", + "project_id": "phvesm6fsjmzbzfa", + "label": "Tokenizer(Korean)", + "contents": { + "mid": "maxqvzx6bvxs5u6u", + "type": "data", + "title": "Tokenizer(Korean)", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_nsmc.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1584947362154", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "6xsyyuh4w6t34xm7jejk64dn" + } + ], + "layout": { + "type": "panel", + "id": "default-1584947362154" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "txhdn4jyn54keb7d" + }, + "fid": "faan6jwm2fass9g6" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_kor2", + "name": "brightics.function.textanalytics$tokenizer_kor2", + "param": { + "normalization": true, + "stemming": true, + "pos_extraction": [ + "Noun", + "Verb", + "Adjective", + "Adverb", + "Determiner", + "Exclamation", + "Josa", + "Eomi", + "PreEomi", + "Conjunction", + "Modifier", + "VerbPrefix", + "Suffix", + "Unknown", + "Korean", + "Foreign", + "Number", + "KoreanParticle", + "Alpha", + "Punctuation", + "Hashtag", + "ScreenName", + "Email", + "URL", + "CashTag", + "Space", + "Others" + ], + "is_tagged": false, + "input_cols": [ + "doc1", + "doc2" + ] + }, + "display": { + "label": "Tokenizer (Korean)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1584948868828", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "tyj4i533pdwhn9bpskcp7zvg" + } + ], + "layout": { + "type": "panel", + "id": "default-1584948868828" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1584948868925", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "r46qg3rhixh83gjquw7eve7k" + } + ], + "layout": { + "type": "panel", + "id": "default-1584948868925" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "txhdn4jyn54keb7d" + }, + "outputs": { + "out_table": "tnyz2ag54eae5myw" + }, + "fid": "fhhdwhgtpdjnn5qb" + } + ], + "links": [ + { + "kid": "kfpmuwt836jjajpc", + "sourceFid": "faan6jwm2fass9g6", + "targetFid": "fhhdwhgtpdjnn5qb" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "

Tokenizer(Korean) sample model.

", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-03-23T07:09:12.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-03-23T07:35:34.000Z", + "event_key": "2020_073534.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "brightics.function.textanalytics$tokenizer_kor.PNG", + "label": "brightics.function.textanalytics$tokenizer_kor.PNG", + "base64": "data:image/png;base64,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" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/topic_name_extraction.json b/function/python/brightics/function/textanalytics/meta/topic_name_extraction.json new file mode 100644 index 000000000..bab91b3c6 --- /dev/null +++ b/function/python/brightics/function/textanalytics/meta/topic_name_extraction.json @@ -0,0 +1,2270 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "textanalytics", + "func": "brightics.function.textanalytics$topic_name_extraction", + "name": "brightics.function.textanalytics$topic_name_extraction", + "context": "python", + "label": "Topic Name Extraction", + "description": "This function suggests some topic names based on the topic vocabularies. It takes an output topic table from topic modeling functions, such as Latent Dirichlet Allocation or GSDMM, as the input table. Additionally, either (1) an output model from the Word2Vec function as an input model or (2) a similarity matrix for words as an input table is needed. For the former case, note that both Word2vec and the topic modeling function should have the same input function, and for the latter case, the first column (the column names, resp.) should contain the words as indices of rows. (columns, resp.) The output table has five additional columns, each of which is derived from distinct weighting options. The first column uses the weights as given in the topic table, the second uses harmonic weights [1, 1/2, 1/3, 1/4, ...], the third uses geometric weights [1, 1/2, 1/4, 1/8, ...], the fourth uses log weights [log(N), log(N-1), log(N-2), ...] where N is the number of topic words, and the fifth uses constant weights [1, 1, 1, ...].", + "tags": [ + "lda", + "topic modeling" + ], + "version": "3.6", + "inputs": { + "table": "", + "sim_table": "", + "model": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data including text documents.", + "optional": false + }, + "sim_table": { + "type": "table", + "desc": "Word similarity matrix table. The first column should contain the words as indices of rows, and the column names should be the corresponding words.", + "optional": true + }, + "model": { + "type": "model", + "desc": "Word2vec output model.", + "optional": true + }, + "out_table": { + "type": "table", + "desc": "Plausible names for each topic." + } + }, + "params": [ + { + "id": "topn", + "label": "Top N topic names", + "description": "The number of best topic names to be shown for each method.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "10 (value >= 1)" + } + ], + "summary": "This function suggests some topic names based on the topic vocabularies." + }, + "md": { + "en": "# Topic Name Extraction\nThis function suggests some topic names based on the topic vocabularies.\n\n## Description\nThis function suggests some topic names based on the topic vocabularies. It takes an output topic table from topic modeling functions, such as Latent Dirichlet Allocation or GSDMM, as the input table. Additionally, either\n 1) an output model from the Word2Vec function as an input model or\n 2) a similarity matrix for words as an input table is needed.\n\nFor the former case, note that both Word2vec and the topic modeling function should have the same input function, and for the latter case, the first column (the column names, resp.) should contain the words as indices of rows. (columns, resp.)\n\nThe output table has five additional columns, each of which is derived from distinct weighting options.\n 1) The first column \"topic_name_original\" uses the weights as given in the topic table,\n 2) the second column \"topic_name_harmonic\" uses harmonic weights [1, 1/2, 1/3, 1/4, ...],\n 3) the third column \"topic_name_geometric\" uses geometric weights [1, 1/2, 1/4, 1/8, ...],\n 4) the fourth column \"topic_name_log\" uses log weights [log(N), log(N-1), log(N-2), ...] where N is the number of topic words, and\n 5) the fifth column \"topic_name_constant\" uses constant weights [1, 1, 1, ...].\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data including text documents.\n2. **sim_table***: (Table) Word similarity matrix table. The first column should contain the words as indices of rows, and the column names should be the corresponding words.\n3. **model***: (Model) Word2vec output model.\n#### OUTPUT\n1. **out_table**: (Table) Plausible names for each topic.\n#### PARAMETER\n1. **Top N topic names**: The number of best topic names to be shown for each method.\n\n\n### Python\n#### USAGE\n\n```\ntopic_name_extraction(table = , sim_table = , model = , topn = )\n```\n\n#### INPUT\n1. **table***: (Table) Data including text documents.\n2. **sim_table***: (Table) Word similarity matrix table. The first column should contain the words as indices of rows, and the column names should be the corresponding words.\n3. **model***: (Model) Word2vec output model.\n#### OUTPUT\n1. **out_table**: (Table) Plausible names for each topic.\n#### PARAMETER\n1. **topn**: The number of best topic names to be shown for each method.\n\t* Type: *int*\n\t* Default / Range: 10 (value >= 1)\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used as an input of Topic Name Extraction function. The result includes each topic's plausible names. The parameter settings used in the function are shown below.\n\n++Inputs++\n1. **table**: topic_table (from Latent Dirichlet Allocation)\n2. **sim_table**: None\n3. **model**: model (from Word2Vec)\n\n++Parameters++\n1. **Top N topic names**: 10\n\n\n\n### Python\n\n```\nfrom brightics.function.textanalytics import topic_name_extraction\ninput_table = inputs[1]\ninput_model = models[1]\nresult = topic_name_extraction(table=input_table, sim_table=None, model=input_model, topn=10)\noutput = result['out_table']\n```\nIn this tutorial workflow, sample_LatentDirichletAllocation data is used as an input of Topic Name Extraction function. The result includes each topic's plausible names.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "Topic Name Extraction.json", + "label": "Topic Name Extraction", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mj6cyx24amsas6jg", + "project_id": "p7puh97cexbjrebu", + "label": "Topic Name Extraction", + "contents": { + "mid": "mj6cyx24amsas6jg", + "type": "data", + "title": "Topic Name Extraction", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_LatentDirichletAllocation.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379170038", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "azckyqi7wtuya26c4gnbr98m" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379170038" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "td89fpdtvu6ekpyh" + }, + "fid": "ftmxkgveeaxskz43" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", + "param": { + "stemming": true, + "pos_extraction": [ + "CC", + "JJ", + "JJR", + "JJS", + "NN", + "NNS", + "NNP", + "NNPS", + "RB", + "RBR", + "RBS", + "VB", + "VBD", + "VBN", + "VBP", + "VBZ" + ], + "is_tagged": false, + "input_cols": [ + "text" + ] + }, + "display": { + "label": "Tokenizer (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202349", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "egs5kgsijmv3jj4xtfrijddr" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202349" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592379202452", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "j7qs838697v499h6ecbiy4mf" + } + ], + "layout": { + "type": "panel", + "id": "default-1592379202452" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "td89fpdtvu6ekpyh" + }, + "outputs": { + "out_table": "tg4pgh5h625vncf7" + }, + "fid": "fs4nhffa28atkan5" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$topic_name_extraction", + "name": "brightics.function.textanalytics$topic_name_extraction", + "param": {}, + "display": { + "label": "Topic Name Extraction", + "diagram": { + "position": { + "x": 1020, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592441977950", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "6fwxtrpittfvbwff5dvwxvc2" + } + ], + "layout": { + "type": "panel", + "id": "default-1592441977950" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592441978006", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "sim_table": { + "type": "table", + "optional": true + }, + "model": { + "type": "model", + "optional": true + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tyxxnvtv3zwf6bfa", + "sim_table": "", + "model": "tjx5bngt4wqk9yhv" + }, + "outputs": { + "out_table": "tx58jsbdcqzrths9" + }, + "fid": "f2c7nx3ttg3f4zfm" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$word2vec70578", + "name": "brightics.function.textanalytics$word2vec", + "param": { + "sg": 1, + "hs": true, + "input_col": "tokenized_text" + }, + "display": { + "label": "Word2Vec", + "diagram": { + "position": { + "x": 770, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592441987753", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "7hjt2cvjp444qt448rb363jm" + } + ], + "layout": { + "type": "panel", + "id": "default-1592441987753" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592441987819", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "4cw2rskd5uf7557v9yfnzwz3" + } + ], + "layout": { + "type": "panel", + "id": "default-1592441987819" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tg4pgh5h625vncf7" + }, + "outputs": { + "out_table": "t6qmd9k6vvfzr492", + "model": "tjx5bngt4wqk9yhv" + }, + "fid": "f4cag4pwdhfcwtgd" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$lda4", + "name": "brightics.function.textanalytics$lda4", + "param": { + "learning_method": "online", + "input_col": "tokenized_text", + "num_topic": 3 + }, + "display": { + "label": "Latent Dirichlet Allocation", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592442065926", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "bzy7w2k4jjan32ycxjvga3jr" + } + ], + "layout": { + "type": "panel", + "id": "default-1592442065926" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592442066045", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "y3h2yhc6szt587gbgc8akdnz" + } + ], + "layout": { + "type": "panel", + "id": "default-1592442066045" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + }, + "topic_table": { + "type": "table" + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tg4pgh5h625vncf7" + }, + "outputs": { + "out_table": "tkyj5xd7b3shqw8b", + "topic_table": "tyxxnvtv3zwf6bfa", + "model": "ttp5vd6g3rygnyhs" + }, + "fid": "fqc69fvu46fecc2x" + } + ], + "links": [ + { + "kid": "ktefdq3v9j5dwrsk", + "sourceFid": "ftmxkgveeaxskz43", + "targetFid": "fs4nhffa28atkan5" + }, + { + "kid": "kgfc4mrhy4s3bgyf", + "sourceFid": "fs4nhffa28atkan5", + "targetFid": "f4cag4pwdhfcwtgd" + }, + { + "kid": "ke98cj4juyh2uns2", + "sourceFid": "f4cag4pwdhfcwtgd", + "targetFid": "f2c7nx3ttg3f4zfm" + }, + { + "kid": "kcncmap5gwydhg7r", + "sourceFid": "fs4nhffa28atkan5", + "targetFid": "fqc69fvu46fecc2x" + }, + { + "kid": "k7dbucdhvf6853v4", + "sourceFid": "fqc69fvu46fecc2x", + "targetFid": "f2c7nx3ttg3f4zfm" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-18T00:50:32.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-18T01:02:13.000Z", + "event_key": "2020_010213.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "topic_name_extraction.png", + "label": "topic_name_extraction.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes each topic's plausible names. The parameter settings used in the function are shown below.", + "parameter": "1. **Top N topic names**: 10\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.textanalytics import topic_name_extraction\r\ninput_table = inputs[1]\r\ninput_model = models[1]\r\nresult = topic_name_extraction(table=input_table, sim_table=None, model=input_model, topn=10)\r\noutput = result['out_table']", + "description": "In this tutorial workflow, sample_LatentDirichletAllocation data is used to make topic model and get the result. The result includes each topic's plausible names.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/meta/word2vec.json b/function/python/brightics/function/textanalytics/meta/word2vec.json index 5c25a8feb..4db5bc963 100644 --- a/function/python/brightics/function/textanalytics/meta/word2vec.json +++ b/function/python/brightics/function/textanalytics/meta/word2vec.json @@ -9,7 +9,7 @@ "name": "brightics.function.textanalytics$word2vec", "context": "python", "label": "Word2Vec", - "description": "Word2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nReference: \n+ ", + "description": "Word2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nReference: \n+ \n+ \"Distributed representations of words and phrases and their compositionality\", Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean, 2013", "tags": [], "version": "3.6", "inputs": { @@ -241,7 +241,7 @@ ], "summary": "This function trains Word2Vec model from tokenized text data." }, - "md": "# Word2Vec\nThis function trains Word2Vec model from tokenized text data.\n\n## Description\nWord2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nReference: \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains words column and word_vectors column.\n2. **model**: (Model) Word2Vec model.\n#### PARAMETER\n1. **Input Column***: Columns to select as input. Only List of String type columns are possible.\n\n2. **Training Algorithm**: Training algorithm. In the `CBOW` model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the `Skip-gram` model, the distributed representation of the input word is used to predict the context. `Skip-gram` works well with a small amount of the training data, represents well even rare words or phrases. `CBOW` is several times faster to train than the `Skip-gram`, slightly better accuracy for the frequent words.\n - Available Options : `Skip-gram`, `CBOW`\n\n3. **Dimension of Vectors**: Dimensionality of the word vectors.\n\n4. **Window Size**: Maximum distance between the current and predicted word within a sentence.\n\n5. **Minimum Count**: Ignores all words with total frequency lower than this.\n\n6. **Alpha**: The initial learning rate.\n\n7. **Minimum alpha**: Learning rate will linearly drop to min_alpha as training progresses.\n\n8. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n9. **Train epoch**: Number of iterations (epochs) over the corpus.\n\n10. **Number of Workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\n11. **Hierarchical softmax**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n - Available Options: `True`, `False`\n \n12. **Negative**: If `Negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\n13. **Negative sampling exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n\n14. **Top N frequent words**: Number of top-N frequent words to return.\n\n\n### Python\n#### USAGE\n\n```\nword2vec(table, input_col, sg=1, size=100, window=5, min_count=1, max_vocab_size=None, train_epoch=100, workers=1, alpha=0.025, min_alpha=0.025, seed=None, hs=1, negative=5, ns_exponent=0.75, topn=30, hashfxn=hash)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains words column and word_vectors column.\n2. **model**: (Model) Word2Vec model.\n#### PARAMETER\n1. **input_col***: Columns to select as input. Only List of String type columns are possible.\n\t* Type: *str*\n2. **sg**: Training algorithm(1:Skip-gram, 0:CBOW). In the CBOW model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the Skip-gram model, the distributed representation of the input word is used to predict the context. Skip-gram works well with a small amount of the training data, represents well even rare words or phrases. CBOW is several times faster to train than the Skip-gram, slightly better accuracy for the frequent words.\n\t* Type: *int*\n\t* Default / Range: 1 ( 1 | 0 )\n3. **size**: Dimensionality of the word vectors.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n4. **window**: Maximum distance between the current and predicted word within a sentence.\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 1)\n5. **min_count**: Ignores all words with total frequency lower than this.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n6. **alpha**: The initial learning rate.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n7. **min_alpha**: Learning rate will linearly drop to min_alpha as training progresses.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n8. **seed**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n9. **train_epoch**: Number of iterations (epochs) over the corpus.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n10. **workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n11. **hs**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n\t* Type: *bool*\n\t* Default value: True \n12. **negative**: If `Negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 1)\n13. **ns_exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n\t* Type: *float*\n\t* Default / Range: 0.75 (0 <= value <= 1)\n14. **topn**: Number of top-N frequent words to return.\n\t* Type: *int*\n\t* Default / Range: 30 (value >= 2)\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. The outputs of this function are a Word2Vec model and a Table with words and word_vectors columns.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Column*** : tokenized_document\n2. **Training Algorithm** : Skip-gram\n3. **Dimension of Vectors** : 100\n4. **Window Size** : 5\n5. **Minimum Count** : 1\n6. **Alpha**: 0.025\n7. **Minimum Alpha** : 0.025\n8. **Seed** : None\n9. **Train epoch** : 100\n10. **Number of Workers** : 1\n11. **Hierarchical softmax** : False\n12. **Negative** : 5\n13. **Negative sampling exponent** : 0.75\n14. **Top N frequent words** : 30\n\n### Python\n```\nfrom brightics.function.textanalytics import word2vec\ninput_table = inputs[0]\nresult = word2vec(table=input_table, input_col='tokenized_document', sg=1,\n size=100, window=5, min_count=1, max_vocab_size=None,\n train_epoch=100, workers=1, alpha=0.025, min_alpha=0.025,\n seed=None, hs=0, negative=5, ns_exponent=0.75, topn=30,\n hashfxn=hash)\noutput_table = result['out_table']\noutput_model = result['model']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. The output of this function is a Word2Vec model and Table with words and word_vectors columns.\n\n", + "md": "# Word2Vec\nThis function trains Word2Vec model from tokenized text data.\n\n## Description\nWord2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nReference: \n+ \n+ \"Distributed representations of words and phrases and their compositionality\", Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean, 2013\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains words column and word_vectors column.\n2. **model**: (Model) Word2Vec model.\n#### PARAMETER\n1. **Input Column***: Columns to select as input. Only List of String type columns are possible.\n\n2. **Training Algorithm**: Training algorithm. In the `CBOW` model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the `Skip-gram` model, the distributed representation of the input word is used to predict the context. `Skip-gram` works well with a small amount of the training data, represents well even rare words or phrases. `CBOW` is several times faster to train than the `Skip-gram`, slightly better accuracy for the frequent words.\n - Available Options : `Skip-gram`, `CBOW`\n\n3. **Dimension of Vectors**: Dimensionality of the word vectors.\n\n4. **Window Size**: Maximum distance between the current and predicted word within a sentence.\n\n5. **Minimum Count**: Ignores all words with total frequency lower than this.\n\n6. **Alpha**: The initial learning rate.\n\n7. **Minimum alpha**: Learning rate will linearly drop to min_alpha as training progresses.\n\n8. **Seed**: Random seed. Use the same seed in order to reproduce the same results.\n\n9. **Train epoch**: Number of iterations (epochs) over the corpus.\n\n10. **Number of Workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\n11. **Hierarchical softmax**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n - Available Options: `True`, `False`\n \n12. **Negative**: If `Negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\n13. **Negative sampling exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n\n14. **Top N frequent words**: Number of top-N frequent words to return.\n\n\n### Python\n#### USAGE\n\n```\nword2vec(table, input_col, sg=1, size=100, window=5, min_count=1, max_vocab_size=None, train_epoch=100, workers=1, alpha=0.025, min_alpha=0.025, seed=None, hs=1, negative=5, ns_exponent=0.75, topn=30, hashfxn=hash)\n```\n\n#### INPUT\n1. **table***: (Table) Text data in a Table.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains words column and word_vectors column.\n2. **model**: (Model) Word2Vec model.\n#### PARAMETER\n1. **input_col***: Columns to select as input. Only List of String type columns are possible.\n\t* Type: *str*\n2. **sg**: Training algorithm(1:Skip-gram, 0:CBOW). In the CBOW model, the distributed representations of context (or surrounding words) are combined to predict the word in the middle. While in the Skip-gram model, the distributed representation of the input word is used to predict the context. Skip-gram works well with a small amount of the training data, represents well even rare words or phrases. CBOW is several times faster to train than the Skip-gram, slightly better accuracy for the frequent words.\n\t* Type: *int*\n\t* Default / Range: 1 ( 1 | 0 )\n3. **size**: Dimensionality of the word vectors.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n4. **window**: Maximum distance between the current and predicted word within a sentence.\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 1)\n5. **min_count**: Ignores all words with total frequency lower than this.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n6. **alpha**: The initial learning rate.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n7. **min_alpha**: Learning rate will linearly drop to min_alpha as training progresses.\n\t* Type: *float*\n\t* Default / Range: 0.025 (value > 0)\n8. **seed**: Random seed. Use the same seed in order to reproduce the same results.\n\t* Type: *int*\n9. **train_epoch**: Number of iterations (epochs) over the corpus.\n\t* Type: *int*\n\t* Default / Range: 100 (value >= 1)\n10. **workers**: Use these many worker threads to train the model (=faster training with multicore machines).\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n11. **hs**: If it is True, hierarchical softmax will be used for model training. If it is False, and Negative is non-zero, negative sampling will be used.\n\t* Type: *bool*\n\t* Default value: True \n12. **negative**: If `Negative` > 0, negative sampling will be used, the int for negative specifies how many noise words should be drawn (usually between 5-20).\n\t* Type: *int*\n\t* Default / Range: 5 (value >= 1)\n13. **ns_exponent**: The exponent used to shape the negative sampling distribution. A value of 1.0 samples exactly in proportion to the frequencies, 0.0 samples all words equally, while a negative value samples low-frequency words more than high-frequency words. The popular default value of 0.75 was chosen by the original Word2Vec paper.\n\t* Type: *float*\n\t* Default / Range: 0.75 (0 <= value <= 1)\n14. **topn**: Number of top-N frequent words to return.\n\t* Type: *int*\n\t* Default / Range: 30 (value >= 2)\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. The outputs of this function are a Word2Vec model and a Table with words and word_vectors columns.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Input Column*** : tokenized_document\n2. **Training Algorithm** : Skip-gram\n3. **Dimension of Vectors** : 100\n4. **Window Size** : 5\n5. **Minimum Count** : 1\n6. **Alpha**: 0.025\n7. **Minimum Alpha** : 0.025\n8. **Seed** : None\n9. **Train epoch** : 100\n10. **Number of Workers** : 1\n11. **Hierarchical softmax** : False\n12. **Negative** : 5\n13. **Negative sampling exponent** : 0.75\n14. **Top N frequent words** : 30\n\n### Python\n```\nfrom brightics.function.textanalytics import word2vec\ninput_table = inputs[0]\nresult = word2vec(table=input_table, input_col='tokenized_document', sg=1,\n size=100, window=5, min_count=1, max_vocab_size=None,\n train_epoch=100, workers=1, alpha=0.025, min_alpha=0.025,\n seed=None, hs=0, negative=5, ns_exponent=0.75, topn=30,\n hashfxn=hash)\noutput_table = result['out_table']\noutput_model = result['model']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. The output of this function is a Word2Vec model and Table with words and word_vectors columns.\n\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$word2vec.json", @@ -486,8 +486,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/word2vec_model.json b/function/python/brightics/function/textanalytics/meta/word2vec_model.json index 7b24323c2..250980829 100644 --- a/function/python/brightics/function/textanalytics/meta/word2vec_model.json +++ b/function/python/brightics/function/textanalytics/meta/word2vec_model.json @@ -9,7 +9,7 @@ "name": "brightics.function.textanalytics$word2vec_model", "context": "python", "label": "Word2Vec Model", - "description": "Word2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nThis function calculates feature vectors of documents (average of word vectors) from input document Table with a Word2Vec model.\n\nReference: \n+ ", + "description": "Word2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nThis function calculates feature vectors of documents (average of word vectors) from input document Table with a Word2Vec model.\n\nReference: \n+ \n+ \"Distributed representations of words and phrases and their compositionality\", Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean, 2013", "tags": [], "version": "3.6", "inputs": { @@ -33,7 +33,7 @@ "params": [], "summary": "This function calculates average vector to represent documents with Word2Vec." }, - "md": "# Word2Vec Model\nThis function calculates average vector to represent documents with Word2Vec.\n\n## Description\nWord2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nThis function calculates feature vectors of documents (average of word vectors) from input document Table with a Word2Vec model.\n\nReference: \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **model***: (Model) Trained Word2Vec model.\n2. **table***: (Table) Text data in a Table. It must contain a document column whose name is same as input model's input column.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains input Table's columns and feature_vector column.\n#### PARAMETER\n\n### Python\n#### USAGE\n\n```\nword2vec_model(table, model)\n```\n\n#### INPUT\n1. **model***: (Model) Trained Word2Vec model.\n2. **table***: (Table) Text data in a Table. It must contain a document column whose name is same as input model's input column.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains input Table's columns and feature_vector column.\n#### PARAMETER\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and tokenized sample_data_tokenizer_eng Table are used as input of Word2Vec Model function. The ouput of this function is a Table that contains feature vector of each document.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n\n\n### Python\n```\nfrom brightics.function.textanalytics import word2vec_model\ninput_table = inputs[0]\ninput_model = models[0]\nresult = word2vec_model(table=input_table, model=input_model)\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and tokenized sample_data_tokenizer_eng Table are used as input of word2vec_model function. The ouput of this function is a Table that contains feature vector of each document.\n", + "md": "# Word2Vec Model\nThis function calculates average vector to represent documents with Word2Vec.\n\n## Description\nWord2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nThis function calculates feature vectors of documents (average of word vectors) from input document Table with a Word2Vec model.\n\nReference: \n+ \n+ \"Distributed representations of words and phrases and their compositionality\", Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean, 2013\n\n\n## Properties\n### VA\n#### INPUT\n1. **model***: (Model) Trained Word2Vec model.\n2. **table***: (Table) Text data in a Table. It must contain a document column whose name is same as input model's input column.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains input Table's columns and feature_vector column.\n#### PARAMETER\n\n### Python\n#### USAGE\n\n```\nword2vec_model(table, model)\n```\n\n#### INPUT\n1. **model***: (Model) Trained Word2Vec model.\n2. **table***: (Table) Text data in a Table. It must contain a document column whose name is same as input model's input column.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains input Table's columns and feature_vector column.\n#### PARAMETER\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and tokenized sample_data_tokenizer_eng Table are used as input of Word2Vec Model function. The ouput of this function is a Table that contains feature vector of each document.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n\n\n### Python\n```\nfrom brightics.function.textanalytics import word2vec_model\ninput_table = inputs[0]\ninput_model = models[0]\nresult = word2vec_model(table=input_table, model=input_model)\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and tokenized sample_data_tokenizer_eng Table are used as input of word2vec_model function. The ouput of this function is a Table that contains feature vector of each document.\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$word2vec_model.json", @@ -278,8 +278,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/meta/word2vec_similarity2.json b/function/python/brightics/function/textanalytics/meta/word2vec_similarity2.json index 1196fc75e..667d5e894 100644 --- a/function/python/brightics/function/textanalytics/meta/word2vec_similarity2.json +++ b/function/python/brightics/function/textanalytics/meta/word2vec_similarity2.json @@ -9,7 +9,7 @@ "name": "brightics.function.textanalytics$word2vec_similarity2", "context": "python", "label": "Word2Vec Similarity", - "description": "Word2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nWord2Vec Similarity finds the top-N most similar words. Positive words contribute positively towards the similarity, negative words negatively.\nThis method computes cosine similarity between a simple mean of the projection weight vectors of the given words and the vectors for each word in the model. The method corresponds to the word-analogy and distance scripts in the original word2vec implementation.\n\nReference: \n+ \n+ ", + "description": "Word2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nWord2Vec Similarity finds the top-N most similar words. Positive words contribute positively towards the similarity, negative words negatively.\nThis method computes cosine similarity between a simple mean of the projection weight vectors of the given words and the vectors for each word in the model. The method corresponds to the word-analogy and distance scripts in the original word2vec implementation.\n\nReference: \n+ \n+ \n+ \"Distributed representations of words and phrases and their compositionality\", Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean, 2013", "tags": [], "version": "3.6", "inputs": { @@ -75,7 +75,7 @@ ], "summary": "This function caluate Word2Vec Similarity." }, - "md": "# Word2Vec Similarity\nThis function caluate Word2Vec Similarity.\n\n## Description\nWord2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nWord2Vec Similarity finds the top-N most similar words. Positive words contribute positively towards the similarity, negative words negatively.\nThis method computes cosine similarity between a simple mean of the projection weight vectors of the given words and the vectors for each word in the model. The method corresponds to the word-analogy and distance scripts in the original word2vec implementation.\n\nReference: \n+ \n+ \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Words data in a Table. the words should be in the train data.\n2. **model***: (Model) Trained Word2Vec model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains Word2Vec similarity.\n#### PARAMETER\n1. **Positive Column**: Column of words that contribute positively.\n\n2. **Negative Column**: Column of words that contribute negatively.\n\n3. **Top N similar words**: Number of top-N similar words to return.\n\n\n### Python\n#### USAGE\n\n```\nword2vec_similarity2(table, model, positive_col=None, negative_col=None, topn=1)\n```\n\n#### INPUT\n1. **table***: (Table) Words data in a Table. the words should be in the train data.\n2. **model***: (Model) Trained Word2Vec model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains Word2Vec similarity.\n#### PARAMETER\n1. **positive_col**: Column of words that contribute positively.\n\t* Type: *str*\n2. **negative_col**: Column of words that contribute negatively.\n\t* Type: *str*\n3. **topn**: Number of top-N similar words to return.\n\t* Type: *int*\n\t* Default / Range: (value >= 1)\n\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and output Table are uesd as input of Word2Vec Similarity function. The output of this function is a Table that contain synonyms and similarity of words.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Positive Column**: words\n2. **Negative Column**: None\n3. **Top N similar words**: 1\n\n### Python\n```\nfrom brightics.function.textanalytics import word2vec_similarity2\ninput_table = inputs[0]\ninput_model = models[0]\nresult = word2vec_similarity2(table=input_table, model=input_model,\n positive_col='words', negative_col=None,\n topn=1)\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and output Table are uesd as input of Word2Vec Similarity function. The output of this function is a Table that contain synonyms and similarity of words.\n\n\n", + "md": "# Word2Vec Similarity\nThis function caluate Word2Vec Similarity.\n\n## Description\nWord2vec is a group of related models that are used to produce word embeddings. These models are shallow, two-layer neural networks that are trained to reconstruct linguistic contexts of words. Word2vec takes as its input a large corpus of text and produces a vector space, typically of several hundred dimensions, with each unique word in the corpus being assigned a corresponding vector in the space. Word vectors are positioned in the vector space such that words that share common contexts in the corpus are located in close proximity to one another in the space.\n\nWord2Vec Similarity finds the top-N most similar words. Positive words contribute positively towards the similarity, negative words negatively.\nThis method computes cosine similarity between a simple mean of the projection weight vectors of the given words and the vectors for each word in the model. The method corresponds to the word-analogy and distance scripts in the original word2vec implementation.\n\nReference: \n+ \n+ \n+ \"Distributed representations of words and phrases and their compositionality\", Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean, 2013\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Words data in a Table. the words should be in the train data.\n2. **model***: (Model) Trained Word2Vec model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains Word2Vec similarity.\n#### PARAMETER\n1. **Positive Column**: Column of words that contribute positively.\n\n2. **Negative Column**: Column of words that contribute negatively.\n\n3. **Top N similar words**: Number of top-N similar words to return.\n\n\n### Python\n#### USAGE\n\n```\nword2vec_similarity2(table, model, positive_col=None, negative_col=None, topn=1)\n```\n\n#### INPUT\n1. **table***: (Table) Words data in a Table. the words should be in the train data.\n2. **model***: (Model) Trained Word2Vec model.\n#### OUTPUT\n1. **out_table**: (Table) Output Table. It contains Word2Vec similarity.\n#### PARAMETER\n1. **positive_col**: Column of words that contribute positively.\n\t* Type: *str*\n2. **negative_col**: Column of words that contribute negatively.\n\t* Type: *str*\n3. **topn**: Number of top-N similar words to return.\n\t* Type: *int*\n\t* Default / Range: (value >= 1)\n\n\n## Example\n### VA\n\n\n**[Sample Model]**\n\n\n\n\n\n
In this tutorial workflow, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and output Table are uesd as input of Word2Vec Similarity function. The output of this function is a Table that contain synonyms and similarity of words.\nThe parameter settings used in the function are shown below. \n\n##### ++Parameters++\n1. **Positive Column**: words\n2. **Negative Column**: None\n3. **Top N similar words**: 1\n\n### Python\n```\nfrom brightics.function.textanalytics import word2vec_similarity2\ninput_table = inputs[0]\ninput_model = models[0]\nresult = word2vec_similarity2(table=input_table, model=input_model,\n positive_col='words', negative_col=None,\n topn=1)\noutput = result['out_table']\n```\n\n
In this python script, sample_data_tokenizer_eng data is used as input of Word2Vec function after tokenizing. And the Word2Vec output model and output Table are uesd as input of Word2Vec Similarity function. The output of this function is a Table that contain synonyms and similarity of words.\n\n\n", "exampleModels": [ { "fileName": "brightics.function.textanalytics$word2vec_similarity2.json", @@ -320,8 +320,8 @@ }, { "persist-mode": "auto", - "func": "brightics.function.textanalytics$tokenizer_eng51532", - "name": "brightics.function.textanalytics$tokenizer_eng", + "func": "brightics.function.textanalytics$tokenizer_eng2", + "name": "brightics.function.textanalytics$tokenizer_eng2", "param": { "stemming": false, "pos_extraction": [ diff --git a/function/python/brightics/function/textanalytics/ner.py b/function/python/brightics/function/textanalytics/ner.py new file mode 100644 index 000000000..63d81b0f0 --- /dev/null +++ b/function/python/brightics/function/textanalytics/ner.py @@ -0,0 +1,482 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +import nltk +from bs4 import BeautifulSoup +from nltk.tokenize import word_tokenize +from nltk import ne_chunk +from nltk.tree import Tree +import numpy as np +import pandas as pd +import en_core_web_sm +import re +import sklearn_crfsuite +import pickle + +from brightics.function.textanalytics.split_sentences import split_sentences +from brightics.function.textanalytics.tokenizer2 import tokenizer_kor2, tokenizer_eng2 +from brightics.function.utils import _model_dict +from brightics.common.repr import BrtcReprBuilder +from brightics.common.repr import strip_margin +from brightics.common.repr import dict2MD +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import raise_runtime_error +from brightics.common.validation import validate, greater_than_or_equal_to + +REPLACE_NO_SPACE = re.compile(r"[.;:!\'?,\"()\[\]]") +REGEX_EXTRACT_POSTAG_KOR = re.compile(r'^(.+)/([\S]+)$') +REGEX_EXTRACT_POSTAG_ENG = re.compile(r'^(.+)\(([\S]+)\)$') +REGEX_CHINESE = re.compile(r'[⺀-⺙⺛-⻳⼀-⿕々〇〡-〩〸-〺〻㐀-䶵一-鿃豈-鶴侮-頻並-龎]+') +METHOD_NLTK = 'nltk' +METHOD_SPACY = 'spacy' +METHOD_STANFORD = 'stanford' +METHOD_CRF = 'crf' +DEFAULT_LABELS_NLTK = ['FACILITY', 'GPE', 'GSP', 'LOCATION', 'ORGANIZATION', 'PERSON'] +DEFAULT_LABELS_SPACY = ['CARDINAL', 'DATE', 'EVENT', 'FAC', 'GPE', 'LANGUAGE', 'LAW', 'LOC', 'MONEY', 'NORP', 'ORDINAL', + 'ORG', 'PERCENT', 'PERSON', 'PRODUCT', 'QUANTITY', 'TIME', 'WORK_OF_ART'] +DEFAULT_LABELS_CRF_ENG = ['ART', 'EVE', 'GEO', 'GPE', 'NAT', 'ORG', 'PER', 'TIM'] +DICT_NE_LABEL_KOR = {'PS': 'PERSON', + 'DT': 'DATE', + 'OG': 'ORGANIZATION', + 'LC': 'LOCATION', + 'TI': 'TIME'} +DICT_NE_LABEL_ENG = {'geo': 'GEOGRAPHICAL_ENTITY', + 'org': 'ORGANIZATION', + 'per': 'PERSON', + 'gpe': 'GEO_POLITICAL_ENTITY', + 'tim': 'TIME', + 'art': 'ARTIFACT', + 'eve': 'EVENT', + 'nat': 'NATURAL_PHENOMENON'} + + +def ner_eng(table, **params): + check_required_parameters(_ner_eng, params, ['table']) + return _ner_eng(table, **params) + + +def _ner_eng(table, input_cols, method='nltk', ne_extraction_nltk=None, ne_extraction_spacy=None, + ne_extraction_crf=None, new_col_prefix='named_entity'): + out_table = table.copy() + if ne_extraction_nltk is None: + ne_extraction_nltk = DEFAULT_LABELS_NLTK + if ne_extraction_spacy is None: + ne_extraction_spacy = DEFAULT_LABELS_SPACY + if ne_extraction_crf is None: + ne_extraction_crf = DEFAULT_LABELS_CRF_ENG + + if method == METHOD_CRF: + # Load a CRF model pre-trained with GMB corpus and sklearn_crfsuite. + # https://www.kaggle.com/abhinavwalia95/entity-annotated-corpus/version/3#ner_dataset.csv + with open('brightics/function/textanalytics/data/english_ner_model.pickle', 'rb') as f: + crf_model = pickle.load(f) + model = {'crf_model': crf_model} + res = _ner_crf_predict(table, model, input_cols, language='eng', new_col_prefix=new_col_prefix, + extraction_set=ne_extraction_crf) + out_table = res['out_table'] + + else: + def process_text(text): + if method == METHOD_NLTK: + return process_text_nltk(text, ne_extraction_nltk) + elif method == METHOD_SPACY: + return process_text_spacy(text, ne_extraction_spacy) + elif method == METHOD_STANFORD: + return process_text_stanford(text) + else: + raise_runtime_error("Invalid method name.") + + for col in input_cols: + docs = table[col] + docs_result = docs.apply(process_text) + out_table['{prefix}_{col}'.format(prefix=new_col_prefix, col=col)] = docs_result + + return {'out_table': out_table} + + +def process_text_nltk(text, extraction_set): + text_filtered_html = BeautifulSoup(text).get_text() + text_preprocessed = REPLACE_NO_SPACE.sub("", text_filtered_html) + text_tokenized = word_tokenize(text_preprocessed) + text_tagged = nltk.pos_tag(text_tokenized) + chunk_tree = ne_chunk(text_tagged) + named_entities = [" ".join([token for token, pos in chunk.leaves()]) + "({label})".format(label=chunk.label()) + for chunk in chunk_tree if type(chunk) == Tree and chunk.label() in extraction_set] + return named_entities + + +def process_text_spacy(text, extraction_set): + nlp = en_core_web_sm.load() + doc = nlp(text) + named_entities = ["{token}({label})".format(token=word.text, label=word.label_) + for word in doc.ents if word.label_ in extraction_set] + return named_entities + + +# TODO: Available after implementation of Stanford library +def process_text_stanford(text): + from nltk.tag import StanfordNERTagger + tagger = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz') + tagged = tagger.tag(text.split()) + named_entities = ["{token}({label})".format(token=word, label=label) + for word, label in tagged if label != 'O'] + return named_entities + + +def ner_kor(table, **params): + check_required_parameters(_ner_kor, params, ['table']) + return _ner_kor(table, **params) + + +# TODO: Incomplete right now since the corpus is compatible with MeCab Tokenizer +def _ner_kor(table, input_cols, ne_extraction_crf=None, new_col_prefix='named_entity'): + # Load a CRF model pre-trained with KoreanNERCorpus and sklearn_crfsuite. + # https://github.com/machinereading/KoreanNERCorpus + with open('brightics/function/textanalytics/data/korean_ner_model.pickle', 'rb') as f: + crf_model = pickle.load(f) + model = {'crf_model': crf_model} + res = _ner_crf_predict(table, model, input_cols, language='kor', new_col_prefix=new_col_prefix, + extraction_set=ne_extraction_crf) + out_table = res['out_table'] + return {'out_table': out_table} + + +def _transform_token_kor(pos_tagged_token): # Rule-based transformation from Tw into MeCab pos system + tag = REGEX_EXTRACT_POSTAG_KOR.search(pos_tagged_token) + token, pos = tag.group(1), tag.group(2) + if pos == 'Adjective': + pos = 'VA' + elif pos == 'Adverb': + pos = 'MAG' + elif pos == 'Alpha': + pos = 'SL' + elif pos == 'Conjunction': + pos = 'MAJ' + elif pos == 'Determiner': + pos = 'MM' + elif pos == 'Eomi': + if token in ['가', '다', '데요', '까', '라', '니다', '니다.', '거든', '고', '냐', '네', '느냐', '는다', '는데', '다', + '다네', '더라고', '며', '습니다', '아', '아라', '아서다', '어', '어요', '요', '을까', '자', '지만']: + pos = 'EF' + elif token in ['기', '음']: + pos = 'ETN' + elif token in ['다는', '냐는', '느냐는', '는', '는다는', '다는', '단', '더라는', '던', '라는', '란', '려는', '려던', '은', + '을', '자는', '잘']: + pos = 'ETM' + else: + pos = 'EC' + elif pos == 'Exclamation': + pos = 'IC' + elif pos == 'Foreign': + if REGEX_CHINESE.findall(token): + pos = 'SH' + else: + pos = 'SL' + elif pos == 'Josa': + if token in ['이', '가', '께서']: + pos = 'JKS' + elif token == '의': + pos = 'JKG' + elif token in ['을', '를']: + pos = 'JKO' + elif token in ['같이', '께', '랑', '로', '로부터', '로서', '로써', '루', '만큼', '보다', '서', '서부터', '에', '에게', + '에다', '에서', '에서부터', '으로', '으로부터', '으로서', '으로써', '처럼', '하고', '한테', '한테서']: + pos = 'JKB' + elif token in ['여', '야']: + pos = 'JKV' + elif token in ['고', '라고', '이라고']: + pos = 'JKQ' + elif token in ['까지', '는', '다', '대로', '도', '두', '란', '마다', '마저', '만', '밖에', '부터', '뿐', '사', + '야', '요', '은', '이나', '이나마', '이란', '이야', '조차']: + pos = 'JX' + elif token in ['과', '나', '와', '이나', '이랑']: + pos = 'JC' + else: + pos = 'JKB' + elif pos == 'Noun': + if token in ['거기', '그', '그것', '그곳', '그녀', '그대', '나', '내', '너', '네', '누구', '당신', '머', '무엇', '뭐', + '아무개', '어디', '여기', '여러분', '우리', '이', '이거', '이것', '이곳', '저', '저희', '제']: + pos = 'NP' + elif token in ['첫째', '둘째', '셋째', '넷째', '하나', '둘', '셋', '넷', '다섯', '여섯', '일곱', '여덟', '아홉', '열', + '일', '이', '삼', '사', '오', '육', '칠', '팔', '구', '십', '백', '천', '만', '십만', '백만', '천만', + '억', '십억', '백억', '천억', '조', '십조', '백조', '천조', '경', '수십', '수백', '수천', '수만', '수십만', + '수백만', '수천만', '수억', '수십억', '수백억', '수천억']: + pos = 'NR' + elif token in ['가량', '가지', '간', '개', '개교', '개국', '개년', '개사', '개선', '개소', '개월', '거', '거리', '건', + '것', '격', '겸', '고', '구', '군데', '권', '그루', '기', '기가', '나름', '내', '년', '년대', '년도', + '년차', '놈', '달러', '대', '대로', '데', '도', '동', '듯', '등', '때문', '량', '리', '마리', '마일', + '만', '만큼', '말', '매', '명', '바', '바퀴', '박', '발', '발짝', '번', '부', '분', '뿐', '살', '석', + '설', '세', '센트', '셈', '수', '시', '식', '심', '씨', '양', '어치', '엔', '외', '원', '월', '위', + '이', '인방', '인승', '인치', '일', '자', '장', '적', '전', '점', '정', '조', '주', '주년', '주일', '줄', + '중', '즈음', '지', '쪽', '쯤', '차', '차전', '채', '척', '천', '초', '측', '킬로미터', '터', '톤', '톨', + '통', '투', '판', '편', '평', '푼', '한', '할', '행', '호', '화', '회', '미터', '밀리미터', '센티미터', + '센치미터', '리터', '밀리리터', '데시리터', '킬로리터', '킬로', '킬로그램', '그램', '톤', '밀리그램', + '나노미터', '나노그램', '파운드', '유로', '위안']: + pos = 'NNB' + else: + pos = 'NNG' + elif pos == 'Number': + pos = 'SN' + elif pos == 'PreEomi': + pos = 'EP' + elif pos == 'Punctuation': + if token in ['!', ',', '.', '?', '.']: + pos = 'SF' + elif token == '…': + pos = 'SE' + elif token in ['(', '[']: + pos = 'SSO' + elif token in [')', ']']: + pos = 'SSC' + else: + pos = 'SC' + elif pos == 'Suffix': + pass + elif pos == 'Verb': + if token == '이': + pos = 'VCP' + elif token == '아니': + pos = 'VCN' + elif token in ['가', '계시', '나', '나가', '내', '놓', '달', '두', '드리', '들', '말', '못하', '버리', '보', '싶', '않', + '오', '있', '주', '지', '프', '하']: + pos = 'VX' + else: + pos = 'VV' + + return token, pos, '' + + +def _transform_tokens_kor(pos_tagged_tokens): + return [_transform_token_kor(token) for token in pos_tagged_tokens] + + +def _transform_token_eng(pos_tagged_token): + tag = REGEX_EXTRACT_POSTAG_ENG.search(pos_tagged_token) + return tag.group(1), tag.group(2), '' + + +def _transform_tokens_eng(pos_tagged_tokens): + return [_transform_token_eng(token) for token in pos_tagged_tokens] + + +""" + The following functions word2features, sent2features, sent2labels, and sent2tokens are excerpted from + sklearn-crfsuite tutorial page. + © Copyright 2015, Mikhail Korobov. + https://github.com/TeamHG-Memex/sklearn-crfsuite/blob/master/docs/CoNLL2002.ipynb +""" + + +def word2features(sent, i): + word = sent[i][0] + postag = sent[i][1] + + features = { + 'bias': 1.0, + 'word.lower()': word.lower(), + 'word[-3:]': word[-3:], + 'word[-2:]': word[-2:], + 'word.isupper()': word.isupper(), + 'word.istitle()': word.istitle(), + 'word.isdigit()': word.isdigit(), + 'postag': postag, + 'postag[:2]': postag[:2], + } + if i > 0: + word1 = sent[i-1][0] + postag1 = sent[i-1][1] + features.update({ + '-1:word.lower()': word1.lower(), + '-1:word.istitle()': word1.istitle(), + '-1:word.isupper()': word1.isupper(), + '-1:postag': postag1, + '-1:postag[:2]': postag1[:2], + }) + else: + features['BOS'] = True + + if i < len(sent)-1: + word1 = sent[i+1][0] + postag1 = sent[i+1][1] + features.update({ + '+1:word.lower()': word1.lower(), + '+1:word.istitle()': word1.istitle(), + '+1:word.isupper()': word1.isupper(), + '+1:postag': postag1, + '+1:postag[:2]': postag1[:2], + }) + else: + features['EOS'] = True + + return features + + +def sent2features(sent): + return [word2features(sent, i) for i in range(len(sent))] + + +def sent2labels(sent): + return [label for token, postag, label in sent] + + +def sent2tokens(sent): + return [token for token, postag, label in sent] + + +def gen_ne_list(token_label_list, extraction_set=None): + res = [] + current_ne = '' + current_tag = '' + for token_label in token_label_list: + token = token_label[0] + label = token_label[1] + if label[0] == 'I': + current_ne = ' '.join([current_ne, token]) + else: + if (extraction_set is not None and current_tag in extraction_set) \ + or (extraction_set is None and current_tag != ''): + res.append("{ne}({tag})".format(ne=current_ne, tag=current_tag)) + if label[0] == 'B': + current_tag = label[2:].upper() + current_ne = token + else: + current_tag = '' + if (extraction_set is not None and current_tag in extraction_set) \ + or (extraction_set is None and current_tag != ''): + res.append("{ne}({tag})".format(ne=current_ne, tag=current_tag)) + return res + + +def ner_crf_train(table, **params): + check_required_parameters(_ner_crf_train, params, ['table']) + params = get_default_from_parameters_if_required(params, _ner_crf_train) + param_validation_check = [greater_than_or_equal_to(params, 0, 'c1'), + greater_than_or_equal_to(params, 0, 'c2'), + greater_than_or_equal_to(params, 1, 'max_iterations')] + validate(*param_validation_check) + + return _ner_crf_train(table, **params) + + +def _ner_crf_train(table, sentence_col, token_col, pos_col, label_col, algorithm='lbfgs', c1=0.1, c2=0.1, + max_iterations=100, all_possible_transitions=True): + df = table.apply(lambda row: [row[sentence_col], [(row[token_col], row[pos_col], row[label_col])]], + axis=1, result_type='expand') + df.columns = ['sent_id', 'sent'] + input_df = df.groupby('sent_id')['sent'].sum() + train_set = input_df.values + features_train = [sent2features(s) for s in train_set] + label_train = [sent2labels(s) for s in train_set] + crf_params = {"algorithm": algorithm, + "max_iterations": max_iterations, + "all_possible_transitions": all_possible_transitions} + if algorithm == 'lbfgs': + crf_params['c1'] = c1 + crf_params['c2'] = c2 + elif algorithm == 'l2sgd': + crf_params['c2'] = c2 + crf = sklearn_crfsuite.CRF(**crf_params) + crf_model = crf.fit(features_train, label_train) + + appearing_labels = list(set([label[2:].upper() for label in table[label_col].values if label[0] == 'B'])) + num_tokens = len(df.index) + num_sentences = len(input_df.index) + + params = {'Sentence column': sentence_col, + 'Token column': token_col, + 'POS column': pos_col, + 'Label column': label_col, + 'Algorithm': algorithm, + 'c1': c1, + 'c2': c2, + 'Maximum iterations': max_iterations, + 'All possible transitions': all_possible_transitions} + + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## Named Entity Recognition CRF Train Result + | ### Number of tokens + | {num_tokens} + | + | ### Number of sentences + | {num_sentences} + | + | ### Appearing labels + | {appearing_labels} + | + | ### Parameters + | {params} + """.format(num_tokens=num_tokens, num_sentences=num_sentences, appearing_labels=appearing_labels, + params=dict2MD(params)))) + + model = _model_dict('crf_ner_model') + model['sentence'] = sentence_col + model['token'] = token_col + model['pos'] = pos_col + model['label'] = label_col + model['algorithm'] = algorithm + model['c1'] = c1 + model['c2'] = c2 + model['max_iterations'] = max_iterations + model['all_possible_transitions'] = all_possible_transitions + model['crf_model'] = crf_model + model['_repr_brtc_'] = rb.get() + + return {'model': model} + + +def ner_crf_predict(table, **params): + check_required_parameters(_ner_crf_predict, params, ['table']) + return _ner_crf_predict(table, **params) + + +def _ner_crf_predict(table, model, input_cols, language='eng', new_col_prefix='named_entity', extraction_set=None): + out_table = table.copy() + crf_model = model['crf_model'] + + for col in input_cols: + # Split sentences and tokenize using Brightics functions + df_split_sentences = split_sentences(table, input_col=col, language=language)['out_table'].reset_index() + if language == 'eng': + df_tokenized = tokenizer_eng2(df_split_sentences, input_cols=['sentence'], is_tagged=True, + stemming=False, lower_case=False)['out_table'] + else: # language == 'kor' + df_tokenized = tokenizer_kor2(df_split_sentences, input_cols=['sentence'], is_tagged=True, + stemming=False)['out_table'] + col_doc_id = df_tokenized['doc_id'] + col_tokenized = df_tokenized['tokenized_sentence'] + + # Transform to CRF input format + if language == 'eng': + transformer = _transform_tokens_eng + else: # language == 'kor': + transformer = _transform_tokens_kor + col_transformed = col_tokenized.apply(transformer) + features_raw = col_transformed.tolist() + features = [sent2features(sentence) for sentence in features_raw] + + # Run the model + labels = crf_model.predict(features) + token_labels = [[[token, label] for (token, pos, _), label in zip(i, j)] + for i, j in zip(features_raw, labels)] + ne_list = [gen_ne_list(token_label_list, extraction_set) for token_label_list in token_labels] + df = pd.DataFrame({'doc_id': col_doc_id, 'ne_list': ne_list}) + df_group_by_doc_id = df.groupby('doc_id')['ne_list'].sum() + col_ne_list = df_group_by_doc_id.reset_index(drop=True) + out_table['{prefix}_{col}'.format(prefix=new_col_prefix, col=col)] = col_ne_list + + return {'out_table': out_table} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/regex.py b/function/python/brightics/function/textanalytics/regex.py new file mode 100644 index 000000000..863f65690 --- /dev/null +++ b/function/python/brightics/function/textanalytics/regex.py @@ -0,0 +1,84 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.utils import check_required_parameters +from brightics.common.exception import BrighticsFunctionException +from .data import regex_format_dict +import re + + +def regex(table, **params): + check_required_parameters(_regex, params, ['table']) + return _regex(table, **params) + + +def _regex(table, input_cols, transformation_mode='extract', find_mode='all', pattern='', + user_dict_pattern='', custom_pattern='', replacement_string='', user_dict=None): + out_table = table.copy() + pattern_dict = regex_format_dict.pattern_dict + user_pattern_dict = {} + if user_dict is not None: + user_patterns = user_dict.values + for user_pattern in user_patterns: + user_pattern_name = user_pattern[0] + user_pattern_content = user_pattern[1] + user_pattern_dict[user_pattern_name] = user_pattern_dict.get(user_pattern_name, []) + [user_pattern_content] + user_pattern_dict = {key: r'|'.join(value) for key, value in user_pattern_dict.items()} + + if pattern == '': + raise BrighticsFunctionException.from_errors([{'0100': "Please choose a pattern."}]) + if pattern == 'custom': + raw_pattern = custom_pattern + elif pattern == 'user_dictionary': + raw_pattern = user_pattern_dict.get(user_dict_pattern) + if raw_pattern is None: + raise BrighticsFunctionException.from_errors( + [{'0100': user_dict_pattern + " is not a valid pattern name in the user dictionary."}]) + else: + raw_pattern = pattern_dict.get(pattern) + regex_pattern = re.compile(raw_pattern) + + def transformation(text): + if transformation_mode == 'extract': + if find_mode == 'first': + result = regex_pattern.search(text) + if result is None: + return "" + else: + return result.group() + else: # find_mode == 'all' + return regex_pattern.findall(text) + elif transformation_mode == 'replace': + if find_mode == 'first': + return regex_pattern.sub(replacement_string, text, 1) + else: # find_mode == 'all' + return regex_pattern.sub(replacement_string, text) + elif transformation_mode == 'remove': + if find_mode == 'first': + return regex_pattern.sub("", text, 1) + else: # find_mode == 'all' + return regex_pattern.sub("", text) + else: # transformation_mode == 'split' + if find_mode == 'first': + return regex_pattern.split(text, 1) + else: # find_mode == 'all' + return regex_pattern.split(text) + + for col in input_cols: + result_col = table[col].apply(transformation) + out_table['regex_' + col] = result_col + + return {'out_table': out_table} diff --git a/function/python/brightics/function/textanalytics/search.py b/function/python/brightics/function/textanalytics/search.py index 96d773270..88179daab 100644 --- a/function/python/brightics/function/textanalytics/search.py +++ b/function/python/brightics/function/textanalytics/search.py @@ -139,7 +139,8 @@ def _search2(table, input_cols, hold_cols=None, bool_search="or", keyword_dict=N raise ValueError('At least one of Search Words and User Dictionary must be included.') input_table = table[input_cols] - + columns = table.columns + if hold_cols is None: hold_table = table.drop(input_cols, axis=1) length_ht = len(table.columns) - len(input_cols) @@ -166,5 +167,8 @@ def _search2(table, input_cols, hold_cols=None, bool_search="or", keyword_dict=N out_table = pd.concat([input_table[cond], hold_table], axis=1).dropna(thresh=length_ht + 1).reset_index(drop=True) else: out_table = pd.concat([input_table[cond], hold_table], axis=1) - + + if hold_cols is None: + out_table = out_table[columns] + return {'out_table': out_table} diff --git a/function/python/brightics/function/textanalytics/short_text_topic_modeling_gsdmm/__init__.py b/function/python/brightics/function/textanalytics/short_text_topic_modeling_gsdmm/__init__.py new file mode 100644 index 000000000..abe31a458 --- /dev/null +++ b/function/python/brightics/function/textanalytics/short_text_topic_modeling_gsdmm/__init__.py @@ -0,0 +1,17 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from . import gsdmm_rwalk diff --git a/function/python/brightics/function/textanalytics/short_text_topic_modeling_gsdmm/gsdmm_rwalk.py b/function/python/brightics/function/textanalytics/short_text_topic_modeling_gsdmm/gsdmm_rwalk.py new file mode 100644 index 000000000..94e69e245 --- /dev/null +++ b/function/python/brightics/function/textanalytics/short_text_topic_modeling_gsdmm/gsdmm_rwalk.py @@ -0,0 +1,226 @@ +""" +MIT License + +Copyright (c) 2017 Ryan Walker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + + +from numpy.random import multinomial +from numpy import log, exp +from numpy import argmax +import json + + +class MovieGroupProcess: + def __init__(self, K=8, alpha=0.1, beta=0.1, n_iters=30): + ''' + A MovieGroupProcess is a conceptual model introduced by Yin and Wang 2014 to + describe their Gibbs sampling algorithm for a Dirichlet Mixture Model for the + clustering short text documents. + Reference: http://dbgroup.cs.tsinghua.edu.cn/wangjy/papers/KDD14-GSDMM.pdf + Imagine a professor is leading a film class. At the start of the class, the students + are randomly assigned to K tables. Before class begins, the students make lists of + their favorite films. The teacher reads the role n_iters times. When + a student is called, the student must select a new table satisfying either: + 1) The new table has more students than the current table. + OR + 2) The new table has students with similar lists of favorite movies. + :param K: int + Upper bound on the number of possible clusters. Typically many fewer + :param alpha: float between 0 and 1 + Alpha controls the probability that a student will join a table that is currently empty + When alpha is 0, no one will join an empty table. + :param beta: float between 0 and 1 + Beta controls the student's affinity for other students with similar interests. A low beta means + that students desire to sit with students of similar interests. A high beta means they are less + concerned with affinity and are more influenced by the popularity of a table + :param n_iters: + ''' + self.K = K + self.alpha = alpha + self.beta = beta + self.n_iters = n_iters + + # slots for computed variables + self.number_docs = None + self.vocab_size = None + self.cluster_doc_count = [0 for _ in range(K)] + self.cluster_word_count = [0 for _ in range(K)] + self.cluster_word_distribution = [{} for i in range(K)] + + @staticmethod + def from_data(K, alpha, beta, D, vocab_size, cluster_doc_count, cluster_word_count, cluster_word_distribution): + ''' + Reconstitute a MovieGroupProcess from previously fit data + :param K: + :param alpha: + :param beta: + :param D: + :param vocab_size: + :param cluster_doc_count: + :param cluster_word_count: + :param cluster_word_distribution: + :return: + ''' + mgp = MovieGroupProcess(K, alpha, beta, n_iters=30) + mgp.number_docs = D + mgp.vocab_size = vocab_size + mgp.cluster_doc_count = cluster_doc_count + mgp.cluster_word_count = cluster_word_count + mgp.cluster_word_distribution = cluster_word_distribution + return mgp + + @staticmethod + def _sample(p): + ''' + Sample with probability vector p from a multinomial distribution + :param p: list + List of probabilities representing probability vector for the multinomial distribution + :return: int + index of randomly selected output + ''' + return [i for i, entry in enumerate(multinomial(1, p)) if entry != 0][0] + + def fit(self, docs, vocab_size): + ''' + Cluster the input documents + :param docs: list of list + list of lists containing the unique token set of each document + :param V: total vocabulary size for each document + :return: list of length len(doc) + cluster label for each document + ''' + alpha, beta, K, n_iters, V = self.alpha, self.beta, self.K, self.n_iters, vocab_size + + D = len(docs) + self.number_docs = D + self.vocab_size = vocab_size + + # unpack to easy var names + m_z, n_z, n_z_w = self.cluster_doc_count, self.cluster_word_count, self.cluster_word_distribution + cluster_count = K + d_z = [None for i in range(len(docs))] + + # initialize the clusters + for i, doc in enumerate(docs): + + # choose a random initial cluster for the doc + z = self._sample([1.0 / K for _ in range(K)]) + d_z[i] = z + m_z[z] += 1 + n_z[z] += len(doc) + + for word in doc: + if word not in n_z_w[z]: + n_z_w[z][word] = 0 + n_z_w[z][word] += 1 + + for _iter in range(n_iters): + total_transfers = 0 + + for i, doc in enumerate(docs): + + # remove the doc from it's current cluster + z_old = d_z[i] + + m_z[z_old] -= 1 + n_z[z_old] -= len(doc) + + for word in doc: + n_z_w[z_old][word] -= 1 + + # compact dictionary to save space + if n_z_w[z_old][word] == 0: + del n_z_w[z_old][word] + + # draw sample from distribution to find new cluster + p = self.score(doc) + z_new = self._sample(p) + + # transfer doc to the new cluster + if z_new != z_old: + total_transfers += 1 + + d_z[i] = z_new + m_z[z_new] += 1 + n_z[z_new] += len(doc) + + for word in doc: + if word not in n_z_w[z_new]: + n_z_w[z_new][word] = 0 + n_z_w[z_new][word] += 1 + + cluster_count_new = sum([1 for v in m_z if v > 0]) + print("In stage %d: transferred %d clusters with %d clusters populated" % ( + _iter, total_transfers, cluster_count_new)) + if total_transfers == 0 and cluster_count_new == cluster_count and _iter > 25: + print("Converged. Breaking out.") + break + cluster_count = cluster_count_new + self.cluster_word_distribution = n_z_w + return d_z + + def score(self, doc): + ''' + Score a document + Implements formula (3) of Yin and Wang 2014. + http://dbgroup.cs.tsinghua.edu.cn/wangjy/papers/KDD14-GSDMM.pdf + :param doc: list[str]: The doc token stream + :return: list[float]: A length K probability vector where each component represents + the probability of the document appearing in a particular cluster + ''' + alpha, beta, K, V, D = self.alpha, self.beta, self.K, self.vocab_size, self.number_docs + m_z, n_z, n_z_w = self.cluster_doc_count, self.cluster_word_count, self.cluster_word_distribution + + p = [0 for _ in range(K)] + + # We break the formula into the following pieces + # p = N1*N2/(D1*D2) = exp(lN1 - lD1 + lN2 - lD2) + # lN1 = log(m_z[z] + alpha) + # lN2 = log(D - 1 + K*alpha) + # lN2 = log(product(n_z_w[w] + beta)) = sum(log(n_z_w[w] + beta)) + # lD2 = log(product(n_z[d] + V*beta + i -1)) = sum(log(n_z[d] + V*beta + i -1)) + + lD1 = log(D - 1 + K * alpha) + doc_size = len(doc) + for label in range(K): + lN1 = log(m_z[label] + alpha) + lN2 = 0 + lD2 = 0 + for word in doc: + lN2 += log(n_z_w[label].get(word, 0) + beta) + for j in range(1, doc_size + 1): + lD2 += log(n_z[label] + V * beta + j - 1) + p[label] = exp(lN1 - lD1 + lN2 - lD2) + + # normalize the probability vector + pnorm = sum(p) + pnorm = pnorm if pnorm > 0 else 1 + return [pp / pnorm for pp in p] + + def choose_best_label(self, doc): + ''' + Choose the highest probability label for the input document + :param doc: list[str]: The doc token stream + :return: + ''' + p = self.score(doc) + return argmax(p), max(p) diff --git a/function/python/brightics/function/textanalytics/split_sentences.py b/function/python/brightics/function/textanalytics/split_sentences.py index df5d5505b..e143514fc 100644 --- a/function/python/brightics/function/textanalytics/split_sentences.py +++ b/function/python/brightics/function/textanalytics/split_sentences.py @@ -18,6 +18,8 @@ from nltk import tokenize import pandas as pd import numpy as np +import platform +from brightics.common.exception import BrighticsFunctionException def split_sentences(table, **params): @@ -26,21 +28,19 @@ def split_sentences(table, **params): def _split_sentences(table, input_col, language='kor'): - - doc_col = table[input_col].values + doc_col = table[input_col].values + os = platform.system() - if (language == 'kor'): - import platform - os = platform.system() + if language == 'kor': if os == 'Linux': import kss sent_tokenizer = kss.split_sentences - else: - from brightics.function.textanalytics.pykss import pykss - sent_tokenizer = pykss.split_sentences - elif (language == 'eng'): + else: # os == 'Windows' + from . import split_sentences_kss as kss2 + sent_tokenizer = kss2.kss.pykss.split_sentences + else: # language == 'eng' sent_tokenizer = tokenize.sent_tokenize - + def _splitter(doc_id, text): sentence_col = sent_tokenizer(text) len_sentence_col = len(sentence_col) @@ -50,5 +50,74 @@ def _splitter(doc_id, text): data_table = np.concatenate([_splitter(i, doc_col[i]) for i in range(len(doc_col))], axis=1) out_table = pd.DataFrame(np.transpose(data_table), columns=['doc_id', 'sentence_id', 'sentence']) - + + return {'out_table': out_table} + + +def split_sentences2(table, **params): + check_required_parameters(_split_sentences2, params, ['table']) + return _split_sentences2(table, **params) + + +def _split_sentences2(table, input_col, language='kor', doc_id_col_name='doc_id', sentence_id_col_name='sentence_id', + sentence_col_name='sentence', duplicate_original=False): + if doc_id_col_name in table.columns: + raise BrighticsFunctionException.from_errors( + [{'0100': "Document ID column name {} already exists in the input table. Please choose another one." + .format(doc_id_col_name)}]) + if sentence_id_col_name in table.columns: + raise BrighticsFunctionException.from_errors( + [{'0100': "Sentence ID column name {} already exists in the input table. Please choose another one." + .format(sentence_id_col_name)}]) + if sentence_col_name in table.columns: + raise BrighticsFunctionException.from_errors( + [{'0100': "Sentence column name {} already exists in the input table. Please choose another one." + .format(sentence_col_name)}]) + + doc_col = table[input_col].values + os = platform.system() + if os == 'Linux': + import kss + sent_tokenizer_kor = kss.split_sentences + else: # os == 'Windows' + from . import split_sentences_kss as kss2 + sent_tokenizer_kor = kss2.kss.pykss.split_sentences + sent_tokenizer_eng = tokenize.sent_tokenize + + if language == 'kor': + sent_tokenizer = sent_tokenizer_kor + elif language == 'eng': + sent_tokenizer = sent_tokenizer_eng + else: # language == 'mixed' + def sent_tokenizer(text): + kor_sents = sent_tokenizer_kor(text) + sents = [sent_tokenizer_eng(sent) for sent in kor_sents] + return [y for x in sents for y in x] # flattened + + num_doc = len(doc_col) + doc_id_col = list(range(1, num_doc + 1)) + sent_list_col = [sent_tokenizer(text) for text in doc_col] + table[doc_id_col_name] = doc_id_col + column_list = table.columns.tolist() + table[sentence_col_name] = sent_list_col + num_sent_col = [len(sent_list) for sent_list in sent_list_col] + + # to be shortened when pandas explode is available + values = np.array(sent_list_col) + values_flattened = np.concatenate(values).ravel() + col = table[sentence_col_name] + col_exploded = pd.Series(values_flattened, index=col.index.repeat(num_sent_col), name=col.name) + out_table = table.drop([sentence_col_name], axis=1).join(col_exploded).reindex(columns=table.columns, copy=False) + + sent_id_col = sum([list(range(1, num_sent + 1)) for num_sent in num_sent_col], []) + out_table[sentence_id_col_name] = sent_id_col + + if not duplicate_original: + column_list_original = column_list.copy() + column_list_original.remove(doc_id_col_name) + out_table[column_list_original] = out_table[column_list_original].where(out_table[sentence_id_col_name] == 1, None) + + column_list_new = column_list + [sentence_id_col_name, sentence_col_name] + out_table = out_table[column_list_new] + return {'out_table': out_table} diff --git a/function/python/brightics/function/textanalytics/split_sentences_kss/__init__.py b/function/python/brightics/function/textanalytics/split_sentences_kss/__init__.py new file mode 100644 index 000000000..801980af4 --- /dev/null +++ b/function/python/brightics/function/textanalytics/split_sentences_kss/__init__.py @@ -0,0 +1,17 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from . import kss diff --git a/function/python/brightics/function/textanalytics/split_sentences_kss/kss.py b/function/python/brightics/function/textanalytics/split_sentences_kss/kss.py new file mode 100644 index 000000000..ac3d99395 --- /dev/null +++ b/function/python/brightics/function/textanalytics/split_sentences_kss/kss.py @@ -0,0 +1,281 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +""" + A KSS(Korean Sentence Splitter) module. + + This is pure Python version of the project kss 1.2.5 + https://pypi.org/project/kss/. + + We choose to rewrite kss in pure Python because we want the module + works in all Python implementations without C++ build. +""" + +# -*- coding: utf-8 -*- + +DEFAULT = 'DEFAULT' +DA = 'DA' +YO = 'YO' +SB = 'SB' +COMMON = 'COMMON' + +NONE = 0 +PREV = 1 << 0 +CONT = 1 << 1 +NEXT = 1 << 2 +NEXT1 = 1 << 3 +NEXT2 = 1 << 4 + +mapDA = {'갔': PREV, + '간': PREV, + '겠': PREV, + '겼': PREV, + '같': PREV, + '놨': PREV, + '녔': PREV, + '니': PREV, + '낸': PREV, + '냈': PREV, + '뒀': PREV, + '때': PREV, + '랐': PREV, + '럽': PREV, + '렵': PREV, + '렸': PREV, + '린': PREV, + '뤘': PREV, + '밌': PREV, + '봤': PREV, + '섰': PREV, + '샜': PREV, + '않': PREV, + '았': PREV, + '없': PREV, + '었': PREV, + '였': PREV, + '온': PREV, + '웠': PREV, + '이': PREV, + '인': PREV, + '있': PREV, + '졌': PREV, + '쳤': PREV, + '챘': PREV, + '팠': PREV, + '펐': PREV, + '했': PREV, + '혔': PREV, + '가': NEXT, + '고': NEXT | NEXT2, + '는': NEXT | NEXT2, + '라': NEXT, + '를': NEXT, + '만': NEXT, + '며': NEXT | NEXT2, + '면': NEXT | NEXT1 | NEXT2, + '서': PREV | NEXT2, + '싶': PREV | NEXT, + '죠': NEXT, + '죵': NEXT, + '쥬': NEXT, + '하': PREV | NEXT1, + '해': NEXT1, + '도': NEXT2} + +mapYO = {'가': PREV, + '구': PREV, + '군': PREV, + '걸': PREV, + '까': PREV, + '께': PREV, + '껴': PREV, + '네': PREV, + '나': PREV, + '데': PREV, + '든': PREV, + '서': PREV, + '세': PREV, + '아': PREV, + '어': PREV, + '워': PREV, + '에': PREV, + '예': PREV, + '을': PREV, + '져': PREV, + '줘': PREV, + '지': PREV, + '춰': PREV, + '해': PREV, + '고': PREV | NEXT2, + '는': NEXT, + '라': NEXT1, + '를': NEXT, + '며': NEXT2, + '면': PREV | NEXT2, + '하': NEXT1} + +mapSB = {'가': PREV, + '까': PREV, + '거': PREV, + '걸': PREV, + '껄': PREV, + '나': PREV, + '니': PREV, + '다': PREV, + '도': PREV, + '든': PREV, + '랴': PREV, + '래': PREV, + '마': PREV, + '봐': PREV, + '서': PREV, + '아': PREV, + '어': PREV, + '오': PREV, + '요': PREV, + '을': PREV, + '자': PREV, + '지': PREV, + '죠': PREV, + '고': PREV | NEXT2, + '는': NEXT, + '라': PREV | NEXT, + '며': NEXT2, + '면': NEXT2, + '하': NEXT1} + +mapCOMMON = {'ㅅ': CONT, + 'ㅎ': CONT, + 'ㅋ': CONT, + 'ㅠ': CONT, + 'ㅜ': CONT, + '^': CONT, + ';': CONT, + '.': CONT, + '?': CONT, + '!': CONT, + ')': CONT, + '~': CONT, + '…': CONT, + ',': CONT} + +chmap = {DA: mapDA, + YO: mapYO, + SB: mapSB, + COMMON: mapCOMMON} + + +class pykss: + @staticmethod + def split_sentences(text): + result = [] + prev_chr = '' + cur_sentence = '' + stk = [] + cur_stat = 'DEFAULT' + + def _push_pop_symbol(symbol): + if stk: + if stk[-1] == symbol: + del stk[-1] + else: + stk.append(symbol) + else: + stk.append(symbol) + + for chr_string in text: + if cur_stat == 'DEFAULT': + if chr_string == '´': + chr_string = '\'' + + if chr_string in {'"', '\''}: + _push_pop_symbol(chr_string) + elif chr_string in {'‘', '“'}: + stk.append(chr_string) + elif chr_string in {'’', '”'}: + if stk: + del stk[-1] + elif chr_string == '다': + if not stk and (chmap[DA].get(prev_chr, NONE) & PREV): + cur_stat = 'DA' + elif chr_string == '요': + if not stk and (chmap[YO].get(prev_chr, NONE) & PREV): + cur_stat = 'YO' + elif chr_string in {'!', '?', '.'}: + if not stk and (chmap[SB].get(prev_chr, NONE) & PREV): + cur_stat = 'SB' + else: + cur_stat_chr_string = chmap[cur_stat].get(chr_string, NONE) + cur_stat_prev_chr = chmap[cur_stat].get(prev_chr, NONE) + + if chr_string == ' ' or ( + chmap[COMMON].get(chr_string, NONE) & CONT): + if cur_stat_prev_chr & NEXT1: + result.append(cur_sentence.strip()) + cur_sentence = prev_chr + cur_stat = DEFAULT + elif cur_stat_chr_string & NEXT: + if cur_stat_prev_chr & NEXT1: + cur_sentence += prev_chr + cur_stat = DEFAULT + elif cur_stat_chr_string & NEXT1: + if cur_stat_prev_chr & NEXT1: + result.append(cur_sentence.strip()) + cur_sentence = prev_chr + cur_stat = DEFAULT + elif cur_stat_chr_string & NEXT2: + if cur_stat_prev_chr & NEXT1: + cur_sentence += prev_chr + else: + result.append(cur_sentence.strip()) + cur_sentence = '' + cur_stat = DEFAULT + elif cur_stat_chr_string == NONE or (cur_stat_chr_string & PREV): + result.append(cur_sentence.strip()) + cur_sentence = '' + + if cur_stat_prev_chr & NEXT1: + cur_sentence += prev_chr + cur_stat = DEFAULT + + if chr_string in {'\'', '\"'}: + _push_pop_symbol(chr_string) + elif chr_string in {'‘', '“'}: + stk.append(chr_string) + elif chr_string in {'’', '”'}: + if stk: + del stk[-1] + else: + pass + + if cur_stat == 'DEFAULT' or not ( + chmap[cur_stat].get(chr_string, NONE) & NEXT1): + cur_sentence += chr_string + prev_chr = chr_string + + if cur_sentence: + result.append(cur_sentence.strip()) + cur_sentence = '' + + flag = chmap.get(cur_stat) + flag = NONE if flag is None else flag.get(prev_chr, NONE) + + if flag & NEXT1: + cur_sentence += prev_chr + result.append(cur_sentence.strip()) + cur_sentence = '' + + return result diff --git a/function/python/brightics/function/textanalytics/synonym_converter.py b/function/python/brightics/function/textanalytics/synonym_converter.py index 66041a028..55bcc2d3e 100644 --- a/function/python/brightics/function/textanalytics/synonym_converter.py +++ b/function/python/brightics/function/textanalytics/synonym_converter.py @@ -20,9 +20,9 @@ def synonym_converter(table, **params): - check_required_parameters(_synonym_converter, params, ['table']) + check_required_parameters(_synonym_converter, params, ['table']) return _synonym_converter(table, **params) - + def synonym_converter_user_dict(table, **params): check_required_parameters(_synonym_converter, params, ['table']) @@ -30,7 +30,7 @@ def synonym_converter_user_dict(table, **params): def _synonym_converter(table, input_cols, hold_cols=None, default_dict=False, synonym_list=None, prefix='synonym', user_dict=None): - + if hold_cols is not None: hold_table = pd.DataFrame() hold_table[hold_cols] = table[hold_cols] @@ -39,24 +39,33 @@ def _synonym_converter(table, input_cols, hold_cols=None, default_dict=False, sy # initial dictionary synonym_dict = dict() - if (synonym_list is not None): + if synonym_list is not None: for word_synonym in synonym_list: - synonym_dict.update({synonym.strip() : word_synonym.split(',')[0] for synonym in word_synonym.split(',')[1:]}) - + synonym_dict.update( + {synonym.strip(): word_synonym.split(',')[0] for synonym in word_synonym.split(',')[1:]}) + # default dictionary update - if (default_dict == True): + if default_dict: synonym_dict.update(dict()) # To do dict() => default dictionary # user_dict update - if (user_dict is not None): + if user_dict is not None: user_dictionary = user_dict.values for word_synonym in user_dictionary: - synonym_dict.update({synonym.strip() : word_synonym[0] for synonym in word_synonym[1].split(',')}) + synonym_dict.update({synonym.strip(): word_synonym[0] for synonym in word_synonym[1].split(',')}) - values = [[[synonym_dict.get(word, word) for word in word_list] for word_list in table[column]] for column in input_cols] + values = [[[synonym_dict.get(word, word) for word in word_list] for word_list in table[column]] for column in + input_cols] + # np.transpose works wrong when the number of rows or columns is equal to 1 + if len(values) == 1: + values_tr = [[word_list] for word_list in values[0]] + elif len(values[0]) == 1: + values_tr = [[col[0] for col in values]] + else: + values_tr = np.transpose(values) value_columns = ['{}_{}'.format(prefix, column) for column in input_cols] - value_table = pd.DataFrame(np.transpose(values), columns=value_columns) - + value_table = pd.DataFrame(values_tr, columns=value_columns) + out_table = pd.concat([hold_table, value_table.reset_index(drop=True)], axis=1) - - return {'out_table' : out_table} + + return {'out_table': out_table} diff --git a/function/python/brightics/function/textanalytics/tfidf.py b/function/python/brightics/function/textanalytics/tfidf.py index cc5b00e2f..881c1c98a 100644 --- a/function/python/brightics/function/textanalytics/tfidf.py +++ b/function/python/brightics/function/textanalytics/tfidf.py @@ -27,6 +27,107 @@ from operator import itemgetter from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer +from sklearn.feature_extraction.text import TfidfVectorizer + + +def tfidf3(table, group_by=None, **params): + check_required_parameters(_tfidf3, params, ['table']) + params = get_default_from_parameters_if_required(params, _tfidf3) + param_validation_check = [greater_than_or_equal_to(params, 0, 'min_df'), + greater_than_or_equal_to(params, 2, 'max_features'), + greater_than(params, 0, 'max_df')] + validate(*param_validation_check) + if group_by is not None: + return _function_by_group(_tfidf3, table, group_by=group_by, **params) + else: + return _tfidf3(table, **params) + + +def _tfidf3(table, input_col, res_type='sparse', + analyzer='word', binary=False, + decode_error='strict', dtype=np.int64, + encoding='utf-8', input='content', + lowercase=True, max_df=1.0, + max_features=100, min_df=1, + ngram_range=(1, 1), norm='l2', + preprocessor=None, smooth_idf=True, + stop_words=None, strip_accents=None, + sublinear_tf=False, token_pattern='(?u)\\b\\w\\w+\\b', + tokenizer=None, use_idf=True, vocabulary=None): + + corpus = np.array(table[input_col]) + + if isinstance(corpus[0], np.ndarray): + preprocessor = ' '.join + + vectorizer = TfidfVectorizer( + analyzer=analyzer, binary=binary, decode_error=decode_error, + dtype=dtype, encoding=encoding, input=input, lowercase=lowercase, + max_df=max_df, max_features=max_features, min_df=min_df, + ngram_range=ngram_range, norm=norm, preprocessor=preprocessor, + smooth_idf=smooth_idf, stop_words=stop_words, strip_accents=strip_accents, + sublinear_tf=sublinear_tf, token_pattern=token_pattern, + tokenizer=tokenizer, use_idf=use_idf, vocabulary=vocabulary) + + tfidf = vectorizer.fit(corpus) + tfidf_csr = tfidf.transform(corpus) + + vocab_idx = tfidf.vocabulary_ + vocab = sorted(vocab_idx, key=lambda k: vocab_idx[k]) + + if res_type == 'sparse': + indptr = tfidf_csr.indptr + indices = tfidf_csr.indices + data = tfidf_csr.data + + idx2word = {idx: word for idx, word in enumerate(vocab)} + vocab_col = [idx2word[k] for k in indices] + + if use_idf is True: + idf = tfidf.idf_ + idx2val = {idx: val for idx, val in enumerate(idf)} + idf_col = [idx2val[k] for k in indices] + else: + idf_col = [1] * len(indices) + + num_doc = len(corpus) + repeat_num = [indptr[i + 1] - indptr[i] for i in range(num_doc)] + docid_col = np.repeat(range(num_doc), repeat_num) + doc_col = np.repeat(corpus, repeat_num) + + res_dict = {'document_id': docid_col, input_col: doc_col, 'term': vocab_col, 'idf': idf_col, 'tfidf': data} + out_table = pd.DataFrame(res_dict, columns=res_dict.keys()) + + elif res_type == 'dense': + out_table = pd.DataFrame(tfidf_csr.toarray(), columns=vocab) + + params = { + 'Input Column': input_col, + 'Max DF': max_df, + 'Min DF': min_df, + 'Maximum Number of Vocabularies': max_features, + 'Using IDF': use_idf, + 'Norm': norm, + 'Smooth IDF': smooth_idf, + 'Sublinear TF': sublinear_tf, + 'Result Type': res_type + } + + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## TF-IDF Result + | + | ### Parameters + | + | {params} + """.format(params=dict2MD(params)))) + + model = _model_dict('tfidf') + model['vectorizer'] = vectorizer + model['params'] = params + model['_repr_brtc_'] = rb.get() + + return {'out_table': out_table, 'model': model} def tfidf(table, group_by=None, **params): # This will be deprecated. diff --git a/function/python/brightics/function/textanalytics/tokenizer.py b/function/python/brightics/function/textanalytics/tokenizer.py index 54077f84e..9ae73ac6e 100644 --- a/function/python/brightics/function/textanalytics/tokenizer.py +++ b/function/python/brightics/function/textanalytics/tokenizer.py @@ -125,4 +125,4 @@ def _tokenizer_eng(table, input_cols, hold_cols=None, new_col_prefix='tokenized' pos_doc_list.append(pos_list) out_table['{prefix}_{col}'.format(prefix=new_col_prefix, col=input_cols[i])] = pos_doc_list - return {'out_table': out_table} + return {'out_table': out_table} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/tokenizer2.py b/function/python/brightics/function/textanalytics/tokenizer2.py new file mode 100644 index 000000000..1bad747f5 --- /dev/null +++ b/function/python/brightics/function/textanalytics/tokenizer2.py @@ -0,0 +1,197 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +import numpy as np +import pandas as pd +from nltk.stem import PorterStemmer +from nltk.tokenize import sent_tokenize, word_tokenize +import nltk +from bs4 import BeautifulSoup +import re +from random import randint + +from brightics.common.utils import check_required_parameters + +LEAF_KEY = True +REPLACE_NO_SPACE = re.compile("[.;:!\'?,\"()\[\]]") +REPLACE_WITH_SPACE = re.compile("()|(\-)|(\/)") +POS_ENG_DEFAULT = ["CC", "CD", "DT", "EX", "FW", "IN", "JJ", "JJR", "JJS", "LS", "MD", + "NN", "NNS", "NNP", "NNPS", "PDT", "POS", "PRP", "PRP$", "RB", "RBR", "RBS", + "RP", "TO", "UH", "VB", "VBD", "VBG", "VBN", "VBP", "VBZ", "WDT", "WP", "WP$", "WRB"] + +""" +Handling compound words: replace every compound words in the given text to numbers which is not contained in the +text, apply the tokenizer, and replace the numbers back to the corresponding compound words. +""" + + +def _encode(text_table, user_dict, lower_case): + encode_ind = randint(1000, 10000) # a random integer + encode_list = [] + decode_dict = {} + if user_dict is not None: + user_dict_arr = user_dict.values.tolist() + texts_arr = text_table.values.tolist() + whole_text = ' '.join([' '.join(row) for row in texts_arr]) + numbers_in_text = [int(item) for item in re.compile(r'\d+').findall(whole_text)] + for row in user_dict_arr: + compound_word = row[0] + if len(row) > 1 and row[1] is not None and row[1] != np.nan and row[1] != "": + pos = row[1] + else: + pos = None + while encode_ind in numbers_in_text: + encode_ind += 1 + encode_word = ' {} '.format(encode_ind) + encode_list.append((compound_word, encode_word)) + decode_dict[str(encode_ind)] = (compound_word, pos) + encode_ind += 1 + table_encoded = text_table.applymap(lambda text: _substitution(text, encode_list, lower_case)) + else: + table_encoded = text_table + return table_encoded, decode_dict + + +def _substitution(text, encode_list, lower_case): + if lower_case: + text = text.lower() + for compound_word, encode_word in encode_list: + text = re.compile(compound_word).sub(encode_word, text) + return text + + +def _extract_kor(list_tokens_tagged, is_tagged, decode_dict, *pos_extraction): + list_tokens_tagged_decoded = [] + for token_tagged in list_tokens_tagged: + if token_tagged[0] in decode_dict: + compound_word, pos = decode_dict[token_tagged[0]] + if pos is None: + pos = 'Noun' + list_tokens_tagged_decoded.append([compound_word, pos]) + else: + list_tokens_tagged_decoded.append(token_tagged) + + if pos_extraction: + list_tokens_tagged_filtered = [token_tagged for token_tagged in list_tokens_tagged_decoded + if token_tagged[1] in set(pos_extraction)] + else: + list_tokens_tagged_filtered = list_tokens_tagged_decoded + + if is_tagged is False: + res = [token_tagged[0] for token_tagged in list_tokens_tagged_filtered] + else: + res = ['{text}/{pos}'.format(text=token_tagged[0], pos=token_tagged[1]) + for token_tagged in list_tokens_tagged_filtered] + return res + + +def tokenizer_kor2(table, **params): + check_required_parameters(_tokenizer_kor2, params, ['table']) + return _tokenizer_kor2(table, **params) + + +def _tokenizer_kor2(table, input_cols, hold_cols=None, new_col_prefix='tokenized', + normalization=True, stemming=True, pos_extraction=None, is_tagged=False, user_dict=None): + from twkorean import TwitterKoreanProcessor as Tw # import here since twkorean cannot be loaded in Enterprise ver. + + if pos_extraction is None: + pos_extraction = [] + + table_encoded, decode_dict = _encode(table[input_cols], user_dict, False) + + tokenizer = Tw(normalization=normalization, stemming=stemming) + tokenize_vec = np.vectorize(tokenizer.tokenize, otypes=[object])(table_encoded) + + columns = ['{prefix}_{col}'.format(prefix=new_col_prefix, col=col) for col in input_cols] + tokenized_table = pd.DataFrame(np.vectorize(_extract_kor, otypes=[object])( + tokenize_vec, is_tagged, decode_dict, *pos_extraction), columns=columns) + + if hold_cols is None: + out_table = pd.concat([table, tokenized_table], axis=1) + else: + out_table = pd.concat([table[hold_cols], tokenized_table], axis=1) + + return {'out_table': out_table} + + +def doc_list_stemming_eng(word_tok_list): + ps = PorterStemmer() + return [ps.stem(word_tok) for word_tok in word_tok_list] + + +def preprocess_reviews_eng(text, lower_case): + if lower_case: + text = REPLACE_NO_SPACE.sub("", text.lower()) + else: + text = REPLACE_NO_SPACE.sub("", text) + return text + + +def _extract_pos_eng(tagged, pos_extraction, is_tagged, decode_dict): + token, pos = tagged + if token in decode_dict: + token, pos = decode_dict[token] + if pos is None: + pos = 'NN' + + if pos in pos_extraction: + if is_tagged: + return '{token}({pos})'.format(token=token, pos=pos) + else: + return '{token}'.format(token=token) + else: + return None + + +def _transform_tagged_list_eng(tagged_list, pos_extraction, is_tagged, decode_dict): + tagged_list_transformed = [_extract_pos_eng(tagged, pos_extraction, is_tagged, decode_dict) + for tagged in tagged_list] + return [item for item in tagged_list_transformed if item is not None] + + +def tokenizer_eng2(table, **params): + check_required_parameters(_tokenizer_eng2, params, ['table']) + return _tokenizer_eng2(table, **params) + + +def _tokenizer_eng2(table, input_cols, hold_cols=None, new_col_prefix='tokenized', + lower_case=True, stemming=True, pos_extraction=None, is_tagged=False, user_dict=None): + if hold_cols is None: + out_table = table.copy() + else: + out_table = table[hold_cols] + + if pos_extraction is None: + pos_extraction = POS_ENG_DEFAULT + + table_encoded, decode_dict = _encode(table[input_cols], user_dict, lower_case) + + def _process(text): + text_filtered_html = BeautifulSoup(text).get_text() + text_preprocessed = preprocess_reviews_eng(text_filtered_html, lower_case) + text_tokenized = word_tokenize(text_preprocessed) + if stemming: + text_tokenized = doc_list_stemming_eng(text_tokenized) + text_tagged = nltk.pos_tag(text_tokenized) + text_result = _transform_tagged_list_eng(text_tagged, pos_extraction, is_tagged, decode_dict) + return text_result + + for col in input_cols: + docs = table_encoded[col] + docs_result = docs.apply(_process) + out_table['{prefix}_{col}'.format(prefix=new_col_prefix, col=col)] = docs_result + + return {'out_table': out_table} \ No newline at end of file diff --git a/function/python/brightics/function/textanalytics/topic_name_extraction.py b/function/python/brightics/function/textanalytics/topic_name_extraction.py new file mode 100644 index 000000000..1dd1f7ac6 --- /dev/null +++ b/function/python/brightics/function/textanalytics/topic_name_extraction.py @@ -0,0 +1,81 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import raise_runtime_error +from brightics.common.validation import validate, greater_than_or_equal_to + +import numpy as np +import pandas as pd + + +def topic_name_extraction(table, **params): + check_required_parameters(_topic_name_extraction, params, ['table']) + params = get_default_from_parameters_if_required(params, _topic_name_extraction) + param_validation_check = [greater_than_or_equal_to(params, 1, 'topn')] + validate(*param_validation_check) + return _topic_name_extraction(table, **params) + + +def _topic_name_extraction(table, sim_table=None, model=None, topn=10): + out_table = table.copy() + if model is None: + if sim_table is None: + raise_runtime_error("Either a model or a similarity table is needed as an input.") + else: + if 'w2v' in model: + input_model = model['w2v'] + elif 'ft' in model: + input_model = model['ft'] + + topics_vocab_weight_arr = np.array(table[['vocabularies', 'weights']]) + num_topic_vocab = len(topics_vocab_weight_arr[0][0]) + harmonic_weights = np.array([1.0 / (i + 1) for i in range(num_topic_vocab)]) + geometric_weights = np.array([1.0 / 2 ** i for i in range(num_topic_vocab)]) + log_weights = np.array([np.log(num_topic_vocab - i) for i in range(num_topic_vocab)]) + constant_weights = np.ones(num_topic_vocab) + + def topic_name_suggestion(vocab, weights): + if model is not None: # similarity: Word2vec model + vectors = np.transpose(np.array([input_model.wv.get_vector(word) for word in vocab])) + weighted_averages = np.dot(np.array( + [weights, harmonic_weights, geometric_weights, log_weights, constant_weights]), np.transpose(vectors)) + topic_name_weight_tuples = [input_model.wv.similar_by_vector(avg, topn=topn) for avg in weighted_averages] + res = [['{}: {}'.format(tup[0], tup[1]) for tup in item] for item in topic_name_weight_tuples] + return res + else: # similarity: matrix + # Assume that sim_table has words as indices for both rows and columns. columns: column name, rows: 1st col + vocab_set = sim_table.columns.values[1:] + row_indices = [pd.Index(sim_table.iloc[:, 0]).get_loc(word) for word in vocab] + sim_table_vocab = np.array(sim_table.iloc[row_indices, 1:]) + weighted_sims = np.dot(np.array( + [weights, harmonic_weights, geometric_weights, log_weights, constant_weights]), sim_table_vocab) + res = [_extract(item, vocab_set, topn) for item in weighted_sims] + return res + + topics_name_arr = [topic_name_suggestion(row[0], row[1]) for row in topics_vocab_weight_arr] + columns = ['topic_name_original', 'topic_name_harmonic', 'topic_name_geometric', 'topic_name_log', + 'topic_name_constant'] + out_table[columns] = pd.DataFrame(topics_name_arr) + return {'out_table': out_table} + + +def _extract(weighted_sim_list, vocab_set, topn): + list_zipped = zip(vocab_set, weighted_sim_list) + list_sorted = sorted(list_zipped, key=lambda tup: tup[1]) + list_cut = list_sorted[:topn] + return ['{}: {}'.format(tup[0], tup[1]) for tup in list_cut] diff --git a/function/python/brightics/function/textanalytics/word2vec.py b/function/python/brightics/function/textanalytics/word2vec.py index d3857fc9b..c9cfdfd1f 100644 --- a/function/python/brightics/function/textanalytics/word2vec.py +++ b/function/python/brightics/function/textanalytics/word2vec.py @@ -74,8 +74,15 @@ def _word2vec(table, input_col, sg=1, size=100, window=5, min_count=1, hashfxn=hashfxn) w2v.init_sims(replace=True) - vocab = w2v.wv.vocab - + vocab = w2v.wv.vocab + + analogies_score, sections = w2v.wv.evaluate_word_analogies( + 'brightics/function/textanalytics/data/word2vec_questions_words.txt') + pearson_1, spearman_1, oov_ratio_1 = w2v.wv.evaluate_word_pairs( + 'brightics/function/textanalytics/data/word2vec_wordsim353.tsv') + pearson_2, spearman_2, oov_ratio_2 = w2v.wv.evaluate_word_pairs( + 'brightics/function/textanalytics/data/word2vec_simlex999.tsv') + params = {'Input column': input_col, 'Training algorithm': algo, 'Word vector dimensionality': size, @@ -126,9 +133,31 @@ def _word2vec(table, input_col, sg=1, size=100, window=5, min_count=1, | {topn_words} | {fig} | + | ### Word analogy score + | {analogies_score} + | + | ### Word correlation scores + | #### Pearson correlation coefficient with 2-tailed p-value (WordSim353) + | {pearson_1_1}, {pearson_1_2} + | #### Spearman rank-order correlation coefficient with 2-tailed p-value (WordSim353) + | {spearman_1_1}, {spearman_1_2} + | #### The ratio of pairs with unknown words (WordSim353) + | {oov_ratio_1} + | #### Pearson correlation coefficient with 2-tailed p-value (SimLex999) + | {pearson_2_1}, {pearson_2_2} + | #### Spearman rank-order correlation coefficient with 2-tailed p-value (SimLex999) + | {spearman_2_1}, {spearman_2_2} + | #### The ratio of pairs with unknown words (SimLex999) + | {oov_ratio_2} + | | ### Parameters | {params} - """.format(length=length, topn=topn, topn_words=topn_words, params=dict2MD(params), fig=fig))) + """.format(length=length, analogies_score=analogies_score, + pearson_1_1=pearson_1[0], pearson_1_2=pearson_1[1], spearman_1_1=spearman_1[0], + spearman_1_2=spearman_1[1], oov_ratio_1=oov_ratio_1, + pearson_2_1=pearson_2[0], pearson_2_2=pearson_2[1], spearman_2_1=spearman_2[0], + spearman_2_2=spearman_2[1], oov_ratio_2=oov_ratio_2, + topn=topn, topn_words=topn_words, params=dict2MD(params), fig=fig))) vocab = list(w2v.wv.vocab) @@ -249,18 +278,20 @@ def _word2vec_similarity2(table, model, positive_col=None, negative_col=None, to if positive_col is None: columns = [negative_col] elif negative_col is None: - columns = [positive_col] + columns = [positive_col] else: - columns = [positive_col, negative_col] - + columns = [positive_col, negative_col] + df_dropped = table[columns].dropna(how='all') - + if positive_col is None: res = df_dropped.apply(lambda _: _w2v_sim_neg(model, negative=_[negative_col], topn=topn), axis=1) elif negative_col is None: res = df_dropped.apply(lambda _: _w2v_sim_pos(model, positive=_[positive_col], topn=topn), axis=1) else: - res = df_dropped.apply(lambda _: _w2v_sim_both(model, positive=_[positive_col], negative=_[negative_col], topn=topn), axis=1) - + res = df_dropped.apply( + lambda _: _w2v_sim_both(model, positive=_[positive_col], negative=_[negative_col], topn=topn), axis=1) + out_table = pd.DataFrame(sum(res, []), columns=columns + ['synonym', 'similarity']) return {'out_table': out_table} + diff --git a/function/python/brightics/function/timeseries/__init__.py b/function/python/brightics/function/timeseries/__init__.py index 5e97a4619..776cbe612 100644 --- a/function/python/brightics/function/timeseries/__init__.py +++ b/function/python/brightics/function/timeseries/__init__.py @@ -23,4 +23,5 @@ from .arima import arima_predict from .arima import auto_arima_train from .arima import auto_arima_predict -from .autocorrelation import autocorrelation \ No newline at end of file +from .autocorrelation import autocorrelation +from .linear_sampling import linear_sampling diff --git a/function/python/brightics/function/timeseries/linear_sampling.py b/function/python/brightics/function/timeseries/linear_sampling.py new file mode 100644 index 000000000..5edaa8c04 --- /dev/null +++ b/function/python/brightics/function/timeseries/linear_sampling.py @@ -0,0 +1,40 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate, greater_than, from_to +from brightics.common.utils import check_required_parameters +from brightics.common.groupby import _function_by_group + + +def linear_sampling(table, group_by=None, **params): + params = get_default_from_parameters_if_required(params, _linear_sampling) + param_validation_check = [greater_than(params, 0.0, 'train_ratio'), + greater_than(params, 0.0, 'test_ratio')] + + validate(*param_validation_check) + check_required_parameters(_linear_sampling, params, ['table']) + if group_by is not None: + return _function_by_group(_linear_sampling, table, group_by=group_by, **params) + else: + return _linear_sampling(table, **params) + + +def _linear_sampling(table, train_ratio=0.7, test_ratio=0.3): + index = int(table.shape[0] * train_ratio / (train_ratio + test_ratio)) + train_table = table[:index] + test_table = table[index:] + return {'train_table': train_table, 'test_table': test_table} diff --git a/function/python/brightics/function/timeseries/meta/autocorrelation.json b/function/python/brightics/function/timeseries/meta/autocorrelation.json index 185abde4c..036439238 100644 --- a/function/python/brightics/function/timeseries/meta/autocorrelation.json +++ b/function/python/brightics/function/timeseries/meta/autocorrelation.json @@ -618,14 +618,7 @@ } ], "preferences": {}, - "variables": { - "path": { - "type": "array[string]", - "value": [ - "" - ] - } - }, + "variables": {}, "variableRef": [], "innerModels": {}, "inData": [], diff --git a/function/python/brightics/function/timeseries/meta/linear_sampling.json b/function/python/brightics/function/timeseries/meta/linear_sampling.json new file mode 100644 index 000000000..568277f35 --- /dev/null +++ b/function/python/brightics/function/timeseries/meta/linear_sampling.json @@ -0,0 +1,881 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.timeseries$linear_sampling", + "name": "brightics.function.timeseries$linear_sampling", + "context": "python", + "label": "Linear Sampling", + "description": "This function divides timeseries data into train and test data according to timeseries order.\n\nReference:\nhttps://en.wikipedia.org/wiki/Sampling_(statistics)", + "tags": [ + "transform", + "linear sampling", + "sampling", + "split data" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "train_table": "", + "test_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a table.", + "optional": false + }, + "train_table": { + "type": "table", + "desc": "Training dataset in a table." + }, + "test_table": { + "type": "table", + "desc": "Test dataset in a table." + } + }, + "params": [ + { + "id": "train_ratio", + "label": "Train Ratio", + "description": "Train ratio for splitting a dataset. It should be numeric type.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [ + "Integer", + "Long", + "Double" + ], + "type": "Double", + "placeHolder": "0.7" + }, + { + "id": "test_ratio", + "label": "Test Ratio", + "description": "Test ratio for splitting a dataset. It should be numeric type.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [ + "Integer", + "Long", + "Double" + ], + "type": "Double", + "placeHolder": "0.3" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + } + ], + "summary": "This function splits timeseries data into train and test subsets.", + "tutorialLink": "" + }, + "md": { + "en": "# Linear Sampling\nThis function splits timeseries data into train and test subsets.\n\n## Description\nThis function divides timeseries data into train and test data according to timeseries order.\n\n+ Reference:\nhttps://en.wikipedia.org/wiki/Sampling_(statistics)\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **train_table**: (Table) Training dataset in a table.\n2. **test_table**: (Table) Test dataset in a table.\n#### PARAMETER\n1. **Train Ratio**: Train ratio for splitting a dataset. It should be numeric type.\n\n2. **Test Ratio**: Test ratio for splitting a dataset. It should be numeric type.\n\n3. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\nlinear_sampling(table, train_ratio = 0.7, test_ratio = 0.3, group_by = None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **train_table**: (Table) Training dataset in a table.\n2. **test_table**: (Table) Test dataset in a table.\n#### PARAMETER\n1. **train_ratio**: Train ratio for splitting a dataset. It should be numeric type.\n\t* Type: *double*\n\n2. **test_ratio**: Test ratio for splitting a dataset. It should be numeric type.\n\t* Type: *double*\n\n3. **group_by**: Columns to group by\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, Linear Sampling function is used to split the sample_timeseries data into training and test data. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Train Ratio**: 0.7\n2. **Test Ratio**: 0.3\n3. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.timeseries import linear_sampling\nres = linear_sampling(table = inputs[0] , train_ratio = 0.7, test_ratio = 0.3, group_by = None)\noutput0 = res['train_table']\noutput1 = res['test_table']\n```\nIn this python script, Linear Sampling function is used to split the sample_timeseries data into training and test data.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "linear_sampling.json", + "label": "linear_sampling", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mpbzvte6kum8vg2y", + "project_id": "p5dmzu78qb564crk", + "label": "linear_sampling", + "contents": { + "mid": "mpbzvte6kum8vg2y", + "type": "data", + "title": "linear_sampling", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.timeseries$linear_sampling", + "name": "brightics.function.timeseries$linear_sampling", + "param": {}, + "display": { + "label": "Linear Sampling", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501539201", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "pesuchaf823wmswhui9b7uiw" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501539201" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501539462", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "b3h3rv3g2euij7n8wa9gv5zy" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501539462" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "train_table": { + "type": "table" + }, + "test_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t858mw5sqczqjxsg" + }, + "outputs": { + "train_table": "t532m9vru67897zh", + "test_table": "tbqm5p7t4hswc8mj" + }, + "fid": "f3aj2aw6b5rmkhbx" + }, + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_timeseries.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593502216355", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "bhxnrixj4z2mzzeq8j54xyir" + } + ], + "layout": { + "type": "panel", + "id": "default-1593502216355" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "t858mw5sqczqjxsg" + }, + "fid": "f9gmj2xqv9hvy4ge" + } + ], + "links": [ + { + "kid": "k75xevkj2safvray", + "sourceFid": "f9gmj2xqv9hvy4ge", + "targetFid": "f3aj2aw6b5rmkhbx" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T07:18:50.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T07:37:25.000Z", + "event_key": "2020_073725.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "linear_sampling.png", + "label": "linear_sampling.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, Linear Sampling function is used to split the sample_timeseries data into training and test data. The parameter settings used in the function are shown below.", + "parameter": "1. **Train Ratio**: 0.7\n2. **Test Ratio**: 0.3\n3. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.timeseries import linear_sampling\nres = linear_sampling(table = inputs[0] , train_ratio = 0.7, test_ratio = 0.3, group_by = None)\noutput0 = res['train_table']\noutput1 = res['test_table']", + "description": "In this python script, Linear Sampling function is used to split the sample_timeseries data into training and test data.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/timeseries/test/spcrule_test.py b/function/python/brightics/function/timeseries/test/spcrule_test.py new file mode 100644 index 000000000..4148b5c97 --- /dev/null +++ b/function/python/brightics/function/timeseries/test/spcrule_test.py @@ -0,0 +1,76 @@ +""" + Copyright 2019 Samsung SDS + Licensed 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 + http://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. +""" + +from brightics.common.datasets import load_iris +from brightics.function.timeseries import spcrule,spcrule_summ +import unittest +import pandas as pd +import numpy as np +import HtmlTestRunner +import os + + +class SpcruleTest(unittest.TestCase): + def setUp(self): + print("*** Spc ruleset AD with/without summary UnitTest Start ***") + testdata = load_iris() + setosa = testdata[testdata.species=='setosa'] + versicolor = testdata[testdata.species=='versicolor'] + versicolor_test = versicolor[versicolor.sepal_length>6.5] + testset = setosa.append(versicolor_test) + testset = testset.reset_index(drop=True) + testset['time'] = testset.index.astype(int) + self.testdata = testset + + def tearDown(self): + print("*** Spc ruleset AD with/without summary UnitTest End ***") + + def test_first(self): + spc = spcrule(self.testdata,time_col='time',value_col='sepal_length',ruleset_id='0') + DF1 = spc['out_table'].values + DF2 = spc['out_table2'].values + np.testing.assert_string_equal(DF1[0][4], 'lack of samples') + np.testing.assert_equal(DF1[0][5], None) + np.testing.assert_string_equal(DF1[len(DF1)-1][4], '1') + np.testing.assert_equal(DF1[len(DF1)-1][5], True) + np.testing.assert_equal(DF2[0][3][-1],DF1[-1][1]) + np.testing.assert_equal(DF2[0][3][-2],DF1[-2][1]) + np.testing.assert_equal(DF2[0][3][-3],DF1[-3][1]) + np.testing.assert_equal(DF2[0][3][-4],DF1[-4][1]) + np.testing.assert_equal(DF2[0][3][-4],DF1[-4][1]) + np.testing.assert_equal(DF2[0][0],DF1[-1][2]) + np.testing.assert_equal(DF2[0][1],DF1[-1][3]) + self.summary = td['out_table2'] + + def test_second(self): + spc = spcrule(self.testdata,time_col='time',value_col='sepal_length',ruleset_id='0') + self.summary = td['out_table2'] + spc2 = spcrule_summ(self.testdata,self.summary,time_col='time',value_col='sepal_length',ruleset_id='0') + DF1 = spc2['out_table'].values + DF2 = spc2['out_table2'].values + np.testing.assert_string_equal(DF1[0][4], 'old_data') + np.testing.assert_string_equal(DF1[len(DF1)-1][4], '1') + np.testing.assert_equal(DF1[len(DF1)-1][5], True) + np.testing.assert_equal(DF2[0][3][-1],DF1[-1][1]) + np.testing.assert_equal(DF2[0][3][-2],DF1[-2][1]) + np.testing.assert_equal(DF2[0][3][-3],DF1[-3][1]) + np.testing.assert_equal(DF2[0][3][-4],DF1[-4][1]) + np.testing.assert_equal(DF2[0][3][-4],DF1[-4][1]) + np.testing.assert_equal(DF2[0][0],DF1[-1][2]) + np.testing.assert_equal(DF2[0][1],DF1[-1][3]) + + +if __name__ == '__main__': + filepath = os.path.dirname(os.path.abspath(__file__)) + reportFoler = filepath + "/../../../../../../../reports" + unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(combine_reports=True, output=reportFoler)) \ No newline at end of file diff --git a/function/python/brightics/function/transform/SMOTE.py b/function/python/brightics/function/transform/SMOTE.py new file mode 100644 index 000000000..78e020de5 --- /dev/null +++ b/function/python/brightics/function/transform/SMOTE.py @@ -0,0 +1,71 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate +from brightics.common.validation import greater_than_or_equal_to +from brightics.common.validation import raise_error +from brightics.common.classify_input_type import check_col_type + +import sklearn.utils as sklearn_utils +from sklearn import svm +from sklearn import preprocessing +from imblearn.over_sampling import SMOTE as SMOTE_LIB +import pandas as pd +import numpy as np + + +def SMOTE(table, group_by=None, **params): + check_required_parameters(_SMOTE, params, ['table']) + params = get_default_from_parameters_if_required(params, _SMOTE) + + if group_by is not None: + return _function_by_group(_SMOTE, table, group_by=group_by, **params) + else: + return _SMOTE(table, **params) + + +def _SMOTE(table, label_col, sampling_strategy='not majority', seed=None, k_neighbors=5, m_neighbors=10, + out_step=0.5, kind='regular', svm_estimator='svc', n_jobs=1): + + features = table.drop([label_col], axis=1) + y = table[label_col] + + if(sklearn_utils.multiclass.type_of_target(y) == 'continuous'): + raise_error('0718', 'label_col') + + lab_encoder = preprocessing.LabelEncoder() + y_encoder = lab_encoder.fit_transform(y) + + if (kind == 'svm'): + svc_model = svm.SVC() + else: + svc_model = None + + sm = SMOTE_LIB(sampling_strategy=sampling_strategy, random_state=seed, k_neighbors=k_neighbors, m_neighbors=m_neighbors, + out_step=out_step, kind=kind, svm_estimator=svc_model, n_jobs=n_jobs) + + X_res, y_res = sm.fit_resample(features, y_encoder) + y_decoder = lab_encoder.inverse_transform(y_res) + + df = pd.DataFrame(data=X_res, columns=features.columns) + df1 = pd.DataFrame(data=y_decoder, columns=[label_col]) + + out_table = df.join(df1) + + return {'out_table' : out_table} diff --git a/function/python/brightics/function/transform/__init__.py b/function/python/brightics/function/transform/__init__.py index 3cd0e1454..e07666c59 100644 --- a/function/python/brightics/function/transform/__init__.py +++ b/function/python/brightics/function/transform/__init__.py @@ -18,6 +18,7 @@ from .missing_data import delete_missing_data from .reshaping import pivot from .reshaping import pivot2 +from .reshaping import pivot3 from .reshaping import unpivot from .reshaping import distinct from .reshaping import transpose @@ -30,4 +31,12 @@ from .sql import execute as sql_execute from .sql import execute2 as sql_execute2 from .svd import svd +from .svd import svd2 +from .svd import svd_model from .transpose_time_series import transpose_time_series +from .SMOTE import SMOTE +from .under_sampling import under_sampling +from .explode import explode +from .tsne import tsne +from .savgol_filter import savgol_filter + diff --git a/function/python/brightics/function/transform/explode.py b/function/python/brightics/function/transform/explode.py new file mode 100644 index 000000000..ba931a4f4 --- /dev/null +++ b/function/python/brightics/function/transform/explode.py @@ -0,0 +1,58 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +import numpy as np +import pandas as pd +from pandas.core.dtypes.missing import isna +from brightics.common.utils import check_required_parameters +from brightics.common.validation import raise_runtime_error + + +def explode(table, **params): + check_required_parameters(_explode, params, ['table']) + return _explode(table, **params) + + +def _explode(table, input_col): + col = table[input_col] + is_arr_col_list = [isinstance(item, np.ndarray) or isinstance(item, list) for item in col] + is_non_arr_col_list = [not item for item in is_arr_col_list] + is_arr_col = all(is_arr_col_list) + is_non_arr_col = all(is_non_arr_col_list) + if not is_arr_col and not is_non_arr_col: + raise_runtime_error("{} is an invalid column to explode or un-explode.".format(input_col)) + elif is_arr_col: # explode + values = np.array(col) + values_flattened = np.concatenate(values).ravel() + counts = [len(item) for item in values] + col_exploded = pd.Series(values_flattened, index=col.index.repeat(counts), name=col.name) + out_table = table.drop([input_col], axis=1).join(col_exploded).reindex(columns=table.columns, copy=False) + else: # un-explode + group_cols = table.columns.tolist() + group_cols.remove(input_col) + + group_id = 'tmp_group_id' + while group_id in table.columns: + group_id += '_' + group_idx = table[group_cols].drop_duplicates() + group_idx[group_id] = np.arange(group_idx.shape[0]) + table = table.merge(group_idx, on=group_cols) + + out_table = table.groupby(group_id)[input_col].apply(list).reset_index(name=input_col) \ + .merge(group_idx, on=group_id).reindex(columns=table.columns).drop(group_id, axis=1) + out_table[input_col] = out_table[input_col].map(lambda lst: [item for item in lst if not isna(item)]) + + return {'out_table': out_table} diff --git a/function/python/brightics/function/transform/meta/SMOTE.json b/function/python/brightics/function/transform/meta/SMOTE.json new file mode 100644 index 000000000..726dc3d34 --- /dev/null +++ b/function/python/brightics/function/transform/meta/SMOTE.json @@ -0,0 +1,1499 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$SMOTE47342", + "name": "brightics.function.transform$SMOTE", + "context": "python", + "label": "Over Sampling (SMOTE)", + "description": "SMOTE is one of the most popular approach to generate new dataset samples. SMOTE first selects a class instance A at random and finds its k nearest class neighbors. The synthetic instance is then created by selecting one of the k nearest neighbors B at random and connecting A and B to form a line segment in the feature space. The synthetic instances are generated as a convex combination of the two chosen instances A and B.\n\nReferences:\nhttps://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis", + "tags": [ + "sampling", + "transform" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a table.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Oversampled data. " + } + }, + "params": [ + { + "id": "label_col", + "label": "Label Column", + "description": "The column designated for the labels of data.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "String" + ], + "multiple": false + }, + { + "id": "sampling_strategy", + "label": "Sampling Strategy", + "description": "Sampling information to resample the data set.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Minority", + "value": "minority", + "default": false + }, + { + "label": "Not Minority", + "value": "not minority", + "default": false + }, + { + "label": "Not Majority", + "value": "not majority", + "default": true + }, + { + "label": "All", + "value": "all", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [] + }, + { + "id": "seed", + "label": "Seed", + "description": "Control the randomization of the algorithm.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer" + }, + { + "id": "k_neighbors", + "label": "K Neighbors", + "description": "The number of instances to choose in the nearest neighbors belonging to the same class.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "defaultValue": 5 + }, + { + "id": "m_neighbors", + "label": "M Neighbors", + "description": "The number of nearest neighbors to use to determine if a minority sample is in danger. Only available when the parameter Kind is one of {'Borderline1', 'Borderline2', 'SVM'}", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "defaultValue": 10 + }, + { + "id": "kind", + "label": "Kind", + "description": "The type of SMOTE algorithm to use one of the following options: 'regular', 'borderline1', 'borderline2', 'svm'.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Regular", + "value": "regular", + "default": true + }, + { + "label": "Borderline1", + "value": "borderline1", + "default": false + }, + { + "label": "Borderline2", + "value": "borderline2", + "default": false + }, + { + "label": "SVM", + "value": "svm", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String" + }, + { + "id": "out_step", + "label": "Out Step", + "description": "Step size when extrapolating", + "visibleOption": [ + { + "id": "kind", + "value": "svm" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "defaultValue": 0.5 + }, + { + "id": "n_jobs", + "label": "N Jobs", + "description": "The number of threads to open if possible.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "defaultValue": 1 + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "multiple": true, + "rowCount": 5 + } + ], + "summary": "This function oversamples the input data using Synthetic Minority Over-sampling Technique.", + "tutorialLink": "https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/121_class_imbalance?type=insight" + }, + "md": { + "en": "# Over Sampling (SMOTE)\nThis function oversamples the input data using Synthetic Minority Over-sampling Technique.\n\n## Description\nSMOTE is one of the most popular approach to generate new dataset samples. SMOTE first selects a class instance A at random and finds its k nearest class neighbors. The synthetic instance is then created by selecting one of the k nearest neighbors B at random and connecting A and B to form a line segment in the feature space. The synthetic instances are generated as a convex combination of the two chosen instances A and B.\n\n+ References:\nhttps://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **out_table**: (Table) Oversampled data. \n#### PARAMETER\n1. **Label Column***: The column designated for the labels of data.\n\n2. **Sampling Strategy**: Sampling information to resample the data set.\n\n3. **Seed**: Control the randomization of the algorithm.\n\n4. **K Neighbors**: The number of instances to choose in the nearest neighbors belonging to the same class.\n\n\t* Default value: 5 \n5. **M Neighbors**: The number of nearest neighbors to use to determine if a minority sample is in danger. Only available when the parameter Kind is one of {'Borderline1', 'Borderline2', 'SVM'}\n\n\t* Default value: 10 \n6. **Kind**: The type of SMOTE algorithm to use one of the following options: 'regular', 'borderline1', 'borderline2', 'svm'.\n\n7. **Out Step**: Step size when extrapolating\n\n\t* Default value: 0.5 \n8. **N Jobs**: The number of threads to open if possible.\n\n\t* Default value: 1 \n9. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\nSMOTE(table, label_col, sampling_strategy = \"minority\", seed, k_neighbors = 5, m_neighbors = 10, kind = \"regular\", out_step = 0.5, n_jobs = 1, group_by = None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **out_table**: (Table) Oversampled data. \n#### PARAMETER\n1. **label_col***: The column designated for the labels of data.\n\t* Type: *str*\n2. **sampling_strategy**: Sampling information to resample the data set.\n\t* Type: *str*\n\t* Default / Range: ( minority | not minoritynot majority | not majority | all )\n3. **seed**: Control the randomization of the algorithm.\n\t* Type: *int*\n\n4. **k_neighbors**: The number of instances to choose in the nearest neighbors belonging to the same class.\n\t* Type: *int*\n\t* Default / Range: \n\t* Default value: 5 \n5. **m_neighbors**: The number of nearest neighbors to use to determine if a minority sample is in danger. Only available when the parameter Kind is one of {'Borderline1', 'Borderline2', 'SVM'}\n\t* Type: *int*\n\n\t* Default value: 10 \n6. **kind**: The type of SMOTE algorithm to use one of the following options: 'regular', 'borderline1', 'borderline2', 'svm'.\n\t* Type: *str*\n\t* Default / Range: regular ( regular | borderline1 | borderline2 | svm )\n7. **out_step**: Step size when extrapolating\n\t* Type: *double*\n\n\t* Default value: 0.5 \n8. **n_jobs**: The number of threads to open if possible.\n\t* Type: *int*\n\t* Default / Range: \n\t* Default value: 1 \n9. **group_by**: Columns to group by\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, modified sample_iris data is used for oversampling the minority class. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Label Column***: \"species\" \n2. **Sampling Strategy**: \"minority\"\n3. **Seed**: None\n4. **K Neighbors**: 5\n5. **M Neighbors**: 10\n6. **Kind**: \"regular\"\n7. **Out Step**: 0.5\n8. **N Jobs**: 1\n9. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.transform import SMOTE\nres = SMOTE(table = inputs[0], label_col = \"species\", sampling_strategy = \"minority\", k_neighbors = 5, m_neighbors = 10, kind = \"regular\", out_step = 0.5, n_jobs = 1, group_by = None)\noutput = res['out_table']\n```\nIn this tutorial workflow, modified sample_iris data is used for oversampling the minority class.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "SMOTE.json", + "label": "SMOTE", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mybh6kxb83p6rmgs", + "project_id": "p5dmzu78qb564crk", + "label": "SMOTE", + "contents": { + "mid": "mybh6kxb83p6rmgs", + "type": "data", + "title": "SMOTE", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593504138582", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "yzc9t49t95uymp4pa7edgbey" + } + ], + "layout": { + "type": "panel", + "id": "default-1593504138582" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tpdygdf2bkskgyun" + }, + "fid": "fbudpvtxegg3wc5t" + }, + { + "persist-mode": "auto", + "func": "pythonScript", + "name": "PythonScript", + "inputs": { + "inputs": [ + "tpdygdf2bkskgyun" + ], + "models": [], + "images": [] + }, + "outputs": { + "input": "tpysdh24ntxmqjgs" + }, + "param": { + "script": "input = inputs[0]\ninput = input.iloc[:120, :]" + }, + "display": { + "label": "Python Script", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593508983700", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "zfkquvxxhmrxw6wzf3r3wfra" + } + ], + "layout": { + "type": "panel", + "id": "default-1593508983700" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593508984059", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "4ms3j6z3chrqf4wcgv7mm22q" + } + ], + "layout": { + "type": "panel", + "id": "default-1593508984059" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "version": "3.6", + "context": "python", + "meta": { + "inputs": { + "type": "table", + "range": { + "min": 1, + "max": 10 + } + }, + "models": { + "type": "model", + "range": { + "min": 1, + "max": 10 + } + }, + "images": { + "type": "image", + "range": { + "min": 1, + "max": 10 + } + }, + "input": { + "type": "table" + } + }, + "fid": "fhkde4jrwaxa8bvn" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$SMOTE47342", + "name": "brightics.function.transform$SMOTE", + "param": { + "sampling_strategy": "minority", + "k_neighbors": 5, + "m_neighbors": 10, + "kind": "regular", + "out_step": 0.5, + "n_jobs": 1, + "label_col": "species" + }, + "display": { + "label": "Over Sampling (SMOTE)", + "diagram": { + "position": { + "x": 770, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593509294446", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "sx3u2nu9cq8we4p7f35w8z6i" + } + ], + "layout": { + "type": "panel", + "id": "default-1593509294446" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593509294765", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "vq3vt4rfervgy3feciunsriq" + } + ], + "layout": { + "type": "panel", + "id": "default-1593509294765" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tpysdh24ntxmqjgs" + }, + "outputs": { + "out_table": "t7utqb3zykc46bcm" + }, + "fid": "f7ffhunft34jzvbr" + } + ], + "links": [ + { + "kid": "kc5wzpqmg4vcm49a", + "sourceFid": "fbudpvtxegg3wc5t", + "targetFid": "fhkde4jrwaxa8bvn" + }, + { + "kid": "kd3sm6wxcckxjup8", + "sourceFid": "fhkde4jrwaxa8bvn", + "targetFid": "f7ffhunft34jzvbr" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T08:02:13.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T10:31:00.000Z", + "event_key": "2020_103100.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "SMOTE.png", + "label": "SMOTE.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, modified sample_iris data is used for oversampling the minority class. The parameter settings used in the function are shown below.", + "parameter": "1. **Label Column***: \"species\" \n2. **Sampling Strategy**: \"minority\"\n3. **Seed**: None\n4. **K Neighbors**: 5\n5. **M Neighbors**: 10\n6. **Kind**: \"regular\"\n7. **Out Step**: 0.5\n8. **N Jobs**: 1\n9. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.transform import SMOTE\nres = SMOTE(table = inputs[0], label_col = \"species\", sampling_strategy = \"minority\", k_neighbors = 5, m_neighbors = 10, kind = \"regular\", out_step = 0.5, n_jobs = 1, group_by = None)\noutput = res['out_table']", + "context": "python", + "description": "In this tutorial workflow, modified sample_iris data is used for oversampling the minority class." + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/delete_missing_data.json b/function/python/brightics/function/transform/meta/delete_missing_data.json index 6bf942ac6..c04b4203c 100644 --- a/function/python/brightics/function/transform/meta/delete_missing_data.json +++ b/function/python/brightics/function/transform/meta/delete_missing_data.json @@ -59,6 +59,43 @@ ], "multiple": true, "rowCount": 5 + }, + { + "id": "row_or_column", + "label": "Delete row or column", + "description": "Delete row or column", + "mandatory": false, + "items": [ + { + "label": "Row", + "value": "index", + "default": true + }, + { + "label": "Column", + "value": "columns", + "default": false + } + ], + "visibleOption": [], + "control": "RadioButton", + "columnType": [], + "validation": [] + }, + { + "id": "missing_ratio", + "label": "Missing values ratio", + "description": "Delete data with more than x% missing values. Default value = 1 (delete nothing)", + "mandatory": false, + "items": [], + "visibleOption": [], + "control": "InputBox", + "columnType": [], + "validation": [], + "placeHolder": "0 (0 <= value <= 1)", + "type": "Double", + "min": 0, + "max": 1 } ], "summary": "Remove rows when the chosen columns have abnormal values.", diff --git a/function/python/brightics/function/transform/meta/distinct.json b/function/python/brightics/function/transform/meta/distinct.json index 89ecaa8a0..4a3f97ad2 100644 --- a/function/python/brightics/function/transform/meta/distinct.json +++ b/function/python/brightics/function/transform/meta/distinct.json @@ -46,18 +46,6 @@ "columnType": [], "multiple": true }, - { - "id": "hold_cols", - "label": "Hold Columns", - "description": "Columns to show with Input Columns. If not selected, whole columns are shown.", - "visibleOption": [], - "control": "ColumnSelector", - "validation": [], - "mandatory": false, - "items": [], - "columnType": [], - "multiple": true - }, { "id": "group_by", "label": "Group By", diff --git a/function/python/brightics/function/transform/meta/explode.json b/function/python/brightics/function/transform/meta/explode.json new file mode 100644 index 000000000..06f68dc7b --- /dev/null +++ b/function/python/brightics/function/transform/meta/explode.json @@ -0,0 +1,1310 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$explode", + "name": "brightics.function.transform$explode", + "context": "python", + "label": "Explode And Unexplode", + "description": "This function explodes a column whose values are lists, and vice versa. To explode a column means to transform each element of an array type to a row, replicating any other column's values. Unexplode does the \"undo\" action of Explode, which is basically identical to grouping by other columns.", + "tags": [], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Input data table.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Output data table with the chosen column exploded or unexploded." + } + }, + "params": [ + { + "id": "input_col", + "label": "Input Column", + "description": "Choose a column of the input data. If all values of the column are list-like, this function explodes the column, and if all values of the column are not list-like, un-explodes the column.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Float", + "Double", + "Long", + "String", + "Integer[]", + "Float[]", + "Double[]", + "Long[]", + "String[]" + ], + "multiple": false + } + ], + "summary": "This function explodes a column whose values are lists, and vice versa." + }, + "md": { + "en": "# Explode And Unexplode\nThis function explodes a column whose values are lists, and vice versa.\n\n## Description\nThis function explodes a column whose values are lists, and vice versa. To explode a column means to transform each element of an array type to a row, replicating any other column's values. Unexplode does the \"undo\" action of Explode, which is basically identical to grouping by other columns.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Input data table.\n#### OUTPUT\n1. **out_table**: (Table) Output data table with the chosen column exploded or unexploded.\n#### PARAMETER\n1. **Input Column***: Choose a column of the input data. If all values of the column are list-like, this function explodes the column, and if all values of the column are not list-like, un-explodes the column.\n\n\n### Python\n#### USAGE\n\n```\nexplode(table = , input_col = )\n```\n\n#### INPUT\n1. **table***: (Table) Input data table.\n#### OUTPUT\n1. **out_table**: (Table) Output data table with the chosen column exploded or unexploded.\n#### PARAMETER\n1. **input_col***: Choose a column of the input data. If all values of the column are list-like, this function explodes the column, and if all values of the column are not list-like, un-explodes the column.\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, text_eng data is used as an input of Explode And Unexplode function. The Tokenizer function returns a column consisting of list of tokens, and the Explode And Unexplode function will list all items in a single column with other column values replicated. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Column***: tokenized_text\n\n\n\n### Python\n\n```\nfrom brightics.function.transform import explode\ninput_table = inputs[0]\nresult = explode(table=input_table, input_col='tokenized_text')\noutput = result['out_table']\n```\nIn this tutorial workflow, text_eng data is used as an input of Explode And Unexplode function. The Tokenizer function returns a column consisting of list of tokens, and the Explode And Unexplode function will list all items in a single column with other column values replicated.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "Explode And Unexplode.json", + "label": "Explode And Unexplode", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mkc5vh4bwvyu4asa", + "project_id": "p7puh97cexbjrebu", + "label": "Explode And Unexplode", + "contents": { + "mid": "mkc5vh4bwvyu4asa", + "type": "data", + "title": "Explode And Unexplode", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_text_eng.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592448810317", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "r2mapku2dqmi6tzf947jnxfw" + } + ], + "layout": { + "type": "panel", + "id": "default-1592448810317" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "t5yqh7sj5b8929wc" + }, + "fid": "fzhh6u9cmdq5y5er" + }, + { + "persist-mode": "auto", + "func": "brightics.function.textanalytics$tokenizer_eng51532", + "name": "brightics.function.textanalytics$tokenizer_eng", + "param": { + "stemming": false, + "pos_extraction": [ + "CC", + "JJ", + "JJR", + "JJS", + "NN", + "NNS", + "NNP", + "NNPS", + "RB", + "RBR", + "RBS", + "VB", + "VBD", + "VBN", + "VBP", + "VBZ" + ], + "is_tagged": false, + "input_cols": [ + "text" + ] + }, + "display": { + "label": "Tokenizer (English)", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592448858534", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "4ypbcfwn2f43ahfssvwzk5cc" + } + ], + "layout": { + "type": "panel", + "id": "default-1592448858534" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592448858581", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "2hi7qv6wxbe29yck2h5p7ugd" + } + ], + "layout": { + "type": "panel", + "id": "default-1592448858581" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t5yqh7sj5b8929wc" + }, + "outputs": { + "out_table": "typd8g72v5gqac2d" + }, + "fid": "fjmaha3bh59pwfcq" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$explode", + "name": "brightics.function.transform$explode", + "param": { + "input_col": "tokenized_text" + }, + "display": { + "label": "Explode And Unexplode", + "diagram": { + "position": { + "x": 770, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1592449295968", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ah6ewtmwhp7ix6qmrsz9vif3" + } + ], + "layout": { + "type": "panel", + "id": "default-1592449295968" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1592449296015", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "typd8g72v5gqac2d" + }, + "outputs": { + "out_table": "tnjcmfjvc8vnrccf" + }, + "fid": "fagyyaae55e6vgxa" + } + ], + "links": [ + { + "kid": "kqdhjeajaa2759y7", + "sourceFid": "fzhh6u9cmdq5y5er", + "targetFid": "fjmaha3bh59pwfcq" + }, + { + "kid": "kmkd5yyy2rkazz8v", + "sourceFid": "fjmaha3bh59pwfcq", + "targetFid": "fagyyaae55e6vgxa" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-18T02:53:24.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-18T03:01:40.000Z", + "event_key": "2020_030140.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "explode.png", + "label": "explode.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, text_eng data is used as an input of Explode And Unexplode function. The Tokenizer function returns a column consisting of list of tokens, and the Explode And Unexplode function will list all items in a single column with other column values replicated. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Column***: tokenized_text\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.transform import explode\r\ninput_table = inputs[0]\r\nresult = explode(table=input_table, input_col='tokenized_text')\r\noutput = result['out_table']", + "description": "In this tutorial workflow, text_eng data is used as an input of Explode And Unexplode function. The Tokenizer function returns a column consisting of list of tokens, and the Explode And Unexplode function will list all items in a single column with other column values replicated.", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/flatten_json.json b/function/python/brightics/function/transform/meta/flatten_json.json index 1f377dfcb..424d94159 100644 --- a/function/python/brightics/function/transform/meta/flatten_json.json +++ b/function/python/brightics/function/transform/meta/flatten_json.json @@ -1361,5 +1361,4 @@ "base64": "data:image/png;base64,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" } ] -} - +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/get_table.json b/function/python/brightics/function/transform/meta/get_table.json index 2cef587b9..b7acc87fe 100644 --- a/function/python/brightics/function/transform/meta/get_table.json +++ b/function/python/brightics/function/transform/meta/get_table.json @@ -833,4 +833,4 @@ "base64": "data:image/png;base64,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" } ] -} +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/pivot2.json b/function/python/brightics/function/transform/meta/pivot2.json index 317adbbec..727ad94c3 100644 --- a/function/python/brightics/function/transform/meta/pivot2.json +++ b/function/python/brightics/function/transform/meta/pivot2.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "transform", "func": "brightics.function.transform$pivot_twopivot", "name": "brightics.function.transform$pivot2", diff --git a/function/python/brightics/function/transform/meta/pivot3.json b/function/python/brightics/function/transform/meta/pivot3.json new file mode 100644 index 000000000..343360b57 --- /dev/null +++ b/function/python/brightics/function/transform/meta/pivot3.json @@ -0,0 +1,922 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$pivot3", + "name": "brightics.function.transform$pivot3", + "context": "python", + "label": "Pivot", + "description": "A pivot table is a table of statistics that summarizes the data of a more extensive table (such as from a database, spreadsheet, or business intelligence program). This summary might include sums, averages, or other statistics, which the pivot table groups together in a meaningful way. Pivot tables are a technique in data processing. They arrange and rearrange (or \"pivot\") statistics in order to draw attention to useful information.", + "tags": [ + "transform", + "preprocessing" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a table", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Pivoted table" + } + }, + "params": [ + { + "id": "index", + "label": "Rows", + "description": "Grouper, all combinations of elements of these columns are shown the left part of tables.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true, + "rowCount": 5 + }, + { + "id": "columns", + "label": "Columns", + "description": "Grouper, all combinations of elements of these columns are shown the top part of tables.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + }, + { + "id": "values", + "label": "Values", + "description": "Columns to aggregate.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [], + "multiple": true, + "rowCount": 5 + }, + { + "id": "aggfunc", + "label": "Aggregate Function", + "description": "Aggregate functions\n - Available Options: MAX, MIN, MEAN, SUM, VAR, STDEV, CNT, MEDIAN, Q1, Q3, DISTINCT", + "visibleOption": [], + "control": "CheckBox", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Max", + "value": "max", + "default": false + }, + { + "label": "Min", + "value": "min", + "default": false + }, + { + "label": "Mean", + "value": "mean", + "default": true + }, + { + "label": "Sum", + "value": "sum", + "default": true + }, + { + "label": "Variance of Sample", + "value": "var", + "default": false + }, + { + "label": "Standard Deviation of Sample", + "value": "std", + "default": false + }, + { + "label": "Count", + "value": "count", + "default": false + }, + { + "label": "Median", + "value": "median", + "default": false + }, + { + "label": "Q1", + "value": "q1", + "default": false + }, + { + "label": "Q3", + "value": "q3", + "default": false + }, + { + "label": "Distinct", + "value": "distinct", + "default": false + } + ], + "columnType": [] + } + ], + "summary": "This function returns pivot table." + }, + "md": "# Pivot\nThis function returns pivot table.\n\n## Description\nA pivot table is a table of statistics that summarizes the data of a more extensive table (such as from a database, spreadsheet, or business intelligence program). This summary might include sums, averages, or other statistics, which the pivot table groups together in a meaningful way. Pivot tables are a technique in data processing. They arrange and rearrange (or \"pivot\") statistics in order to draw attention to useful information.\n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a table\n#### OUTPUT\n1. **out_table**: (Table) Pivoted table\n#### PARAMETER\n1. **Rows**: Grouper, all combinations of elements of these columns are shown the left part of tables.\n\n2. **Columns**: Grouper, all combinations of elements of these columns are shown the top part of tables.\n\n3. **Values***: Columns to aggregate.\n\n4. **Aggregate Function**: Aggregate functions\n - Available Options: MAX, MIN, MEAN, SUM, VAR, STDEV, CNT, MEDIAN, Q1, Q3, DISTINCT\n\n\n### Python\n#### USAGE\n\n```\npivot3(table, values, aggfunc, index=None, columns=None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a table\n#### OUTPUT\n1. **out_table**: (Table) Pivoted table\n#### PARAMETER\n1. **index**: Grouper, all combinations of elements of these columns are shown the left part of tables.\n\t* Type: *list[str]*\n2. **columns**: Grouper, all combinations of elements of these columns are shown the top part of tables.\n\t* Type: *list[str]*\n3. **values***: Columns to aggregate.\n\t* Type: *list[str]*\n4. **aggfunc**: Aggregate functions\n - Available Options: MAX, MIN, MEAN, SUM, VAR, STDEV, CNT, MEDIAN, Q1, Q3, DISTINCT\n\t* Type: *str*\n\t* Default / Range: ( max | minmean | meansum | sum | var | std | count | median | q1 | q3 | distinct )\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, Pivot is used to calculate pivot table. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Rows**: Species\n2. **Values***: sepal_length\n3. **Aggregate Function**: MEAN, SUM\n\n\n### Python\n\n```\nfrom brightics.function.transform import pivot3\ninput_table = inputs[0]\nresult = pivot3(table = input_table, index = ['species'], values = ['sepal_length'], aggfunc = ['mean', 'sum'])\nout_table = result['out_table']\n```\n\nIn this python script, Pivot is used to calculate pivot table.\n", + "exampleModels": [ + { + "fileName": "Pivot.json", + "label": "Pivot", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mrnqbd58hwn7rbx2", + "project_id": "pzuy9kd3uqtj7ruh", + "label": "Pivot", + "contents": { + "mid": "mrnqbd58hwn7rbx2", + "type": "data", + "title": "Pivot", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": {}, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585738678645", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "s87cehg4c7d6s693b7qyvquy" + } + ], + "layout": { + "type": "panel", + "id": "default-1585738678645" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "t2k79dry3hfywrc6" + }, + "fid": "fjy3qxuz5k9pz92j" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$pivot3", + "name": "brightics.function.transform$pivot3", + "param": { + "aggfunc": [ + "mean", + "sum" + ], + "index": [ + "species" + ], + "columns": [], + "values": [ + "sepal_length" + ] + }, + "display": { + "label": "Pivot", + "diagram": { + "position": { + "x": 770, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1585738694276", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "qdmvz7p56rhnu3qnnt4n3ms4" + } + ], + "layout": { + "type": "panel", + "id": "default-1585738694276" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585738694327", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "r8fmyt73vxtiz6e32zccm3u5" + } + ], + "layout": { + "type": "panel", + "id": "default-1585738694327" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t2k79dry3hfywrc6" + }, + "outputs": { + "out_table": "tyk4jszcuf4jz4cx" + }, + "fid": "fu6hhnujm5tn9k6a" + } + ], + "links": [ + { + "kid": "kecknjbpyd2878gx", + "sourceFid": "fjy3qxuz5k9pz92j", + "targetFid": "fu6hhnujm5tn9k6a" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-04-01T10:57:53.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-04-01T10:58:54.000Z", + "event_key": "2020_105854.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "Pivot.png", + "label": "Pivot.png", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAACkCAIAAADuTUueAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABa9SURBVHhe7Z3rbxRXmsb3r9poRruz2nzYDzujrJQvuytlVppIE2l2M8OQmWRYFC4x5k4AAzYBO8YQCFfbOAECEbdgYmzADiw337Gx3fiKHWOMwTbsU/1WV58+XV1dbVeXqePn1U9WvadOHZfrvOfx26dOV/1d38AoIYQQw6C4E0KIgVDcCSHEQCjuhBBiIBR3QggxEIo7IYQYCMWdEEIMhOJOCCEGQnEnhBADobgTQoiBUNwJIcRAKO6EEGIgFHdCCDEQijshhBgIxZ0QQgyE4k4IIQZCcSeEEAOhuBNCiIFQ3AkhxEAo7oQQYiAUd0IIMRCKOyGEGAjFnRBCDITiTgghBkJxJ4QQA6G4E0KIgVDcCSHEQCjuhBBiIBR3QggxEIo7IXPn/SVtgri//6hd3EexJ3D/8LHtdvZY7ofLOsRt6xqBu+RT221ut9y/rOoU927LMNxPCmz39n3LXb72obiNd4bgrthgu9dvWe7qzV3iXmschFu41XZrr1vu+qJucS9fG4C7qdh2L9Ra7tYvHol77nI/3KJS2z1zwXJ3lfeI++33j+F+sd92q7+z3NKDveKeOBWDW37Ydo/WWO6BY33iHqrqg4uf4qIcLuqIi6PgogVx0SZctC8ufiNc/HZxcT5wcW7i4mzh4szFxd8CF3+XuPhL4eKvFhfXAS6uibi4SnBxxcTFNYSL6ykurjBcXG1xcf3hoi/ERe/ARU+Ji76Di34UFz0LF70sLvodLmJAXEQFXESIuIgZuEBcIO78obgTMncCHIqEAIo7IW8EFHcSLBR3QgghXlDcCSHEQCjuhMwduVdGSFAEGFEUd0LmDufcSbCYOeceGxwTBkfGR8YmxsYnxyeekwiBLkPHofucrtS62DzmPBQ7eofae4Y6e4fr7nRVXrm359TNbZV1nx8n0QCdhS5Dx6H70InoSnSo1sVzwyhxjw1aDD15OjE5NT0985pmhKEr0aHoVulfrdONQVas+6erb7g7NnKxqWP1gUvvFhz7+z99SQwAXYkORbeic9HFWqfnRK4R5cFCirskd8j4ZmZmbUmgGWfoXHTxIknkPUBmhxQPGd+vVxzWpIEYAzoXXYyODiqRnw8LKe4Y869evbI1gGa0oaPR3VoAGIB8UzErvf2jGPP/8FGFpgXESNDR6G50uhYGfvAZUX5YAHF/PDiGT+ucgVmEhk5H1yMAtJCILllnSFu7B/FpnTMwixB0OroeAaCFhDcRnnOXeRh7rNMWpcksjRYYEcV7KLb3DCGD08Y8WVQgABAGWmB4EFVxjw2OPnv+wh7itEVsCAMz7rLKU71c6Y6NLCs7rw11sghBGCAYtPDIhEdE5Up44o7BPDn10h7ctEVvCAaDV9FgMC/dfVYb5GTRgmDwr+9BEZK442M4c3aaZvH8PdrzM/KcWA18DGfOTjQQEn7mZ1wjam6EIe6POc9Oy2AIjEjfX02fIW3tHuQ8O3EFgZH1/mrE5tyHnjy1hzKNlmYIDy1gIkT6ULzY1KENaUIcEB5awGhETNy56pHmYQgPLWAihLz5yKG3f5SrHokHCA/v9e9aRM2H/Io7Fz7S/JgZiyM7ernwkWQHQRLO91fzLu78DiotqyFIIiru8pZOobN3mN9BJVlBkCBUnLDRUCNqnuRR3GOD1gMG7OFLo3laPHnXQ+jNx5kh7eqznhujDWNCXEGoZHq+WDTm3DFW+UQwmk9DqERa3LtjI3wiGPEJQiXTsvdoiHtQi2S065IV+zBa1CyKy2Yu1A7IRlCLZOxrkWr/tvqoU+GfP/nK2SbRJdOyGSei5k++xD02ODYxOWXH5vzss4NXfPJuwXFcNfswWtQMARPRmfeO3qHVBy6pQ3fO2Nci1Rxxf2fV0TPX25zKJLogYPJ9WzWP4h7+CkjoO66a7dAiaK9ev345PfPz00ktnBacpjv3tRJhV3kPfrb3DAW1AtK+EKkm4g5lP3zp7tTL6VMNrSfrWrZXN7zNLD6yvPWnL3+5dN9/rq8srmlIj6hAyKO424EZolHcjTFI/MDwz1pQLRRnL13cf/TgsW+q0yVeZkg7e4fVcTsf7L8/1UTc39tYffXeo+n4fazZ2Vc/P5vae6ZJPZZEFEh8Y3OvGlGBkC9xHxwZl7jMh4mID4xO2H7CfIj7rd1L135Qccv25mUBNrXYrXO8b/Ptg/91aTXABlwUQt+1oFoortTX7zt8AHx1/LAm8TIU6+50OQN1nsgF0cyZlvljydnYyFNs/GblkWsPemU7My0P7QZsG29tsMqrYhic9nYONNyYHK3RC0nO/OPKkncOrfv371cAbMBFIfRdjahAyJe4j4zpyhug4TPpP3184F/+99Ctjn67KG4U9ygapBya/h8XPnWAK/r+hszPOOKeLvHffv8YPyuv3HOG7jyRa6KZekMV+o6fby0pX3f4KgaCU+5GXNz77To11lh5caNKrZAD8cMp7vMFUg5NV6Mdrui7zM9IRAVCvsR9bHzSisq82YWfHuJyvFtwXNX3+Yh7U8XaD7ALrD8bs8uUwqWHmqRo4OwqKak4RHEPxJCqq7EuoBC73pDkXRN3QZX4PaduytCdP3JNNFPFPRdSxD2ZsDsb9aPY/7A+da9zYNykpKjVeaTr3P89EIBUXQt1gELscpL3oMiXuAf79SVIOeJbQy4W8ndnfmbO4h4XcZFvpcL/HbKFXgTdKuw/vT5RE3sp7kGYlrYLKMSuV69fa5L6prFy4w+Q/gC/vqQFufCLP+/7xZ/L/3vXdxdvPezqH7vRElv11Q+/+ut+7dg0sol7vIIi3yLcylGK+jNzDwQtbRdQiF2/XLoPyll+2J58nz8Ud1hKYexc8QdLi08PiKck76gQV/lV5+SzQsYPAbScLNLi/v6StmDF3RUo+9aq+hfK8rOZ2dkTtQ/e/pv3apkUcU9OyyhJulU4GSuy5tNlI0XQ4/PsdjnFPRCyinsE5tyjNC2TItlJcY9vSOXEURT3PFikp2VkKAY4LePK/+z6TlV2semZ2TVf12o1U0nOroi5zMBYUv7iRn2yREnhAcU9YLJOy/CGarA3VFMKE+Ien4Gx599TxD1Rk+IejEX6hurRmhh+BnhDFbG97vDVt5aUY/uPxfaL+i7d7pJrpdmDR95LMFOnZRzSptfHJxVBZ+aeT7LeUJWICoR8iXu0lkK6zrk7hUoKzzn3vBikHKk6NB1gQ5Q9EkshhQCXQsZGnl699+hf44+pwbboe1e/+7dGkM47B7rhR9xFtRNzMhbKUZxzzwOQcqTq0HSADVH2wO+mgnyJ+5v6Jaa4dqsk1sakzK2LSZ5uUbxKy+Ktalwtk0eLypeYJM8K8EtMe880jU1Mzc5aD8qenpm9evfRexurb7Y6C7hSrHd4XDs8FV/iLgqedC3iB8YtkcLb1VJKSECoX2KKQObOxw/Q5mCRe/yAzJAG+PiBt//21fbqhpq6llMNrVMvpw9fuvvOqqOrD/4wM6s/YBX/APacbtQOJ1Eh0+MHIjDnDnHng8NoOVkUHxwmQzHAB4epnLneBmXHxq/+uv9E7QN58IAYlP3Kne7frDyi1icRItODwyIg7oCP/KXlZFF85K+zKjkf78VWn+6LjH7N17XNPcMvpmf6hse/ON346xWH31qSrEyiRaZH/kZgnTvgyzpo/i2iL+tw4Ms6iH88XtYRIPkVd75mj+bTIvqaPedJIHzNHvGPx2v2IvBsGSHGF2TTfFh0X5CtzpDyBdnED94vyI7GnDvAiGXyTstq8bQ98uLe0TvE5J1kBUHi8Q6myIi7EP6aSFqEDOGhBUyE0N6b09s/GtSaSGIkCA8EiRozGhF4E5NKUMtmaEZaFBfJeJCPZTPEGDItkskHYYj7Y07O0DIYAgPhoQVMhEh/V31r9yAnZ4grCAyEhxYwGukRNWfCEHcQGxx79tx53j+NZhlCIqJT7Q6uM6TtPUPLys5rA5sschASCAwtVNKJ2Jy7EBscnZx6aQ9r2qI3BEOkF7YLmYZid2xk6W77mY6EIBh8LmyPpLgDDGbm7zRYPGfXwyOKbCru1kocMJiZvxOAMPD/lSWPiMqVUMUdcHEkLboLH3MFH8M5/77IQQD4mY3JB2GLO3g8ODb05CnXRy5CQ6ej6yN9B1XjWmOW+2Ot3YMXmzq4PnIRgk5H12e9g6qRNaL8swDi7oAMjt9fXSSGjkZ3awFgAD5nSHv7R5HB8furiwR0NLrbez17JqI6566Bz+YyS8Pnixls6FyZhzFyKsb/UOzoHerstZ4/w+eLGQw6F12Mjvb4Dqo3hoi7EBu0wKf1ickpztUYY+hKdCi6VfpX63RjWL25SyvxpqtvuDs2gk/rqw9c4lyNMaAr0aHoVnRupieC+STXiPJg4cXdQZI7MDgyPjI2MTY+iYyPRAh0GToO3ed0pdbFxAGZXXuPlcvX3emqvHJvz6mbyPg+P06iAToLXYaOQ/ehE9GVc07V88cbJO6ERI7b9+eVphGiEWBEUdwJmTsBzpASAoyacyckulDcSbBQ3Ekq92uWF9bcdraXrv0A7KlLqTPQdqQwXg6kcvaaO4/ctwvP75Htum1ySNpR5/fY5dtqk4UJ0GDFeb3QBD4p6NRKSN4JONr1kL5dtdN2k/Fft00aqa2QXcurXCQYQ8At+EHicB8EGFEU9+gjAWdHD2Lajsi0UEMQqwqbsSaC23YxHmQk1FbY0ayOKxWnQsY4rtumDypCcifoaE8P6XSNVjIbaTPZWgKUWKKvHZjkfs02t/8HeYXiHnXajlTVKQGqaCuGAfTU2YUNOx+xQzARsokNuybCtOKInbykVpA27UZSgtuqUGXvSjQu1ZKJUrIRg2jryvtrjolC4NGeHtK2TFvYoZv4LTgkEczJBEiorcGxyn+FZCOJpMcaVn4+vAYYURR3I1DDPSG71qfLRCxaSPTbdZwExIq/lDCNF6bm6ckhhDZdU3hLylMad8nf9fFgBJxzXwCCjPb0kHbqJ8Ra/dia+BXJoxSS4q7UdPCZ3HDOnaSiSm0iE1le6BJ/cRDliLPkwEBQKjXVFCOjUitjxkIJXGk8PthS0h/38RB1KO4LQJDRrpIS0sCO2Azinp6pJMU9vm2fWOJ3qXs9oLiTVJLhbmsrCrX4S2qrXTkZyprsJl2MHKmZGEvJAE1mRqkuGk8ZIRnPxww+XBbeW9OITaDRrod0euPq/SS7keTvVXGT7+Tv9Zm5BxhRFHcjSEZkPEbVlCElWCWbSARZomZyOUGGmkpcIlhllx7lTqoSj2+nmuFz7mQBCDjatZC21F9qJjU906+Dq6Q4SXFH43abTiM4H7v90KC4Ex8kk5e5gnBXM31CokMAecn8R1DuUNyJL+YX3wuQtoQD59wXB663nfyTw+GccyfkjYDiToKF4k7IGwGGoiDu7z9qF/dR7AncP3xsu509lvvhsg5xZS3zkk9tt7ndcv+yqlPcuy3Wo6M+KbBdeZLU8rUPxW28Yz19cMUG271+y3JXb+4SV97jU7jVdmuvW+76om5xL18bgLup2HYv1Fru1i8eiXvucj/colLbPXPBcneV94hLQgOXPRAo7oSQLEBxXk7PkBCguBNCwoPiHhoUd0JIeFDcQ4PiTggJD4p7aFDcCSHhQXEPDYo7ISQ8KO6hQXEnhISHH3Fva28/WfPN9qKizwoKADbgtrYF8F8hfy23tLZWVlahwYI1awA24Da3tLx4Oa3VzBWcc/XJmm3bt+OE1xQWFu3YAdfPOVPcCSHh4S3uscf95eX7du7adfXHOmxPPp8C2ICLQuzCtnaIT/LacmlZWXFJybX6BrVluCW7d6Plx/0D2iE+wYFyzvUN17E99eLls8nnaBkufl3Wc6a4E0LCw0Pc29s7Nm7aBE10zXZRWHetfv2GDaim7cpKvluG2mZq+fqNm5s2b+7sfKjtygpaxoEeLWMXfrXHOVPcCSHhkUnckYRCqlpaW7VyDVRANe+MVSN/LSOb9tNya1vb3FpW514OHjzk4BS2tbd7tExxJ4SEh6u4Iw/dW1qK9FkrdwXVUNk1n00nry2Xl+/7se6aVu4KqqFlrdCD0rIy55yh5kePHnM0XZN4fBxBZddzprgTQsLDVdyR/O7ctctRqJWrVjm7VKQc1VA5a74sSMs3bjauXbcOh+PnzcYmZy+21fKcWm5v79hVXKyq6p69e4t27Lhz965T4oBqxSUlzS0tWrkr2tUQHXc03XFlL6rhNFzPmeJOCAkPV3GvPllz9cc6tSRd39USVMYhjuuBtAztlrua+IltZ296eQ4tV59MP+cHzc3Q94qK/elTJUixjx8/oRW6crLmG7VlR8dV1EJ8LMDJOK4DxZ0QEh6u4r69qChdDVU117QelXGIWpIJaVkV8XXr16O13/3uffx877e/Vcux4b9liLh2znKSz6deXKm9umHjxm9PnR5/OuHsxa/w2TLS9t6+mONmFXecxrbt2x3XgeJOCAkPV3H/rKBg8vmUVghELjVlBxBQHKIVuiIt32xsWr9hA9rBT5mWkTYrK6u0cv8tryks1M5ZPc+xn8drvvl246ZNjU0/SQkqF6xZ41TwAP+KJp5NOq7oOH46OIUCKrueM8WdEBIeruIOOYOqaoVCurKDTHKWTqaWXZsF/lv2Fnfh6o91qCbb/sUdhzydeOa4qo47qIWZ/iFR3Akh4eEq7ulTHILIZbpo9sUeu05EpOPdsnZDFSXzaVk9z+GRJ8eOHd+8ZctPt25LCSr7n/BJn5bBTwenUMjUMsWdEBIeruJ+4kSldnMSqFqp6Tsq4xC1JBOuLQNpEJruzLljGxv+W66qqtbWQUqbyKMvXf5h/YYNZ899r86u1F2rr6ysclwPcr2hisquN4Ep7oSQ8HAV9+aWFm1ZoabmaonH4r900lsW0BrQbqjm1HJrW1txSYl2zvfu30cSfejQ1/0Dg045QLWS3bt9LoVEy+lLITWcQo9zprgTQsLDVdyhUOpXjdKVXZDya/UNQX2JSbvRmlPLoOzLL9UUu7SsDDr7oLnZKXGob7i+b19FTi2rX2JyRfbyS0yEkDcCV3EHsfhDArI+7BApaq5f5c9fy8j3cUjWTL+jo3Pzli3yEcEnqLxp8+asLbe1t3u0THEnhIRHJnEHWR/ChWQWKbbHo7Iykb+Wu7q6vR/vhdQevxrVtF1Zwb8EtIwTm3rxUtsF0DJy9i2ff+7xSDKKOyEkPDzEHSBx3ltaujP+YF4kpM+nXkw8m+yLPYaLQuzKKbNWyV/LaM1pGQ0+m3wuD+aFLheXlJSWlc255f6BwX37KtDyldqraGQy9THF2KXN7GtQ3Akh4eEt7gA5aUtra3Xi9RSFa9fu2LkTLgpds2P/5LVlZP3V1SeLduxYU1gIsFFZWZV1XsUP8oIRqPnadesANuCiUKuWDsWdEBIeWcWdBAXFnRASHhT30KC4E0LCg+IeGhR3Qkh4UNxDg+JOCAkPintoUNwJIeFBcQ8NijshJDygOCQ0tIs/ZyjuhBBiIBR3QggxEIo7IYQYCMWdEEIMhOJOCCEGQnEnhBADobgTQoiBUNwJIcRAKO6EEGIgFHdCCDEQijshhBgIxZ0QQgyE4k4IIQZCcSeEEAOhuBNCiIFQ3AkhxEAo7oQQYiAUd0IIMRCKOyGEGAjFnRBCDITiTgghBkJxJ4QQA6G4E0KIgVDcCSHEQCjuhBBiIBR3QggxEIo7IYQYCMWdEEIMhOJOCCEGQnEnhBADobgTQoiBUNwJIcRAKO6EEGIgFHdCCDEQijshhBjHwOj/AzvGTmE1YTMtAAAAAElFTkSuQmCC" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/savgol_filter.json b/function/python/brightics/function/transform/meta/savgol_filter.json new file mode 100644 index 000000000..576034de6 --- /dev/null +++ b/function/python/brightics/function/transform/meta/savgol_filter.json @@ -0,0 +1,980 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$savgol_filter", + "name": "brightics.function.transform$savgol_filter", + "context": "python", + "label": "Savitzky-Golay Filter", + "description": "A Savitzky–Golay filter is a digital filter that can be applied to a set of digital data points for the purpose of smoothing the data, that is, to increase the precision of the data without distorting the signal tendency\n\nReference:\n+ ", + "tags": [ + "savgol_filter" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "Integer", + "Long", + "Float", + "Double" + ], + "multiple": true + }, + { + "id": "window_length", + "label": "Window length", + "description": "The length of the filter window (i.e. the number of coefficients). window_length must be a positive odd integer.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "1 (value >= 1)", + "type": "Integer", + "min": 1 + }, + { + "id": "polyorder", + "label": "Polyorder", + "description": "The order of the polynomial used to fit the samples. polyorder must be less than window_length.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "0 (value >= 0)", + "type": "Integer", + "min": 0 + }, + { + "id": "deriv", + "label": "Derivative order", + "description": "The order of the derivative to compute. This must be a nonnegative integer. The default is 0, which means to filter the data without differentiating.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 0, + "placeHolder": "0 (value >= 0)" + }, + { + "id": "delta", + "label": "Delta", + "description": "The spacing of the samples to which the filter will be applied. This is only used if deriv > 0. Default is 1.0.", + "visibleOption": [ + { + "script": "return #deriv# > 0;" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "placeHolder": "1.0 (value >= 0.0)" + }, + { + "id": "axis", + "label": "Axis", + "description": "The axis of the array x along which the filter is to be applied. Default is -1.\n\n", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "placeHolder": "-1" + }, + { + "id": "mode", + "label": "Mode", + "description": "Must be ‘mirror’, ‘constant’, ‘nearest’, ‘wrap’ or ‘interp’. This determines the type of extension to use for the padded signal to which the filter is applied. When mode is ‘constant’, the padding value is given by cval. See the Notes for more details on ‘mirror’, ‘constant’, ‘wrap’, and ‘nearest’. When the ‘interp’ mode is selected (the default), no extension is used. Instead, a degree polyorder polynomial is fit to the last window_length values of the edges, and this polynomial is used to evaluate the last window_length // 2 output values.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "mirror", + "value": "mirror", + "default": false + }, + { + "label": "constant", + "value": "constant", + "default": false + }, + { + "label": "nearest", + "value": "nearest", + "default": false + }, + { + "label": "wrap", + "value": "wrap", + "default": false + }, + { + "label": "interp", + "value": "interp", + "default": true + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [] + }, + { + "id": "cval", + "label": "cval", + "description": "Value to fill past the edges of the input if mode is ‘constant’. Default is 0.0.", + "visibleOption": [ + { + "id": "mode", + "value": "constant" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "0.0", + "type": "Double" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "multiple": true + } + ] + }, + "md": { + "en": "# Savitzky-Golay Filter\n\n\n## Description\nA Savitzky–Golay filter is a digital filter that can be applied to a set of digital data points for the purpose of smoothing the data, that is, to increase the precision of the data without distorting the signal tendency\n\nReference:\n+ \n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **Input Columns***: Input columns.\n\n2. **Window length**: The length of the filter window (i.e. the number of coefficients). window_length must be a positive odd integer.\n\n3. **Polyorder**: The order of the polynomial used to fit the samples. polyorder must be less than window_length.\n\n4. **Derivative order**: The order of the derivative to compute. This must be a nonnegative integer. The default is 0, which means to filter the data without differentiating.\n\n5. **Delta**: The spacing of the samples to which the filter will be applied. This is only used if deriv > 0. Default is 1.0.\n\n6. **Axis**: The axis of the array x along which the filter is to be applied. Default is -1.\n\n\n\n7. **Mode**: Must be ‘mirror’, ‘constant’, ‘nearest’, ‘wrap’ or ‘interp’. This determines the type of extension to use for the padded signal to which the filter is applied. When mode is ‘constant’, the padding value is given by cval. See the Notes for more details on ‘mirror’, ‘constant’, ‘wrap’, and ‘nearest’. When the ‘interp’ mode is selected (the default), no extension is used. Instead, a degree polyorder polynomial is fit to the last window_length values of the edges, and this polynomial is used to evaluate the last window_length // 2 output values.\n\n8. **cval**: Value to fill past the edges of the input if mode is ‘constant’. Default is 0.0.\n\n9. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nsavgol_filter(table = , input_cols = , window_length = , polyorder = , deriv = , delta = , axis = , mode = , cval = , group_by = )\n```\n\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **input_cols***: Input columns.\n\t* Type: *list[str]*\n2. **window_length**: The length of the filter window (i.e. the number of coefficients). window_length must be a positive odd integer.\n\t* Type: *int*\n\t* Default / Range: 1 (value >= 1)\n3. **polyorder**: The order of the polynomial used to fit the samples. polyorder must be less than window_length.\n\t* Type: *int*\n\t* Default / Range: 0 (value >= 0)\n4. **deriv**: The order of the derivative to compute. This must be a nonnegative integer. The default is 0, which means to filter the data without differentiating.\n\t* Type: *int*\n\t* Default / Range: 0 (value >= 0)\n5. **delta**: The spacing of the samples to which the filter will be applied. This is only used if deriv > 0. Default is 1.0.\n\t* Type: *double*\n\t* Default / Range: 1.0 (value >= 0.0)\n6. **axis**: The axis of the array x along which the filter is to be applied. Default is -1.\n\n\n\t* Type: *int*\n\n7. **mode**: Must be ‘mirror’, ‘constant’, ‘nearest’, ‘wrap’ or ‘interp’. This determines the type of extension to use for the padded signal to which the filter is applied. When mode is ‘constant’, the padding value is given by cval. See the Notes for more details on ‘mirror’, ‘constant’, ‘wrap’, and ‘nearest’. When the ‘interp’ mode is selected (the default), no extension is used. Instead, a degree polyorder polynomial is fit to the last window_length values of the edges, and this polynomial is used to evaluate the last window_length // 2 output values.\n\t* Type: *str*\n\t* Default / Range: ( mirror | constant | nearest | wrapinterp | interp )\n8. **cval**: Value to fill past the edges of the input if mode is ‘constant’. Default is 0.0.\n\t* Type: *double*\n\n9. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nThe sample workflow is an example for the usage of Savitzky-Golay Filter, applied on a sample time series. It uses ‘interp’ mode extension, for the padded signal to which the filter is applied. \n\n++Parameters++\n1. **Input Columns***: data, data2\n2. **Window length**: 3\n3. **Polyorder**: 0\n4. **Derivative order**: 0\n5. **Axis**: -1\n6. **Mode**: interp\n\n\n\n### Python\n\n```\nfrom brightics.function.transform import savgol_filter\n\ninput_table = inputs[0]\n\nresult = savgol_filter(table = input_table,\n input_cols = ['data', 'data2'],\n window_length = 3,\n polyorder = 0,\n deriv = 0,\n axis = -1 ,\n mode = 'interp ')\n\noutput = result['out_table']\n```\nThis is the script expression for the usage of Savitzky-Golay Filter, with the same setting to the VA example model. \n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "Savitzky-Golay Filter.json", + "label": "Savitzky-Golay Filter", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m2eejtbrrmxa6u76", + "project_id": "p5dmzu78qb564crk", + "label": "Savitzky-Golay Filter", + "contents": { + "mid": "m2eejtbrrmxa6u76", + "type": "data", + "title": "Savitzky-Golay Filter", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_timeseries.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 120 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593503560995", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "vix5jd7gfkructrbzswpwz5w" + } + ], + "layout": { + "type": "panel", + "id": "default-1593503560995" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tjtajkpumzu534wd" + }, + "fid": "fnkgwp5vrkyzpyyj" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$savgol_filter", + "name": "brightics.function.transform$savgol_filter", + "param": { + "mode": "interp", + "input_cols": [ + "data", + "data2" + ], + "window_length": 3 + }, + "display": { + "label": "Savitzky-Golay Filter", + "diagram": { + "position": { + "x": 520, + "y": 120 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593503608714", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "k7yhdy4c6nhtif49bfsp2rux" + } + ], + "layout": { + "type": "panel", + "id": "default-1593503608714" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593503608756", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tjtajkpumzu534wd" + }, + "outputs": { + "out_table": "tbswnnn3xx5mq828" + }, + "fid": "fcze2farkmse5adt" + } + ], + "links": [ + { + "kid": "k7vqbrhk2aw3cs98", + "sourceFid": "fnkgwp5vrkyzpyyj", + "targetFid": "fcze2farkmse5adt" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T07:52:33.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T07:53:44.000Z", + "event_key": "2020_075344.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "savgol_filter.PNG", + "label": "savgol_filter.PNG", + "base64": "data:image/png;base64,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", + "description": "The sample workflow is an example for the usage of Savitzky-Golay Filter, applied on a sample time series. It uses ‘interp’ mode extension, for the padded signal to which the filter is applied. ", + "parameter": "1. **Input Columns***: data, data2\n2. **Window length**: 3\n3. **Polyorder**: 0\n4. **Derivative order**: 0\n5. **Axis**: -1\n6. **Mode**: interp\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.transform import savgol_filter\r\n\r\ninput_table = inputs[0]\r\n\r\nresult = savgol_filter(table = input_table,\r\n input_cols = ['data', 'data2'],\r\n window_length = 3,\r\n polyorder = 0,\r\n deriv = 0,\r\n axis = -1 ,\r\n mode = 'interp ')\r\n\r\noutput = result['out_table']", + "description": "This is the script expression for the usage of Savitzky-Golay Filter, with the same setting to the VA example model. ", + "context": "python" + } + ] +} diff --git a/function/python/brightics/function/transform/meta/split_data.json b/function/python/brightics/function/transform/meta/split_data.json index 6275b5bac..36fab6980 100644 --- a/function/python/brightics/function/transform/meta/split_data.json +++ b/function/python/brightics/function/transform/meta/split_data.json @@ -95,7 +95,7 @@ "tutorialLink": "https://www.brightics.ai/docs/ai/v3.6/tutorials/10_sampling?type=insight", "summary": "Split data into random train and test sets." }, - "md": "# Split Data\nSplit data into random train and test sets.\n\n## Description\nSplit Data is a method of splitting a dataset into a training set and a test set. A training dataset is a dataset used for learning, and a test dataset is a dataset that is independent of the training dataset. Therefore, a test set is used in to assess the performance (i.e. generalization) of a fitted model. \n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a table. \n#### OUTPUT\n1. **train_table**: (Table) Training dataset in a table. \n2. **test_table**: (Table) Test dataset in a table. \n#### PARAMETER\n1. **Train Ratio**: Train ratio for splitting a dataset. It should be numeric type. \n\n\t* Default value: \n2. **Test Ratio**: Test ratio for splitting a dataset. It should be numeric type. \n\n3. **Seed**: The seed used by the random number generator.\n\n4. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\nsplit_data(table, train_ratio = 7.0, test_ratio = 3.0, random_state = None, group_by = None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a table. \n#### OUTPUT\n1. **train_table**: (Table) Training dataset in a table. \n2. **test_table**: (Table) Test dataset in a table. \n#### PARAMETER\n1. **train_ratio**: Train ratio for splitting a dataset. It should be numeric type. \n\t* Type: *double*\n\t* Default value: 7.0\n\n2. **test_ratio**: Test ratio for splitting a dataset. It should be numeric type. \n\t* Type: *double*\n\t* Default value: 3.0\n\n3. **random_state**: The seed used by the random number generator.\n\t* Type: *int*\n\n4. **group_by**: Columns to group by\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used for Split Data. The generated model shows the result of Split Data for a given train ratio 7.0 and test ratio 3.0. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Train Ratio**: 7.0\n2. **Test Ratio**: 3.0\n3. **Seed**: None\n4. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.transform import split_data\ninput_table = inputs[0]\nres = split_data(table = input_table, \n\t\t train_ratio = 7.0, \n\t\t test_ratio = 3.0, \n\t\t random_state = None, \n\t\t group_by = None)\noutput1 = res['train_table']\noutput2 = res['test_table']\n```\n\nIn this python script, Split Data function divides the input data into train data and test data according to a given train ratio and test ratio.", + "md": "# Split Data\nSplit data into random train and test sets.\n\n## Description\nSplit Data is a method of splitting a dataset into a training set and a test set. A training dataset is a dataset used for learning, and a test dataset is a dataset that is independent of the training dataset. Therefore, a test set is used in to assess the performance (i.e. generalization) of a fitted model. \n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a table. \n#### OUTPUT\n1. **train_table**: (Table) Training dataset in a table. \n2. **test_table**: (Table) Test dataset in a table. \n#### PARAMETER\n1. **Train Ratio**: Train ratio for splitting a dataset. It should be numeric type. \n\n\t* Default value: 7.0 \n2. **Test Ratio**: Test ratio for splitting a dataset. It should be numeric type. \n\n\t* Default value: 3.0 \n\n3. **Seed**: The seed used by the random number generator.\n\n4. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\nsplit_data(table, train_ratio = 7.0, test_ratio = 3.0, random_state = None, group_by = None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a table. \n#### OUTPUT\n1. **train_table**: (Table) Training dataset in a table. \n2. **test_table**: (Table) Test dataset in a table. \n#### PARAMETER\n1. **train_ratio**: Train ratio for splitting a dataset. It should be numeric type. \n\t* Type: *double*\n\t* Default value: 7.0\n\n2. **test_ratio**: Test ratio for splitting a dataset. It should be numeric type. \n\t* Type: *double*\n\t* Default value: 3.0\n\n3. **random_state**: The seed used by the random number generator.\n\t* Type: *int*\n\n4. **group_by**: Columns to group by\n\t* Type: *list[str]*\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\n\nIn this tutorial workflow, sample_iris data is used for Split Data. The generated model shows the result of Split Data for a given train ratio 7.0 and test ratio 3.0. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Train Ratio**: 7.0\n2. **Test Ratio**: 3.0\n3. **Seed**: None\n4. **Group By**: None\n\n\n### Python\n\n```\nfrom brightics.function.transform import split_data\ninput_table = inputs[0]\nres = split_data(table = input_table, \n\t\t train_ratio = 7.0, \n\t\t test_ratio = 3.0, \n\t\t random_state = None, \n\t\t group_by = None)\noutput1 = res['train_table']\noutput2 = res['test_table']\n```\n\nIn this python script, Split Data function divides the input data into train data and test data according to a given train ratio and test ratio.", "exampleModels": [ { "fileName": "Split Data.json", diff --git a/function/python/brightics/function/transform/meta/svd.json b/function/python/brightics/function/transform/meta/svd.json index e0780023a..e20a2cae7 100644 --- a/function/python/brightics/function/transform/meta/svd.json +++ b/function/python/brightics/function/transform/meta/svd.json @@ -4,6 +4,7 @@ "content": "" }, "specJson": { + "deprecated": true, "category": "transform", "func": "brightics.function.transform$svd88688", "name": "brightics.function.transform$svd", diff --git a/function/python/brightics/function/transform/meta/svd2.json b/function/python/brightics/function/transform/meta/svd2.json new file mode 100644 index 000000000..083c9a5c4 --- /dev/null +++ b/function/python/brightics/function/transform/meta/svd2.json @@ -0,0 +1,920 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$svd2", + "name": "brightics.function.transform$svd2", + "context": "python", + "label": "SVD", + "description": "The singular value decomposition(SVD) is a decomposition of a matrix, which generalizes the eigendecomposition of a square matrix to any m * n matrix. More specifically, for a given matrix A of size m * n, the SVD of A is a factorization of the form A=USV, where U and V are orthonormal matrices of size m * m and n * n, respectively and S is an m * n rectangular matrix with non-negative real numbers on the diagonal. The diagonal entries of S are known as the singular values of A. \nIn the case of the compact singular value decomposition, U and V are matrices of size m * k and k * n, respectively and S is a diagonal matrix of size k * k, where k=min{m, n}. ", + "tags": [], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table1": "", + "out_table2": "", + "out_table3": "", + "out_table4": "", + "model": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a Table. ", + "optional": false + }, + "out_table1": { + "type": "table", + "desc": "Output table whose columns are left-singular vectors of an input table. " + }, + "out_table2": { + "type": "table", + "desc": "Output table that returns the array of singular values." + }, + "out_table3": { + "type": "table", + "desc": "Output table whose columns are right-singular vectors of an input table. " + }, + "out_table4": { + "type": "table", + "desc": "Output table that projects the orginal dataset onto the singular vector subspace. " + }, + "model": { + "type": "model", + "desc": "Output model." + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "Choose columns of the input data to make a matrix A, where this function performs the singular value decomposition. If there is no input, all columns of number types(Double, Long, Integer) are selected.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "columnType": [ + "Integer", + "Float", + "Double", + "Long" + ], + "multiple": true + }, + { + "id": "full_matrices", + "label": "Calculate Full Matrix", + "description": "If False, it returns the compact singular value decomposition. Otherwise, it returns the full singular value decomposition. ", + "visibleOption": [], + "control": "BooleanRadio", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "defaultValue": false + }, + { + "id": "new_column_name", + "label": "New Column Name", + "description": "Name of new column(s)", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "type": "String", + "placeHolder": "projected_" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "columnType": [], + "multiple": true + } + ], + "summary": "This function is for the singular value decomposition of a given dataset, which generalizes the eigendecomposition. " + }, + "md": { + "en": "# SVD\nThis function is for the singular value decomposition of a given dataset, which generalizes the eigendecomposition. \n\n## Description\nThe singular value decomposition(SVD) is a decomposition of a matrix, which generalizes the eigendecomposition of a square matrix to any m * n matrix. More specifically, for a given matrix A of size m * n, the SVD of A is a factorization of the form A=USV, where U and V are orthonormal matrices of size m * m and n * n, respectively and S is an m * n rectangular matrix with non-negative real numbers on the diagonal. The diagonal entries of S are known as the singular values of A. \nIn the case of the compact singular value decomposition, U and V are matrices of size m * k and k * n, respectively and S is a diagonal matrix of size k * k, where k=min{m, n}. \n\nReference\n- \n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a Table. \n#### OUTPUT\n1. **out_table1**: (Table) Output table whose columns are left-singular vectors of an input table. \n2. **out_table2**: (Table) Output table that returns the array of singular values.\n3. **out_table3**: (Table) Output table whose columns are right-singular vectors of an input table. \n4. **out_table4**: (Table) Output table that projects the orginal dataset onto the singular vector subspace. \n5. **model**: (Model) Output model.\n#### PARAMETER\n1. **Input Columns***: Choose columns of the input data to make a matrix A, where this function performs the singular value decomposition. If there is no input, all columns of number types(Double, Long, Integer) are selected.\n\n2. **Calculate Full Matrix**: If False, it returns the compact singular value decomposition. Otherwise, it returns the full singular value decomposition. \n\n\t* Default value: false \n3. **New Column Name**: Name of new column(s)\n\n4. **Group By**: Columns to group by.\n\n\n### Python\n#### USAGE\n\n```\nsvd2(table = , input_cols = , full_matrices = false, new_column_name = , group_by = )\n```\n\n#### INPUT\n1. **table***: (Table) Data in a Table. \n#### OUTPUT\n1. **out_table1**: (Table) Output table whose columns are left-singular vectors of an input table. \n2. **out_table2**: (Table) Output table that returns the array of singular values.\n3. **out_table3**: (Table) Output table whose columns are right-singular vectors of an input table. \n4. **out_table4**: (Table) Output table that projects the orginal dataset onto the singular vector subspace. \n5. **model**: (Model) Output model.\n#### PARAMETER\n1. **input_cols***: Choose columns of the input data to make a matrix A, where this function performs the singular value decomposition. If there is no input, all columns of number types(Double, Long, Integer) are selected.\n\t* Type: *list[str]*\n2. **full_matrices**: If `False`, it returns the compact singular value decomposition. Otherwise, it returns the full singular value decomposition. \n\t* Type: *bool*\n\t* Default value: `False`\n3. **new_column_name**: Name of new column(s)\n\t* Type: *str*\n4. **group_by**: Columns to group by.\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data is used for SVD. The generated model shows the result of SVD of the given columns. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Input Columns***: sepal_length, sepal_width, petal_length, petal_width\n2. **Calculate Full Matrix**: False\n3. **New Column Name**: projected_\n4. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.transform import svd2\ninput_table = inputs[0]\nres = svd2(table = input_table, \n\t input_cols = [\"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\"], \n\t full_matrices = False, \n\t group_by = None)\noutput1 = res['out_table1']\noutput2 = res['out_table2']\noutput3 = res['out_table3']\noutput4 = res['out_table4']\nmodel = res['model']\n```\nIn this python script, sample_iris data is used for SVD. The generated model shows the result of SVD of the given columns. \n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "SVD.json", + "label": "SVD", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mbj5t2f2phx96ekz", + "project_id": "p5dmzu78qb564crk", + "label": "SVD", + "contents": { + "mid": "mbj5t2f2phx96ekz", + "type": "data", + "title": "SVD", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": {}, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585547622999", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ejaiuv6kntizgiu3khy2mmx7" + } + ], + "layout": { + "type": "panel", + "id": "default-1585547622999" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tkshhrvus83njamk" + }, + "fid": "fbudgtzykxk4aabs" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$svd2", + "name": "brightics.function.transform$svd2", + "param": { + "full_matrices": false, + "input_cols": [ + "sepal_length", + "sepal_width", + "petal_length", + "petal_width" + ] + }, + "display": { + "label": "SVD", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593670313604", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "dxwrs8zck4wzgd737x63jvpk" + } + ], + "layout": { + "type": "panel", + "id": "default-1593670313604" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593670313790", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ph5s9kujzqpwjvti287u6uaa" + } + ], + "layout": { + "type": "panel", + "id": "default-1593670313790" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a Table. ", + "optional": false + }, + "out_table1": { + "type": "table", + "desc": "Output table whose columns are left-singular vectors of an input table. " + }, + "out_table2": { + "type": "table", + "desc": "Output table that returns the array of singular values." + }, + "out_table3": { + "type": "table", + "desc": "Output table whose columns are right-singular vectors of an input table. " + }, + "out_table4": { + "type": "table", + "desc": "Output table that projects the orginal dataset onto the singular vector subspace. " + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tkshhrvus83njamk" + }, + "outputs": { + "out_table1": "t4n2t9zwswnp2nt8", + "out_table2": "tmxqh5z5gqpm7jh3", + "out_table3": "tus5gt8bb52uavb3", + "out_table4": "tjvqm82j7svdnyzw", + "model": "tzjtm5z9cwtb2v6v" + }, + "fid": "fq7gtfj2btc2bhsw" + } + ], + "links": [ + { + "kid": "k9jb8z3j8npcmx7d", + "sourceFid": "fbudgtzykxk4aabs", + "targetFid": "fq7gtfj2btc2bhsw" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-07-02T06:11:05.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-07-02T06:15:37.000Z", + "event_key": "2020_061537.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "svd.png", + "label": "svd.png", + "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAewAAACWCAIAAACThiwkAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAxsSURBVHhe7d3bbxT3Gcbx/lUVoYl60/Y2baRWvWkukdqLBAc1TVEkIDKK0kjlgqaENIAJuOYQQUCCmJSDEiuORSUOoaIQ1PYG1vFS2xvbmJOx8+z85vDbWe96bc/M7rv7ffURWs/OztrMs49nZ9f2D+5NTAMALFpaWqLEAcAqShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcAwShwADKPEAcCwNpd4qVxxypMzk5W5ysz8zNxDGKJdph2n3RfvytQuRiz+LyLtRnVm2ttT4qVy1f2p2bn5R0+fLuiTYLpgtCu1Q7Vb3f5N7fSeRdq7cjon7fpkCi1x9+1L39MWFp65/wum+0Y7V7u4cw5V2oW098K0Pe36HAotcX21i4uL7otnunu0o7W7UwHoKaS9d6aNade9F1Hi4+WKnnfwXLIHRztdu14BSEWii5H2np22pF33m3uJu2eU7otkenMUgHY92SwYaWcKTrvuMd8SL5WnHzx87L42ppdHMWjv6z8FIO2MmyLTrrvLscT1Zcw/euK+KoZRGLq4x0k7409hadd95VXiekLBUQmTmuAIpQvPq5B2pn6KSbvuKJcSH+fMINNgFIwue52TtDONpoC0615yKfH7U7Pua2CY+lE8UoExjbQzTSbvtOsucilx3l/FNBnFIxUY00g702TyTrvuIuMSL/HUkmlhFJIuODlO2plWJte0a/vZlzg/pcasOApJd5Q4aWdWnFzTru1nWeKlcvVHjd3nzTDNJzg8SUfIENLOtD75pV0bz7jE+V0/TIujqFgvcdLOtDj5pV0bz7LEs3qZ/oev7FuV8GaMtTH9NpVc016aTDY+xzvQu2JySru2nFmJl8qVuflH7tNd5+w4/EWLXnrruBIf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", + "description": "In this tutorial workflow, sample_iris data is used for SVD. The generated model shows the result of SVD of the given columns. The parameter settings used in the function are shown below.", + "parameter": "1. **Input Columns***: sepal_length, sepal_width, petal_length, petal_width\n2. **Calculate Full Matrix**: False\n3. **New Column Name**: projected_\n4. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.transform import svd2\r\ninput_table = inputs[0]\r\nres = svd2(table = input_table, \r\n\t input_cols = [\"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\"], \r\n\t full_matrices = False, \r\n\t group_by = None)\r\noutput1 = res['out_table1']\r\noutput2 = res['out_table2']\r\noutput3 = res['out_table3']\r\noutput4 = res['out_table4']\r\nmodel = res['model']", + "description": "In this tutorial workflow, sample_iris data is used for SVD. The generated model shows the result of SVD of the given columns. ", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/svd_model.json b/function/python/brightics/function/transform/meta/svd_model.json new file mode 100644 index 000000000..f905572c3 --- /dev/null +++ b/function/python/brightics/function/transform/meta/svd_model.json @@ -0,0 +1,1793 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$svd_model", + "name": "brightics.function.transform$svd_model", + "context": "python", + "label": "SVD Model", + "description": "This function transforms the features using the result of SVD.", + "tags": [ + "model", + "preprocessing", + "svd" + ], + "version": "3.6", + "inputs": { + "table": "", + "model": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Table including data to be transformed.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Output table." + }, + "model": { + "type": "model", + "desc": "SVD Model from SVD function.", + "optional": false + } + }, + "params": [ + { + "id": "new_column_name", + "label": "New Column Name", + "description": "New column name", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "placeHolder": "projected_", + "type": "String" + } + ] + }, + "md": { + "en": "# SVD Model\n\n\n## Description\nThis function transforms the features using the result of SVD.\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Table including data to be transformed.\n2. **model***: (Model) SVD Model from SVD function.\n#### OUTPUT\n1. **out_table**: (Table) Output table.\n#### PARAMETER\n1. **New Column Name**: New column name\n\n\n### Python\n#### USAGE\n\n```\nsvd_model(table = inputs[0], model = models[0], new_column_name = 'projected_')\n```\n\n#### INPUT\n1. **table***: (Table) Table including data to be transformed.\n2. **model***: (Model) SVD Model from SVD function.\n#### OUTPUT\n1. **out_table**: (Table) Output table.\n#### PARAMETER\n1. **new_column_name**: New column name\n\t* Type: *str*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, sample_iris data loaded and split into train data set and test data set. Then the singular value decomposition is performed to the training data. The SVD result is finally applied to the test dataset to transform the features. \n\n++Parameters++\n1. **New Column Name**: projected_\n\n\n### Python\n\n```\nfrom brightics.function.transform.svd import svd_model\ninput_table = inputs[5]\ninput_model = models[0]\nres = svd_model(table = input_table, model = input_model)\noutput = res['out_table']\n```\nIn this example code, the result of SVD function(models[0]) is applied to the input dataset(inputs[5]) to transform the features.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "SVD_Model.json", + "label": "SVD_Model", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "mg2rvqnvsmwe6a8v", + "project_id": "p5dmzu78qb564crk", + "label": "SVD_Model", + "contents": { + "mid": "mg2rvqnvsmwe6a8v", + "type": "data", + "title": "SVD_Model", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": {}, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1585547622999", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "ejaiuv6kntizgiu3khy2mmx7" + } + ], + "layout": { + "type": "panel", + "id": "default-1585547622999" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tap9h858eqgc6uak" + }, + "fid": "fc3jhdjw3gus7u7a" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$svd_model", + "name": "brightics.function.transform$svd_model", + "param": {}, + "display": { + "label": "SVD Model", + "diagram": { + "position": { + "x": 1020, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501436852", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "8pznq6ybj88hyazkttbta7vt" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501436852" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501436940", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + } + } + } + } + ], + "layout": {} + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "out_table": { + "type": "table" + }, + "model": { + "type": "model", + "optional": false + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "t2fzp39feugssn37", + "model": "tqy4grgs5zywm534" + }, + "outputs": { + "out_table": "tqjn939cbehexx4v" + }, + "fid": "f7p6ce76bb65v94g" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$svd2", + "name": "brightics.function.transform$svd2", + "param": { + "full_matrices": false, + "input_cols": [ + "sepal_length", + "sepal_width", + "petal_length", + "petal_width" + ] + }, + "display": { + "label": "SVD", + "diagram": { + "position": { + "x": 770, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501450669", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "h9ggk646xzekr7yu96hqtqh5" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501450669" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501450763", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "wzhhy2xz5jrs2pdvvn8wgrfa" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501450763" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a Table. ", + "optional": false + }, + "out_table1": { + "type": "table", + "desc": "Output table whose columns are left-singular vectors of an input table. " + }, + "out_table2": { + "type": "table", + "desc": "Output table that returns the array of singular values." + }, + "out_table3": { + "type": "table", + "desc": "Output table whose columns are right-singular vectors of an input table. " + }, + "out_table4": { + "type": "table", + "desc": "Output table that projects the orginal dataset onto the singular vector subspace. " + }, + "model": { + "type": "model" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tjwzfkbyxnhtagmr" + }, + "outputs": { + "out_table1": "trpnbn86spgu9z7q", + "out_table2": "t57veu2m6cyy7m2j", + "out_table3": "tm658yw6j67yg6uw", + "out_table4": "tm32buxtqrdcsz4k", + "model": "tqy4grgs5zywm534" + }, + "fid": "fhc4axr6u568hhye" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$split_data", + "name": "brightics.function.transform$split_data", + "param": { + "train_ratio": 7, + "test_ratio": 3, + "random_state": 24 + }, + "display": { + "label": "Split Data", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501527128", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "gyd3jiv74ddr8aci5up32hda" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501527128" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593501527227", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "bmijsfz4ipv5cy4ytqvfp6em" + } + ], + "layout": { + "type": "panel", + "id": "default-1593501527227" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a table. ", + "optional": false + }, + "train_table": { + "type": "table", + "desc": "Training dataset in a table. " + }, + "test_table": { + "type": "table", + "desc": "Test dataset in a table. " + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tap9h858eqgc6uak" + }, + "outputs": { + "train_table": "tjwzfkbyxnhtagmr", + "test_table": "t2fzp39feugssn37" + }, + "fid": "f6e8jduqskm8wq75" + } + ], + "links": [ + { + "kid": "ka9j25a39cx3bdqt", + "sourceFid": "fhc4axr6u568hhye", + "targetFid": "f7p6ce76bb65v94g" + }, + { + "kid": "k3hhfcw7nvd9k2sj", + "sourceFid": "fc3jhdjw3gus7u7a", + "targetFid": "f6e8jduqskm8wq75" + }, + { + "kid": "kbgjdycfbc7u4s64", + "sourceFid": "f6e8jduqskm8wq75", + "targetFid": "fhc4axr6u568hhye" + }, + { + "kid": "k6byrqxz7kj6s2ws", + "sourceFid": "f6e8jduqskm8wq75", + "targetFid": "f7p6ce76bb65v94g" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T07:16:29.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T07:19:18.000Z", + "event_key": "2020_071918.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "svd_model.JPG", + "label": "svd_model.JPG", + "base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/4RCqRXhpZgAATU0AKgAAAAgABAE7AAIAAAAdAAAISodpAAQAAAABAAAIaJydAAEAAAAaAAAQiOocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOygleyYge2biC/rtoTshJ3tlIzrnqvtj7xMYWIAAAAB6hwABwAACAwAAAh6AAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVyAHGyNYvAIS9HcEM1au3/NNMAGEAYgAAAP/hCnVodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj48cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPjxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSJ1dWlkOmZhZjViZGQ1LWJhM2QtMTFkYS1hZDMxLWQzM2Q3NTE4MmYxYiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIi8+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPjxkYzpjcmVhdG9yPjxyZGY6U2VxIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpsaT7soJXsmIHtm4gv67aE7ISd7ZSM656r7Y+8TGFiPC9yZGY6bGk+PC9yZGY6U2VxPg0KCQkJPC9kYzpjcmVhdG9yPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0ndyc/Pv/bAEMABwUFBgUEBwYFBggHBwgKEQsKCQkKFQ8QDBEYFRoZGBUYFxseJyEbHSUdFxgiLiIlKCkrLCsaIC8zLyoyJyorKv/bAEMBBwgICgkKFAsLFCocGBwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKv/AABEIAXYGcgMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APd6KKK1JCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA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+v4elaVFFMYUUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z", + "description": "In this tutorial workflow, sample_iris data loaded and split into train data set and test data set. Then the singular value decomposition is performed to the training data. The SVD result is finally applied to the test dataset to transform the features. ", + "parameter": "1. **New Column Name**: projected_", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.transform.svd import svd_model\r\ninput_table = inputs[5]\r\ninput_model = models[0]\r\nres = svd_model(table = input_table, model = input_model)\r\noutput = res['out_table']", + "context": "python", + "description": "In this example code, the result of SVD function(models[0]) is applied to the input dataset(inputs[5]) to transform the features." + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/tsne.json b/function/python/brightics/function/transform/meta/tsne.json new file mode 100644 index 000000000..18ec71c3a --- /dev/null +++ b/function/python/brightics/function/transform/meta/tsne.json @@ -0,0 +1,1102 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$tsne92932", + "name": "brightics.function.transform$tsne", + "context": "python", + "label": "t-SNE", + "description": "t-SNE is a tool to visualize high-dimensional data. It converts similarities between data points to joint probabilities and tries to minimize the Kullback-Leibler divergence between the joint probabilities of the low-dimensional embedding and the high-dimensional data. t-SNE has a cost function that is not convex, i.e. with different initializations we can get different results.\n", + "tags": [ + "dimension", + "preprocessing", + "add columns", + "add", + "column", + "Stochastic Neighbor Embedding" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "params": [ + { + "id": "input_cols", + "label": "Input Columns", + "description": "", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "Double", + "Float", + "Integer", + "Long" + ], + "multiple": true + }, + { + "id": "n_components", + "label": "Number of Components", + "description": "Dimension of the embedded space.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "2 (value >= 1)" + }, + { + "id": "perplexity", + "label": "Perplexity", + "description": "The perplexity is related to the number of nearest neighbors that is used in other manifold learning algorithms.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 1, + "placeHolder": "30.0" + }, + { + "id": "early_exaggeration", + "label": "Early Exaggeration", + "description": "Controls how tight natural clusters in the original space are in the embedded space and how much space will be between them.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "placeHolder": "12.0" + }, + { + "id": "new_column_name", + "label": "New Column Name", + "description": "Name of new column(s)", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "projected_" + }, + { + "id": "learning_rate", + "label": "Learning Rate", + "description": "The learning rate for t-SNE is usually in the range [10.0, 1000.0]", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "placeHolder": "200.0" + }, + { + "id": "n_iter", + "label": "Maximum Number of Iterations", + "description": "Maximum number of iterations for the optimization.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "1000 (value >= 250)" + }, + { + "id": "n_iter_without_progress", + "label": "Maximum Number of Iterations Without Progress", + "description": "Maximum number of iterations without progress before we abort the optimization, used after 250 initial iterations with early exaggeration", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "placeHolder": "300" + }, + { + "id": "min_grad_norm", + "label": "Minimum Gradient Norm", + "description": "If the gradient norm is below this threshold, the optimization will be stopped.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "min": 0, + "placeHolder": "1e-7" + }, + { + "id": "metric", + "label": "Metric", + "description": "The metric to use when calculating distance between instances in a feature array", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String", + "placeHolder": "euclidean" + }, + { + "id": "init", + "label": "Initialization of Embedding", + "description": "Initialization of embedding", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Random", + "value": "random", + "default": true + }, + { + "label": "PCA", + "value": "pca", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [] + }, + { + "id": "verbose", + "label": "Verbosity level", + "description": "Verbosity level", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "placeHolder": "0" + }, + { + "id": "seed", + "label": "Seed", + "description": "The seed used by the random number generator.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer" + }, + { + "id": "method", + "label": "Method", + "description": "Gradient calculation algorithm approximation method.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Barnes-Hut", + "value": "barnes_hut", + "default": true + }, + { + "label": "Exact", + "value": "exact", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [] + }, + { + "id": "angle", + "label": "Angle", + "description": "Angular size of a distant node as measured from a point", + "visibleOption": [ + { + "id": "method", + "value": "barnes_hut" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Double", + "placeHolder": "0.5" + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "multiple": true + } + ] + }, + "md": { + "en": "# t-SNE\n\n\n## Description\nt-SNE is a tool to visualize high-dimensional data. It converts similarities between data points to joint probabilities and tries to minimize the Kullback-Leibler divergence between the joint probabilities of the low-dimensional embedding and the high-dimensional data. t-SNE has a cost function that is not convex, i.e. with different initializations we can get different results.\n\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **Input Columns***: Input columns.\n\n2. **Number of Components**: Dimension of the embedded space.\n\n3. **Perplexity**: The perplexity is related to the number of nearest neighbors that is used in other manifold learning algorithms.\n\n4. **Early Exaggeration**: Controls how tight natural clusters in the original space are in the embedded space and how much space will be between them.\n\n5. **New Column Name**: Name of new column(s)\n\n6. **Learning Rate**: The learning rate for t-SNE is usually in the range [10.0, 1000.0]\n\n7. **Maximum Number of Iterations**: Maximum number of iterations for the optimization.\n\n8. **Maximum Number of Iterations Without Progress**: Maximum number of iterations without progress before we abort the optimization, used after 250 initial iterations with early exaggeration\n\n9. **Minimum Gradient Norm**: If the gradient norm is below this threshold, the optimization will be stopped.\n\n10. **Metric**: The metric to use when calculating distance between instances in a feature array\n\n11. **Initialization of Embedding**: Initialization of embedding\n\n12. **Verbosity level**: Verbosity level\n\n13. **Seed**: The seed used by the random number generator.\n\n14. **Method**: Gradient calculation algorithm approximation method.\n\n15. **Angle**: Angular size of a distant node as measured from a point\n\n16. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\ntsne(table = , input_cols = , n_components = , perplexity = , early_exaggeration = , new_column_name = , learning_rate = , n_iter = , n_iter_without_progress = , min_grad_norm = , metric = , init = , verbose = , seed = , method = , angle = , group_by = )\n```\n\n#### INPUT\n1. **table***: (Table) \n#### OUTPUT\n1. **out_table**: (Table) \n#### PARAMETER\n1. **input_cols***: Input columns.\n\t* Type: *list[str]*\n2. **n_components**: Dimension of the embedded space.\n\t* Type: *int*\n\t* Default / Range: 2 (value >= 1)\n3. **perplexity**: The perplexity is related to the number of nearest neighbors that is used in other manifold learning algorithms.\n\t* Type: *double*\n\t* Default / Range: 30.0\n4. **early_exaggeration**: Controls how tight natural clusters in the original space are in the embedded space and how much space will be between them.\n\t* Type: *double*\n\t* Default / Range: 12.0\n5. **new_column_name**: Name of new column(s)\n\t* Type: *str*\n6. **learning_rate**: The learning rate for t-SNE is usually in the range [10.0, 1000.0]\n\t* Type: *double*\n\t* Default / Range: 200.0\n7. **n_iter**: Maximum number of iterations for the optimization.\n\t* Type: *int*\n\t* Default / Range: 1000 (value >= 250)\n8. **n_iter_without_progress**: Maximum number of iterations without progress before we abort the optimization, used after 250 initial iterations with early exaggeration\n\t* Type: *int*\n\t* Default / Range: 300\n9. **min_grad_norm**: If the gradient norm is below this threshold, the optimization will be stopped.\n\t* Type: *double*\n\t* Default / Range: 1e-7\n10. **metric**: The metric to use when calculating distance between instances in a feature array\n\t* Type: *str*\n11. **init**: Initialization of embedding\n\t* Type: *str*\n\t* Default / Range: random ( random | pca )\n12. **verbose**: Verbosity level\n\t* Type: *int*\n\n13. **seed**: The seed used by the random number generator.\n\t* Type: *int*\n\n14. **method**: Gradient calculation algorithm approximation method.\n\t* Type: *str*\n\t* Default / Range: barnes_hut ( barnes_hut | exact )\n15. **angle**: Angular size of a distant node as measured from a point\n\t* Type: *double*\n\n16. **group_by**: Columns to group by\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, t-Stochastic Neighbor Embedding(t-SNE) is applied to sample iris data. Input columns are 'sepal_length', 'sepal_width', 'petal_length' and 'petal_width'.\n\n++Parameters++\n1. **Input Columns***: sepal_length, petal_length, sepal_width, petal_width\n2. **Number of Components**: 2\n3. **Perplexity**: 30\n4. **Early Exaggeration**: 12\n5. **New Column Name**: projected_\n6. **Learning Rate**: 200\n7. **Maximum Number of Iterations**: 1000\n8. **Maximum Number of Iterations Without Progress**: 300\n9. **Minimum Gradient Norm**: 1e-7\n10. **Metric**: euclidean\n11. **Initialization of Embedding**: Random\n12. **Verbosity level**: 0\n13. **Seed**: None\n14. **Method**: Barnes-Hut\n15. **Angle**: 0.5\n16. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.transform import tsne\nres = tsne(table = inputs[0], input_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])\nout_table = res['out_table']\n```\nIn this python script, t-Stochastic Neighbor Embedding is applied to sample iris data. This script yields the same result of the VA sample model, if the t-SNE function is altered by Python Script function with the script.\n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "tsne.json", + "label": "test model", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m9g8m4js6fbgu8tn", + "project_id": "p5dmzu78qb564crk", + "label": "test model", + "contents": { + "mid": "m9g8m4js6fbgu8tn", + "type": "data", + "title": "test model", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 520 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1583220219008", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "kn9z7jg4i8ymw97muc5ncvzp" + } + ], + "layout": { + "type": "panel", + "id": "default-1583220219008" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "tn5ttx48u7th6jne" + }, + "fid": "fge6xfrdryhax3tn" + }, + { + "persist-mode": "auto", + "func": "brightics.function.transform$tsne92932", + "name": "brightics.function.transform$tsne", + "param": { + "init": "random", + "method": "barnes_hut", + "input_cols": [ + "sepal_length", + "petal_length", + "sepal_width", + "petal_width" + ] + }, + "display": { + "label": "t-SNE", + "diagram": { + "position": { + "x": 520, + "y": 520 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593505251600", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "sxg9cd74p348fw9d7abntcvw" + } + ], + "layout": { + "type": "panel", + "id": "default-1593505251600" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593505251671", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "6svf965cxmrg92rhbps2xmgz" + } + ], + "layout": { + "id": "default-1593505251671", + "type": "panel" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "tn5ttx48u7th6jne" + }, + "outputs": { + "out_table": "tw5kt5w3yjjsda24" + }, + "fid": "fba466gg2svbaxes" + } + ], + "links": [ + { + "kid": "kkj83js3a5qpytgc", + "sourceFid": "fge6xfrdryhax3tn", + "targetFid": "fba466gg2svbaxes" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "This is test model", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T07:37:41.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T10:02:44.000Z", + "event_key": "2020_100244.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "tsne.png", + "label": "tsne.png", + "base64": "data:image/png;base64,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", + "description": "In this tutorial workflow, t-Stochastic Neighbor Embedding(t-SNE) is applied to sample iris data. Input columns are 'sepal_length', 'sepal_width', 'petal_length' and 'petal_width'.", + "parameter": "1. **Input Columns***: sepal_length, petal_length, sepal_width, petal_width\n2. **Number of Components**: 2\n3. **Perplexity**: 30\n4. **Early Exaggeration**: 12\n5. **New Column Name**: projected_\n6. **Learning Rate**: 200\n7. **Maximum Number of Iterations**: 1000\n8. **Maximum Number of Iterations Without Progress**: 300\n9. **Minimum Gradient Norm**: 1e-7\n10. **Metric**: euclidean\n11. **Initialization of Embedding**: Random\n12. **Verbosity level**: 0\n13. **Seed**: None\n14. **Method**: Barnes-Hut\n15. **Angle**: 0.5\n16. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.transform import tsne\r\nres = tsne(table = inputs[0], input_cols = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width'])\r\nout_table = res['out_table']", + "context": "python", + "description": "In this python script, t-Stochastic Neighbor Embedding is applied to sample iris data. This script yields the same result of the VA sample model, if the t-SNE function is altered by Python Script function with the script." + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/meta/under_sampling.json b/function/python/brightics/function/transform/meta/under_sampling.json new file mode 100644 index 000000000..d20095c42 --- /dev/null +++ b/function/python/brightics/function/transform/meta/under_sampling.json @@ -0,0 +1,1488 @@ +{ + "script": { + "type": "", + "content": "" + }, + "specJson": { + "category": "transform", + "func": "brightics.function.transform$under_sampling", + "name": "brightics.function.transform$under_sampling", + "context": "python", + "label": "Under Sampling (Cluster Centroids)", + "description": "Method that under samples a specific class C by replacing a cluster of samples corresponding to the class C by the cluster centroid of a KMeans algorithm. This algorithm keeps N samples corresponding to the class C by fitting the KMeans algorithm with N cluster to the class C and using the coordinates of the N cluster centroids as the new samples corresponding to the class C.\n\nReferences:\nhttps://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis", + "tags": [ + "sampling", + "transform" + ], + "version": "3.6", + "inputs": { + "table": "" + }, + "outputs": { + "out_table": "" + }, + "meta": { + "table": { + "type": "table", + "desc": "Data in a table.", + "optional": false + }, + "out_table": { + "type": "table", + "desc": "Undersampled data." + } + }, + "params": [ + { + "id": "label_col", + "label": "Label Column", + "description": "The column designated for the labels of data.", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": true, + "items": [], + "globalVariable": false, + "columnType": [ + "Integer", + "Long", + "Float", + "Double", + "String" + ], + "multiple": false + }, + { + "id": "sampling_strategy", + "label": "Sampling Strategy", + "description": "Sampling information to resample the data set.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "Majority", + "value": "majority", + "default": false + }, + { + "label": "Not Minority", + "value": "not minority", + "default": true + }, + { + "label": "Not Majority", + "value": "not majority", + "default": false + }, + { + "label": "All", + "value": "all", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [] + }, + { + "id": "seed", + "label": "Seed", + "description": "Control the randomization of the algorithm.", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer" + }, + { + "id": "estimator", + "label": "Estimator", + "description": "Estimator for cluster centroids.", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "KMeans", + "value": "KMeans", + "default": true + }, + { + "label": "None", + "value": "None", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String" + }, + { + "id": "n_clusters", + "label": "N Clusters", + "description": "The number of clusters.", + "visibleOption": [ + { + "id": "estimator", + "value": "KMeans" + } + ], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "defaultValue": 8 + }, + { + "id": "voting", + "label": "Voting", + "description": "Voting strategy to generate the new samples", + "visibleOption": [], + "control": "RadioButton", + "validation": [], + "mandatory": false, + "items": [ + { + "label": "auto", + "value": "auto", + "default": true + }, + { + "label": "hard", + "value": "hard", + "default": false + }, + { + "label": "soft", + "value": "soft", + "default": false + } + ], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "String" + }, + { + "id": "n_jobs", + "label": "N Jobs", + "description": "", + "visibleOption": [], + "control": "InputBox", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "targetTable": [], + "type": "Integer", + "min": 1, + "defaultValue": 1 + }, + { + "id": "group_by", + "label": "Group By", + "description": "Columns to group by", + "visibleOption": [], + "control": "ColumnSelector", + "validation": [], + "mandatory": false, + "items": [], + "globalVariable": false, + "columnType": [], + "multiple": true, + "rowCount": 5 + } + ], + "summary": "This function performs under-sampling by generating centroids based on clustering methods.", + "tutorialLink": "https://www.brightics.ai/kr/docs/ai/v3.7/tutorials/121_class_imbalance?type=insight" + }, + "md": { + "en": "# Under Sampling (Cluster Centroids)\nThis function performs under-sampling by generating centroids based on clustering methods.\n\n## Description\nMethod that under samples a specific class C by replacing a cluster of samples corresponding to the class C by the cluster centroid of a KMeans algorithm. This algorithm keeps N samples corresponding to the class C by fitting the KMeans algorithm with N cluster to the class C and using the coordinates of the N cluster centroids as the new samples corresponding to the class C.\n\n+ References:\nhttps://en.wikipedia.org/wiki/Oversampling_and_undersampling_in_data_analysis\n\n## Properties\n### VA\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **out_table**: (Table) Undersampled data.\n#### PARAMETER\n1. **Label Column***: The column designated for the labels of data.\n\n2. **Sampling Strategy**: Sampling information to resample the data set.\n\n3. **Seed**: Control the randomization of the algorithm.\n\n4. **Estimator**: Estimator for cluster centroids.\n\n5. **N Clusters**: The number of clusters.\n\n\t* Default value: 8 \n6. **Voting**: Voting strategy to generate the new samples\n\n7. **N Jobs**: \n\n\t* Default value: 1 \n8. **Group By**: Columns to group by\n\n\n### Python\n#### USAGE\n\n```\nunder_sampling(table, label_col, sampling_strategy = \"majority\", seed, estimator = \"KMeans\", n_clusters = 8, voting = \"auto\", n_jobs = 1, group_by = None)\n```\n\n#### INPUT\n1. **table***: (Table) Data in a table.\n#### OUTPUT\n1. **out_table**: (Table) Undersampled data.\n#### PARAMETER\n1. **label_col***: The column designated for the labels of data.\n\t* Type: *str*\n2. **sampling_strategy**: Sampling information to resample the data set.\n\t* Type: *str*\n\t* Default / Range: ( majoritynot minority | not minority | not majority | all )\n3. **seed**: Control the randomization of the algorithm.\n\t* Type: *int*\n\n4. **estimator**: Estimator for cluster centroids.\n\t* Type: *str*\n\t* Default / Range: KMeans ( KMeans | None )\n5. **n_clusters**: The number of clusters.\n\t* Type: *int*\n\t* Default / Range: \n\t* Default value: 8 \n6. **voting**: Voting strategy to generate the new samples\n\t* Type: *str*\n\t* Default / Range: auto ( auto | hard | soft )\n7. **n_jobs**: \n\t* Type: *int*\n\t* Default / Range: \n\t* Default value: 1 \n8. **group_by**: Columns to group by\n\t* Type: *list[str]*\n\n\n## Example\n### VA\n**[Related Tutorial]**\n\n\n**[Sample Model]**\n\n\n\nIn this tutorial workflow, modified sample_iris data is used for undersampling the majority class. The parameter settings used in the function are shown below.\n\n++Parameters++\n1. **Label Column***: \"isVirginica\"\n2. **Sampling Strategy**: \"majority\"\n3. **Seed**: None\n4. **Estimator**: \"KMeans\" \n5. **N Clusters**: 8\n6. **Voting**: \"auto\"\n7. **N Jobs**: 1\n8. **Group By**: None\n\n\n\n### Python\n\n```\nfrom brightics.function.transform import under_sampling\nres = under_sampling(table = inputs[0], label_col = \"isVirginica\", sampling_strategy = \"majority\", estimator = \"KMeans\", n_clusters = 8, voting = \"auto\", n_jobs = 1)\noutput = res['out_table']\n```\nIn this python script, modified sample_iris data is used for undersampling the majority class. \n\n\n", + "kr": "" + }, + "exampleModels": [ + { + "fileName": "transform_under_sampling.json", + "label": "under_sampling", + "contents": { + "type": "files", + "data": [ + { + "type": "file", + "data": { + "id": "m7pvgutpkdcx94ma", + "project_id": "p5dmzu78qb564crk", + "label": "under_sampling", + "contents": { + "mid": "m7pvgutpkdcx94ma", + "type": "data", + "title": "under_sampling", + "functions": [ + { + "persist-mode": "auto", + "func": "brightics.function.transform$under_sampling", + "name": "brightics.function.transform$under_sampling", + "param": { + "sampling_strategy": "majority", + "estimator": "KMeans", + "n_clusters": 8, + "voting": "auto", + "n_jobs": 1, + "label_col": "isVirginica" + }, + "display": { + "label": "Under Sampling (Cluster Centroids)", + "diagram": { + "position": { + "x": 770, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593508478352", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "tbw2qhdr5vhxk662dn5xtc88" + } + ], + "layout": { + "type": "panel", + "id": "default-1593508478352" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593508478670", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "wwxgez7nkfu893ve84cguw9z" + } + ], + "layout": { + "type": "panel", + "id": "default-1593508478670" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table", + "optional": false + }, + "out_table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "inputs": { + "table": "th2kay2583byrjhv" + }, + "outputs": { + "out_table": "tqcgvm3pb3e9ez54" + }, + "fid": "fz7v8cnk3vd8vaub" + }, + { + "persist-mode": "auto", + "func": "brightics.function.io$load13889", + "name": "brightics.function.io$load", + "param": { + "partial_path": [ + "/brightics@samsung.com/upload/sample_iris.csv" + ] + }, + "display": { + "label": "Load", + "diagram": { + "position": { + "x": 270, + "y": 220 + } + }, + "sheet": { + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593508494026", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "5j9pja596vr97bxr7rxvxmsc" + } + ], + "layout": { + "type": "panel", + "id": "default-1593508494026" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "meta": { + "table": { + "type": "table" + } + }, + "context": "python", + "version": "3.6", + "outputs": { + "table": "taurgmvbh3g2gxnx" + }, + "fid": "fhnx2kc8p3bbuzfc" + }, + { + "persist-mode": "auto", + "func": "pythonScript", + "name": "PythonScript", + "inputs": { + "inputs": [ + "taurgmvbh3g2gxnx" + ], + "models": [], + "images": [] + }, + "outputs": { + "input": "th2kay2583byrjhv" + }, + "param": { + "script": "input = inputs[0]\n\ninput['isVirginica'] = (input['species'] == 'virginica').astype(int)\ninput\n\n" + }, + "display": { + "label": "Python Script", + "diagram": { + "position": { + "x": 520, + "y": 220 + } + }, + "sheet": { + "in": { + "partial": [ + { + "panel": [ + { + "id": "default-1593508595616", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "wxcs8t2mrnrdmrvx86var74m" + } + ], + "layout": { + "type": "panel", + "id": "default-1593508595616" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + }, + "out": { + "partial": [ + { + "panel": [ + { + "id": "default-1593508595941", + "chartOption": { + "colorSet": [ + "#FD026C", + "#4682B8", + "#A5D22D", + "#F5CC0A", + "#FE8C01", + "#6B9494", + "#B97C46", + "#84ACD0", + "#C2E173", + "#F9DD5B", + "#FE569D", + "#FEB356", + "#9CB8B8", + "#D0A884", + "#2E6072", + "#6D8C1E", + "#A48806", + "#A90148", + "#A95E01", + "#476363", + "#7B532F" + ], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "top": "0px" + }, + "toolbar": { + "show": false, + "right": "8px", + "top": "8px", + "orientation": "horizontal", + "menu": {} + }, + "chart": { + "border": "1px #000000 none", + "background": "rgba(255, 255, 255,1)", + "animationDuration": 1000, + "type": "table" + }, + "tooltip": { + "triggerOn": "mousemove" + }, + "grid": { + "left": "10%", + "right": "10%", + "top": "60px", + "bottom": "60px", + "width": "auto", + "height": "auto" + }, + "xAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "50%", + "bottom": "5px" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "yAxis": [ + { + "selected": [], + "title": { + "show": true, + "text": "", + "subtext": "", + "rotate": -90, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "subtextStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + }, + "left": "8px", + "top": "50%" + }, + "axisTick": { + "show": true + }, + "axisLine": { + "onZero": false + }, + "scale": true, + "axisLabel": { + "show": true, + "rotate": 0, + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "" + } + }, + "zlevel": 1 + } + ], + "colorBy": [ + { + "selected": [] + } + ], + "legend": { + "show": true, + "orientation": "horizontal", + "left": "50%", + "right": "auto", + "top": "10px", + "bottom": "auto", + "textStyle": { + "color": "#000000", + "fontSize": 12, + "fontFamily": "", + "fontStyle": "normal", + "fontWeight": "normal", + "fontDecoration": "none" + } + }, + "noDataMessage": "", + "plotOptions": { + "table": { + "formatter": [] + }, + "map": { + "geoData": {} + } + }, + "source": { + "dataType": "lazy", + "lazyData": [] + }, + "guide": { + "message": "Set data options using Chart Setting Button." + } + }, + "dataSource": { + "selectable": true + }, + "style": {}, + "group": "dkhkd3x4z86548c4ysaukiec" + } + ], + "layout": { + "type": "panel", + "id": "default-1593508595941" + } + } + ], + "full": [ + { + "panel": [], + "layout": {} + } + ] + } + } + }, + "version": "3.6", + "context": "python", + "meta": { + "inputs": { + "type": "table", + "range": { + "min": 1, + "max": 10 + } + }, + "models": { + "type": "model", + "range": { + "min": 1, + "max": 10 + } + }, + "images": { + "type": "image", + "range": { + "min": 1, + "max": 10 + } + }, + "input": { + "type": "table" + } + }, + "fid": "fhwkqkdezvcbaxv3" + } + ], + "links": [ + { + "kid": "kn2unhy2fttz9nga", + "sourceFid": "fhnx2kc8p3bbuzfc", + "targetFid": "fhwkqkdezvcbaxv3" + }, + { + "kid": "k3jx8j9jg3ubzhke", + "sourceFid": "fhwkqkdezvcbaxv3", + "targetFid": "fz7v8cnk3vd8vaub" + } + ], + "preferences": {}, + "variables": {}, + "variableRef": [], + "innerModels": {}, + "inData": [], + "outData": [], + "sheets": [], + "param": {}, + "report": { + "title": "Report", + "data": [] + }, + "persist-mode": "auto", + "diagram": { + "PAPER_MARGIN_TOP": 20, + "PAPER_MARGIN_LEFT": 20, + "FIGURE_WIDTH": 195, + "FIGURE_HEIGHT": 60, + "GAP_WIDTH": 55, + "GAP_HEIGHT": 40 + }, + "problemList": [] + }, + "description": "


", + "model_image": null, + "creator": "brightics@samsung.com", + "create_time": "2020-06-30T09:14:30.000Z", + "updater": "brightics@samsung.com", + "update_time": "2020-06-30T09:30:06.000Z", + "event_key": "2020_093006.000", + "type": "data", + "tag": "null", + "from_version": "0.0" + } + } + ], + "version": "3.6" + } + } + ], + "sampleImages": [ + { + "fileName": "transform_under_sampling.png", + "label": "transform_under_sampling.png", + "base64": "data:image/png;base64,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ckODwISh+aMi76ACVAPdjtoY7vxQBYcGgQkAACCAwAQAABBAYAIAAAggMAEAAAQQmAAAAAIITAAAAAEEJgAAgAACEwAAQACBCQAAIIDABAAAEEBgAgAACCAwAQAABBCYAAAAAghMAAAAAQQmAACAAAITAABAAIEJAAAggMAEAAAQQGACAAAIIDABAAAEEJgAAAACCEwAAAABBCYAAIAAAhMAAEAAgQkAACCAwAQAABBAYAIAAAggMAEAAAQQmAAAAAIITAAAAAEEJgAAgAACEwAAQACBCQAAIIDABAAAEEBgAgAACCAwAQAABBCYAAAAAghMAAAAAQQmAACAAAITAABAAIEJAAAggMAEAAAQQGACAAAIIDABAAAEEJgAAAACCEwAAAABBCYAAIAAAhMAAEAAgQkAACCAwAQAABBAYAIAAAggMAEAAAQQmAAAAAIITAAAAAEEJgAAgAACEwAAQACBCQAAIIDABAAAEEBgAgAACCAwAQAABBCYAAAAAghMAAAAAQQmAACAAAITAABAAIEJAAAggMAEAAAQQGACAAAIIDABAAAEEJgAAAACCEwAAAABBCYAAIAAAhMAAEAAgQkAACCAwAQAABBAYAIAAAggMAEAAAQQmAAAAAIITAAAAAEEJgAAgJ4uXPp/ATfG4uodwMIAAAAASUVORK5CYII=", + "description": "In this tutorial workflow, modified sample_iris data is used for undersampling the majority class. The parameter settings used in the function are shown below.", + "parameter": "1. **Label Column***: \"isVirginica\"\n2. **Sampling Strategy**: \"majority\"\n3. **Seed**: None\n4. **Estimator**: \"KMeans\" \n5. **N Clusters**: 8\n6. **Voting**: \"auto\"\n7. **N Jobs**: 1\n8. **Group By**: None\n", + "index": 0 + } + ], + "scriptExamples": [ + { + "index": 1, + "code": "from brightics.function.transform import under_sampling\nres = under_sampling(table = inputs[0], label_col = \"isVirginica\", sampling_strategy = \"majority\", estimator = \"KMeans\", n_clusters = 8, voting = \"auto\", n_jobs = 1)\noutput = res['out_table']", + "description": "In this python script, modified sample_iris data is used for undersampling the majority class. ", + "context": "python" + } + ] +} \ No newline at end of file diff --git a/function/python/brightics/function/transform/missing_data.py b/function/python/brightics/function/transform/missing_data.py index cfccc0139..733fff4d3 100644 --- a/function/python/brightics/function/transform/missing_data.py +++ b/function/python/brightics/function/transform/missing_data.py @@ -14,20 +14,28 @@ limitations under the License. """ -from brightics.common.validation import validate, greater_than_or_equal_to +from brightics.common.utils import check_required_parameters -def delete_missing_data(table, input_cols, how='any', **params): - - _table = table.copy() - - if 'thresh' in params: - validate(greater_than_or_equal_to(params, 1, 'thresh')) - thresh = params['thresh'] - thresh = len(input_cols) - thresh + 1 +def delete_missing_data(table, **params): + check_required_parameters(_delete_missing_data, params, ['table']) + return _delete_missing_data(table, **params) + + +def _delete_missing_data(table, input_cols, how='any', row_or_column="index", missing_ratio=0): + if row_or_column == 'index': + subset = input_cols + length = len(input_cols) else: - thresh = None - - _out_table = _table.dropna(subset=input_cols, how=how, axis='index', thresh=thresh) - - return {'out_table':_out_table} + subset = None + length = table.shape[0] + if missing_ratio != 0: + max_na = missing_ratio * length + if max_na != int(max_na): + thresh = length - int(max_na) + else: + thresh = length - int(max_na) + 1 + else: + thresh = length + out_table = table.dropna(subset=subset, how=how, axis=row_or_column, thresh=thresh) + return {'out_table': out_table} diff --git a/function/python/brightics/function/transform/reshaping.py b/function/python/brightics/function/transform/reshaping.py index 58779f8ca..022e01514 100644 --- a/function/python/brightics/function/transform/reshaping.py +++ b/function/python/brightics/function/transform/reshaping.py @@ -16,6 +16,7 @@ import pandas as pd import numpy as np +from string import punctuation from brightics.common.groupby import _function_by_group from brightics.common.validation import raise_runtime_error @@ -175,6 +176,86 @@ def _distinct(x): return list(set(x)) out_table.columns = index + name_list return {'out_table':out_table} + +def pivot3(table, values, aggfunc, index=None, columns=None): # TODO + + if index is None and columns is None: + # TODO: assign an error code. + raise_runtime_error('Group key value is required: Index or Columns.') + + def _count(x): return len(x) + + def _sum(x): return brtc_stat.sum(x) + + def _mean(x): return brtc_stat.mean(x) + + def _std(x): return brtc_stat.std(x) + + def _var(x): return brtc_stat.var_samp(x) + + def _max(x): return brtc_stat.max(x) + + def _min(x): return brtc_stat.min(x) + + def _q1(x): return brtc_stat.percentile(x, 25) + + def _median(x): return brtc_stat.median(x) + + def _q3(x): return brtc_stat.percentile(x, 75) + + def _distinct(x): return list(set(x)) + + func_list = [] + for func_name in aggfunc: + if func_name == 'count': + func_list.append(_count) + elif func_name == 'mean': + func_list.append(_mean) + elif func_name == 'std': + func_list.append(_std) + elif func_name == 'var': + func_list.append(_var) + elif func_name == 'min': + func_list.append(_min) + elif func_name == 'q1': + func_list.append(_q1) + elif func_name == 'median': + func_list.append(_median) + elif func_name == 'q3': + func_list.append(_q3) + elif func_name == 'max': + func_list.append(_max) + elif func_name == 'sum': + func_list.append(_sum) + elif func_name == 'distinct': + func_list.append(_distinct) + + pivoted = pd.pivot_table(table, values=values, index=index, columns=columns, aggfunc=func_list, fill_value=None, margins=False, margins_name='All') + out_table = pd.concat([pivoted.index.to_frame(), pivoted], axis=1) + if index is None: + out_table = out_table.rename(index=str, columns={0: "values"}) + name_list = [] + if len(columns) == 1: + for name in out_table.columns.tolist()[1:]: + name_list.append(name[0][1:] + "_" + str(name[1])) + out_table.columns = out_table.columns.tolist()[:1] + name_list + else: + for name in out_table.columns.tolist()[len(columns) + 1:]: + name_list.append(name[1:]) + out_table.columns = out_table.columns.tolist()[:len(columns) + 1] + name_list + elif index is not None: + name_list = [] + for name in out_table.columns.tolist()[len(index):]: + name_list.append(name[0][1:] + "_" + "_".join(str(i) for i in name[1:])) + out_table.columns = index + name_list + + special_char = str(punctuation) + ' ' + + for char in special_char: + out_table.columns = out_table.columns.str.replace(char, '_') + + return {'out_table':out_table} + def transpose(table, group_by=None, **params): check_required_parameters(_transpose, params, ['table']) diff --git a/function/python/brightics/function/transform/savgol_filter.py b/function/python/brightics/function/transform/savgol_filter.py new file mode 100644 index 000000000..e17d20e8b --- /dev/null +++ b/function/python/brightics/function/transform/savgol_filter.py @@ -0,0 +1,50 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +import pandas as pd +import numpy as np +import statsmodels.tsa.filters.filtertools as sm +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate +from brightics.common.validation import greater_than_or_equal_to +from brightics.common.validation import from_to + +from scipy.signal import savgol_filter as savitzky_golay_filter + + +def savgol_filter(table, group_by=None, **params): + check_required_parameters(_savgol_filter, params, ['table']) + params = get_default_from_parameters_if_required(params, _savgol_filter) + param_validation_check = [greater_than_or_equal_to(params, 1, 'window_length')] + validate(*param_validation_check) + if group_by is not None: + return _function_by_group(_savgol_filter, table, group_by=group_by, **params) + else: + return _savgol_filter(table, **params) + + +def _savgol_filter(table, input_cols, window_length=1, polyorder=0, deriv=0, delta=1.0, axis=-1, mode='interp', + cval=0.0): + df = pd.DataFrame(table, columns=input_cols) + sf_filter = df[input_cols].apply( + lambda cols_data: savitzky_golay_filter(cols_data, window_length=window_length, polyorder=polyorder, + deriv=deriv, delta=delta, axis=axis, mode=mode, cval=cval), axis=0) + sf_filter.columns = sf_filter.columns + '_sf' + out_table = pd.concat([table, sf_filter], axis=1) + + return {'out_table': out_table} diff --git a/function/python/brightics/function/transform/sql/functions.py b/function/python/brightics/function/transform/sql/functions.py index 1919b77c1..efbc90d08 100644 --- a/function/python/brightics/function/transform/sql/functions.py +++ b/function/python/brightics/function/transform/sql/functions.py @@ -21,7 +21,8 @@ from .serializer import _serialize from .serializer import _deserialize import re - +from brightics.common.validation import greater_than_or_equal_to +from brightics.common.validation import validate """ constants """ @@ -116,7 +117,64 @@ def _is_empty(tup): return re.search(pattern, subject).group(1) else: return re.search(pattern, subject).group(index[0]) - + +# NOTE: String index start from 1 in SQL and 0 in Python +def _validate_params(params): + position = 1 + occurrence = 1 + return_option = 0 + param_validation_check = [] + # validate value of return_option + if len(params) >= 3: + return_option = params[2] + param_validation_check.append(greater_than_or_equal_to(params, 0, 2)) + # validate value of occurrence + if len(params) >= 2: + occurrence = params[1] + param_validation_check.append(greater_than_or_equal_to(params, 1, 1)) + # validate value of position + if len(params) >= 1: + position = params[0] + param_validation_check.append(greater_than_or_equal_to(params, 1, 0)) + validate(*param_validation_check) + return position-1, occurrence-1, return_option + + +def regexp_like(subject, pattern): + if re.search(pattern, subject) is None: + return False + return True + + +def regexp_count(subject, pattern, *params): + position, _, _ = _validate_params(params) + return len(re.findall(pattern, subject[position:])) + + +def regexp_substr(subject, pattern, *params): + position, occurrence, _ = _validate_params(params) + start, end = _regexp_common(subject, pattern, position, occurrence) + return subject[start:end] + + +def regexp_instr(subject, pattern, *params): + position, occurrence, return_option = _validate_params(params) + if return_option == 0: + return _regexp_common(subject, pattern, position, occurrence)[0] + 1 + return _regexp_common(subject, pattern, position, occurrence)[1] + 1 + + +def _regexp_common(subject, pattern, position, occurrence): + start = -1 + end = -1 + ret = re.finditer(pattern, subject[position:]) + for ind, r in enumerate(ret): + if (ind == occurrence): + start = r.start() + end = r.end() + break + return start, end + """ datetime related functions """ diff --git a/function/python/brightics/function/transform/svd.py b/function/python/brightics/function/transform/svd.py index 8f3b34cb5..dafca9c31 100644 --- a/function/python/brightics/function/transform/svd.py +++ b/function/python/brightics/function/transform/svd.py @@ -16,8 +16,12 @@ import numpy as np import pandas as pd +from sklearn.utils.extmath import safe_sparse_dot + +from brightics.common.repr import BrtcReprBuilder, strip_margin, pandasDF2MD, plt2MD, dict2MD from brightics.common.groupby import _function_by_group from brightics.common.utils import check_required_parameters +from brightics.function.utils import _model_dict def svd(table, group_by=None, **params): @@ -58,3 +62,97 @@ def _svd(table, input_cols, full_matrices=False): column_name_projection += ['proj%d' % (i + 1)] return {'out_table1':pd.DataFrame(u, columns=column_name_u), 'out_table2':pd.DataFrame(s, columns=column_name_s), 'out_table3':pd.DataFrame(v, columns=column_name_v), 'out_table4':pd.DataFrame(projection, columns=column_name_projection)} + +def svd2(table, group_by=None, **params): + check_required_parameters(_svd2, params, ['table']) + if group_by is not None: + return _function_by_group(_svd2, table, group_by=group_by, **params) + else: + return _svd2(table, **params) + + +def _svd2(table, input_cols, new_column_name='projected_', full_matrices=False): + A = table[input_cols] + + u, s, vh = np.linalg.svd(A, full_matrices=full_matrices) + projection = [] + for i in range(len(s)): + projection += [(u.T[i] * s[i])] + projection = np.array(projection).T + s_normal = [] + for i in range(len(s)): + if i == 0: + s_normal += [s[i] / s.sum()] + else: + s_normal += [s[i] / s.sum() + s_normal[i - 1]] + s = [s] + [s_normal] + s = np.array(s) + v = vh.T + column_name_u = [] + column_name_s = [] + column_name_v = [] + column_name_projection = [] + for i in range(u.shape[1]): + column_name_u += ['u%d' % (i + 1)] + for i in range(s.shape[1]): + column_name_s += ['s%d' % (i + 1)] + for i in range(v.shape[1]): + column_name_v += ['v%d' % (i + 1)] + for i in range(s.shape[1]): + column_name_projection += [new_column_name + '%d' % (i + 1)] + + out_table4 = pd.DataFrame(data=projection, columns=[column_name_projection]) + out_table4 = pd.concat([table.reset_index(drop=True), out_table4], axis=1) + out_table4.columns = table.columns.values.tolist() + column_name_projection + + res_param1 = {} + res_param1['Input Columns'] = input_cols + res_param1['full_matrices'] = full_matrices + + res_param2 = {} + res_param2['u'] = u.shape + res_param2['s'] = s.shape + res_param2['v'] = v.shape + res_param2['Projected Matrix'] = projection.shape + + rb = BrtcReprBuilder() + rb.addMD(strip_margin(""" + | ## SVD Result + | + | ### Dimensions of Matrices + | {parameter2} + | + | ### Parameters + | {parameter1} + """.format(parameter1=dict2MD(res_param1), + parameter2=dict2MD(res_param2) + ))) + + model = _model_dict('svd') + model['right_singular_vectors'] = pd.DataFrame(v, columns=column_name_v) + model['input_cols'] = input_cols + model['parameters'] = res_param1 + model['_repr_brtc_'] = rb.get() + + return {'out_table1':pd.DataFrame(u, columns=column_name_u), 'out_table2':pd.DataFrame(s, columns=column_name_s), 'out_table3':pd.DataFrame(v, columns=column_name_v), 'out_table4':out_table4, 'model':model} + +def svd_model(table, model, **params): + check_required_parameters(_svd_model, params, ['table', 'model']) + return _svd_model(table, model, **params) + + +def _svd_model(table, model, new_column_name='projected_'): + right_singular_vectors = model['right_singular_vectors'] + input_cols = model['input_cols'] + + _, col = right_singular_vectors.shape + + new_col_names = [] + for i in range(col): + new_col_names.append(new_column_name + str(i)) + + svd_result = safe_sparse_dot(table[input_cols], right_singular_vectors) + out_table = pd.concat([table.reset_index(drop=True), pd.DataFrame(data=svd_result, columns=[new_col_names])], axis=1) + out_table.columns = table.columns.values.tolist() + new_col_names + + return {'out_table' : out_table} \ No newline at end of file diff --git a/function/python/brightics/function/transform/tsne.py b/function/python/brightics/function/transform/tsne.py new file mode 100644 index 000000000..a6d513cdb --- /dev/null +++ b/function/python/brightics/function/transform/tsne.py @@ -0,0 +1,72 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from sklearn.manifold import TSNE as tSNE +import pandas as pd +import matplotlib.pyplot as plt +from brightics.common.repr import BrtcReprBuilder, strip_margin, pandasDF2MD, plt2MD, dict2MD +from brightics.function.utils import _model_dict +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate +from brightics.common.validation import from_to +import seaborn as sns +import numpy as np +import matplotlib.cm as cm +from matplotlib.patches import Patch +from brightics.common.validation import validate, greater_than_or_equal_to + + +def tsne(table, group_by=None, **params): + check_required_parameters(_tsne, params, ['table']) + params = get_default_from_parameters_if_required(params, _tsne) + param_validation_check = [from_to(params, 1, len(params['input_cols']), 'n_components')] + validate(*param_validation_check) + if group_by is not None: + grouped_model = _function_by_group(_tsne, table, group_by=group_by, **params) + return grouped_model + else: + return _tsne(table, **params) + + +def _tsne(table, input_cols, new_column_name='projected_', n_components=2, perplexity=30.0, + early_exaggeration=12.0, learning_rate=200.0, n_iter=1000, + n_iter_without_progress=300, min_grad_norm=1e-7, + metric="euclidean", init="random", verbose=0, + seed=None, method='barnes_hut', angle=0.5): + + num_feature_cols = len(input_cols) + if n_components is None: + n_components = num_feature_cols + + tsne = tSNE(n_components=n_components, perplexity=perplexity, early_exaggeration=early_exaggeration, + learning_rate=learning_rate, n_iter=n_iter, n_iter_without_progress=n_iter_without_progress, + min_grad_norm=min_grad_norm, metric=metric, init=init, verbose=verbose, + random_state=seed, method=method, angle=angle) + + tsne_result = tsne.fit_transform(table[input_cols]) + + column_names = [] + for i in range(0, n_components): + column_names.append(new_column_name + str(i)) + + out_df = pd.DataFrame(data=tsne_result[:, :n_components], columns=[column_names]) + + out_df = pd.concat([table.reset_index(drop=True), out_df], axis=1) + out_df.columns = table.columns.values.tolist() + column_names + + return {'out_table': out_df} \ No newline at end of file diff --git a/function/python/brightics/function/transform/under_sampling.py b/function/python/brightics/function/transform/under_sampling.py new file mode 100644 index 000000000..deda1d0e4 --- /dev/null +++ b/function/python/brightics/function/transform/under_sampling.py @@ -0,0 +1,99 @@ +""" + Copyright 2019 Samsung SDS + + Licensed 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 + + http://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. +""" + +from brightics.common.groupby import _function_by_group +from brightics.common.utils import check_required_parameters +from brightics.common.utils import get_default_from_parameters_if_required +from brightics.common.validation import validate +from brightics.common.validation import greater_than_or_equal_to +from brightics.common.validation import raise_error +from brightics.common.classify_input_type import check_col_type + +import sklearn.utils as sklearn_utils +from sklearn import svm +from sklearn import preprocessing +from sklearn.cluster import KMeans +from imblearn.over_sampling import SMOTE as SMOTE_LIB +from imblearn.under_sampling import ClusterCentroids +import pandas as pd +import numpy as np + + +def under_sampling(table, group_by=None, **params): + check_required_parameters(_under_sampling, params, ['table']) + params = get_default_from_parameters_if_required(params, _under_sampling) + + if group_by is not None: + return _function_by_group(_under_sampling, table, group_by=group_by, **params) + else: + return _under_sampling(table, **params) + + +def _under_sampling(table, label_col, sampling_strategy='not majority', seed=None, estimator='KMeans', + n_clusters=8, voting='auto', n_jobs=1): + + # Separate features and label + features = table.drop([label_col], axis=1) + y = table[label_col] + + if(sklearn_utils.multiclass.type_of_target(y) == 'continuous'): + raise_error('0718', 'label_col') + + # Initialization label encoder + lab_encoder = preprocessing.LabelEncoder() + + # Filter out categorical columns in features + categorical_cols = [col for col in features.columns if features[col].dtypes == 'object'] + + # Transform categorical columns and add to the original features + for cate_col in categorical_cols: + features_encoder = lab_encoder.fit_transform(features[cate_col]) + features[cate_col] = features_encoder + + # Transform label column with object type + if (y.dtypes == 'object'): + y_encoder = lab_encoder.fit_transform(y) + else: + y_encoder = y + + if (estimator == 'Kmeans'): + estimator_model = KMeans(n_clusters=n_clusters) + else: + estimator_model = None + + # Process under sampling + sm = ClusterCentroids(sampling_strategy=sampling_strategy, random_state=seed, + estimator=estimator_model, voting=voting, n_jobs=n_jobs) + + X_res, y_res = sm.fit_resample(features, y_encoder) + + # Invert to original data + if (y.dtypes == 'object'): + y_decoder = lab_encoder.inverse_transform(y_res) + else: + y_decoder = y_res + + df = pd.DataFrame(data=X_res, columns=features.columns) + + for cate_col in categorical_cols: + df[cate_col] = lab_encoder.inverse_transform(df[cate_col].astype('int32')) + + df1 = pd.DataFrame(data=y_decoder, columns=[label_col]) + + # Output result + out_table = df.join(df1) + + return {'out_table' : out_table} diff --git a/lib/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle b/lib/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle new file mode 100644 index 000000000..28fd11a25 Binary files /dev/null and b/lib/nltk_data/taggers/averaged_perceptron_tagger/averaged_perceptron_tagger.pickle differ diff --git a/lib/nltk_data/tokenizers/punkt/PY3/english.pickle b/lib/nltk_data/tokenizers/punkt/PY3/english.pickle new file mode 100644 index 000000000..ca5a7ccd0 Binary files /dev/null and b/lib/nltk_data/tokenizers/punkt/PY3/english.pickle differ diff --git a/lib/nltk_data/tokenizers/punkt/english.pickle b/lib/nltk_data/tokenizers/punkt/english.pickle new file mode 100644 index 000000000..648cb75b3 --- /dev/null +++ b/lib/nltk_data/tokenizers/punkt/english.pickle @@ -0,0 +1,61702 @@ +ccopy_reg +_reconstructor +p0 +(cnltk.tokenize.punkt +PunktSentenceTokenizer +p1 +c__builtin__ +object +p2 +Ntp3 +Rp4 +(dp5 +S'_Token' +p6 +cnltk.tokenize.punkt +PunktToken +p7 +sS'_lang_vars' +p8 +g0 +(cnltk.tokenize.punkt +PunktLanguageVars +p9 +g2 +Ntp10 +Rp11 +I1 +bsS'_params' +p12 +g0 +(cnltk.tokenize.punkt +PunktParameters +p13 +g2 +Ntp14 +Rp15 +(dp16 +S'sent_starters' +p17 +c__builtin__ +set +p18 +((lp19 +Vamong +p20 +aVsince +p21 +aVthey +p22 +aVindeed +p23 +aVsome +p24 +aVsales +p25 +aVin +p26 +aVmoreover +p27 +aVyet +p28 +aVif +p29 +aVeven +p30 +aVthese +p31 +aVnevertheless +p32 +aVsimilarly +p33 +aVthere +p34 +aVwhen +p35 +aVunder +p36 +aVinstead +p37 +aVmeanwhile +p38 +aVthus +p39 +aVhowever +p40 +aVbut +p41 +aVit +p42 +aVmost +p43 +aValthough +p44 +aVdespite +p45 +aVnor +p46 +aVhe +p47 +aVboth +p48 +aVthis +p49 +aVmany +p50 +aVnonetheless +p51 +aVaccording +p52 +aVseparately +p53 +aVi +p54 +aVwhile +p55 +aVso +p56 +aVthough +p57 +aVthe +p58 +atp59 +Rp60 +sS'collocations' +p61 +g18 +((lp62 +(V##number## +p63 +Vcorrections +p64 +tp65 +a(Vj +p66 +Varon +p67 +tp68 +a(Vb +p69 +Vwigton +p70 +tp71 +a(V##number## +p72 +Vinsider +p73 +tp74 +a(V##number## +p75 +Vpay-fone +p76 +tp77 +a(g69 +Vlevine +p78 +tp79 +a(Vo +p80 +Vludcke +p81 +tp82 +a(V##number## +p83 +Vinternational +p84 +tp85 +a(V##number## +p86 +Vcbot +p87 +tp88 +a(V##number## +p89 +Vletters +p90 +tp91 +a(V##number## +p92 +Vbusiness +p93 +tp94 +a(V##number## +p95 +Vreview +p96 +tp97 +a(Vi +p98 +Vmagnin +p99 +tp100 +a(V##number## +p101 +Vwho +p102 +tp103 +a(g69 +Vedelman +p104 +tp105 +a(V##number## +p106 +Vpepper +p107 +tp108 +a(V##number## +p109 +Vaes +p110 +tp111 +a(V##number## +p112 +Vdividend +p113 +tp114 +a(V##number## +p115 +Vnotable +p116 +tp117 +a(V##number## +p118 +Vleisure +p119 +tp120 +a(V##number## +p121 +Vgenentech +p122 +tp123 +a(V##number## +p124 +Vcredit +p125 +tp126 +a(V##number## +p127 +Vcooper +p128 +tp129 +a(V##number## +p130 +Vhenley +p131 +tp132 +a(g66 +Vfialka +p133 +tp134 +a(V##number## +p135 +Vzimmer +p136 +tp137 +a(V##number## +p138 +Vcolgate +p139 +tp140 +a(V##number## +p141 +Vfinancing +p142 +tp143 +a(g98 +Vtoussie +p144 +tp145 +a(g69 +Vsmith +p146 +tp147 +a(V##number## +p148 +Vwedgestone +p149 +tp150 +a(g66 +Vwalter +p151 +tp152 +a(V##number## +p153 +Vcommodities +p154 +tp155 +a(g69 +Vstewart +p156 +tp157 +a(V##number## +p158 +Vpegasus +p159 +tp160 +a(V##number## +p161 +Vabreast +p162 +tp163 +a(V##number## +p164 +Vrj +p165 +tp166 +atp167 +Rp168 +sS'abbrev_types' +p169 +g18 +((lp170 +Vw.c +p171 +aVala +p172 +aVw.r +p173 +aVcolo +p174 +aVw.w +p175 +aVga +p176 +aVs.a.y +p177 +aVc.o.m.b +p178 +aVaug +p179 +aVwed +p180 +aVjan +p181 +aVlt +p182 +aVadm +p183 +aVoct +p184 +aVreps +p185 +aVnov +p186 +aVyr +p187 +aVdr +p188 +aVgen +p189 +aVw.va +p190 +aVd +p191 +aVh +p192 +aVl +p193 +aVp +p194 +aVph.d +p195 +aVt +p196 +aVr.k +p197 +aVr.j +p198 +aVr.i +p199 +aVr.h +p200 +aVs.c +p201 +aVsep +p202 +aVr.a +p203 +aVm.b.a +p204 +aVtues +p205 +aVe.f +p206 +aVp.a.m +p207 +aVsen +p208 +aVr.t +p209 +aVh.c +p210 +aVtenn +p211 +aVh.f +p212 +aVrep +p213 +aVn.h +p214 +aVh.m +p215 +aVa.m.e +p216 +aVa.m +p217 +aVnev +p218 +aVprof +p219 +aVcalif +p220 +aVa.d +p221 +aVn.m +p222 +aVa.g +p223 +aVa.a +p224 +aVa.c +p225 +aVa.h +p226 +aVn.d +p227 +aVn.c +p228 +aVjr +p229 +aVkan +p230 +aVa.t +p231 +aVcorp +p232 +aVn.y +p233 +aVa.s +p234 +aVn.v +p235 +aVu.s.s.r +p236 +aVore +p237 +aVc +p238 +aVok +p239 +aVg +p240 +aVe.h +p241 +aVk +p242 +aVe.l +p243 +aVe.m +p244 +aVs +p245 +aVw +p246 +aVltd +p247 +aVm.d.c +p248 +aVsept +p249 +aVcol +p250 +aVi.m.s +p251 +aVokla +p252 +aVco +p253 +aVs.g +p254 +aVs.p.a +p255 +aVwash +p256 +aVwis +p257 +aVct +p258 +aVariz +p259 +aVmaj +p260 +aVfeb +p261 +aVchg +p262 +aVfri +p263 +aVs.a +p264 +aVpa +p265 +aVs.s +p266 +aVn.j +p267 +aVcos +p268 +aV. . +p269 +aVbros +p270 +aVmich +p271 +aVmg +p272 +aVd.c +p273 +aVcie +p274 +aVf +p275 +aVn +p276 +aVr +p277 +aVms +p278 +aVmr +p279 +aVfla +p280 +aVvt +p281 +aVdec +p282 +aVill +p283 +aVc.i.t +p284 +aVva +p285 +aVv +p286 +aVminn +p287 +aVsw +p288 +aVu.s.a +p289 +aVd.h +p290 +aVvs +p291 +aVp.m +p292 +aVave +p293 +aVst +p294 +aVconn +p295 +aVinc +p296 +aVu.s +p297 +aVd.w +p298 +aVf.g +p299 +aVg.f +p300 +aVg.d +p301 +aVmessrs +p302 +aVg.k +p303 +aVu.k +p304 +aVf.j +p305 +aVu.n +p306 +aVt.j +p307 +aVj.r +p308 +aVj.p +p309 +aVft +p310 +aVl.p +p311 +aVj.c +p312 +aVj.b +p313 +aVm.j +p314 +aVj.k +p315 +aVj.j +p316 +aVl.f +p317 +aVl.a +p318 +aVc.v +p319 +aVe +p320 +aVsr +p321 +aVm +p322 +aVb.v +p323 +aVmrs +p324 +aVky +p325 +aVb.f +p326 +atp327 +Rp328 +sS'ortho_context' +p329 +ccollections +defaultdict +p330 +(c__builtin__ +int +p331 +tp332 +Rp333 +Vcelso +p334 +I4 +sVsystematic +p335 +I32 +sVarrows +p336 +I32 +sVmiddleman +p337 +I32 +sVsonja +p338 +I4 +sVjack-of-all-trades +p339 +I32 +sVfour +p340 +I46 +sVwoods +p341 +I44 +sVaegis +p342 +I4 +sVcommented +p343 +I32 +sVresisted +p344 +I32 +sVconjuring +p345 +I32 +sVwoody +p346 +I4 +sVcyprus +p347 +I14 +sVaggression +p348 +I32 +sVmarching +p349 +I32 +sVincrease +p350 +I44 +sVfluidly +p351 +I32 +sVkickbacks +p352 +I32 +sVaugustine +p353 +I12 +sVgranting +p354 +I32 +sVeligible +p355 +I32 +sVelectricity +p356 +I36 +sVlittle-noted +p357 +I32 +sVdeploying +p358 +I32 +sVhanisee +p359 +I12 +sVgimmick +p360 +I32 +sVtent-meeting +p361 +I32 +sVfinancial-district +p362 +I32 +sVless-costly +p363 +I36 +sVoveraged +p364 +I32 +sVnutty +p365 +I32 +sVgeneral-interest +p366 +I32 +sVolcp +p367 +I8 +sVsinking +p368 +I32 +sVsavaiko +p369 +I4 +sVhormone +p370 +I32 +sVshielding +p371 +I32 +sVgovernment-related +p372 +I32 +sVinterpreters +p373 +I32 +sVregional +p374 +I32 +sVdell +p375 +I4 +sVstipulate +p376 +I32 +sVknowledgeable +p377 +I32 +sVfortier +p378 +I4 +sVforties +p379 +I32 +sVever-improving +p380 +I32 +sVlargest-airline +p381 +I32 +sVmicrobe +p382 +I32 +sVunify +p383 +I36 +sVavondale +p384 +I2 +sVbringing +p385 +I32 +sVunobtainable +p386 +I32 +sVwaste-disposal +p387 +I36 +sVwooded +p388 +I32 +sVrecollections +p389 +I32 +sVprize +p390 +I36 +sVandre +p391 +I6 +sVditto +p392 +I2 +sVwednesday +p393 +I12 +sVnsc-directed +p394 +I4 +sVbrutish +p395 +I32 +sVcircuitry +p396 +I32 +sVamplifications +p397 +I4 +sVnotch +p398 +I32 +sVimmunities +p399 +I4 +sVreliable +p400 +I34 +sVno-nonsense +p401 +I4 +sVswitchboards +p402 +I32 +sVinfringed +p403 +I32 +sVtired +p404 +I32 +sVmiller +p405 +I14 +sVhanging +p406 +I34 +sVsailer +p407 +I8 +sVholocaust +p408 +I32 +sVtires +p409 +I32 +sVconsists +p410 +I32 +sVsecond +p411 +I46 +sVcary +p412 +I4 +sVmll +p413 +I8 +sVsustaining +p414 +I32 +sVcompliance +p415 +I32 +sVsherwin-williams +p416 +I4 +sVsingle-a +p417 +I32 +sVmesopotamian +p418 +I4 +sVusbk +p419 +I8 +sVgtech +p420 +I10 +sVerrors +p421 +I32 +sVconcedes +p422 +I34 +sVroddy +p423 +I4 +sVcooking +p424 +I32 +sVcontributed +p425 +I32 +sVfingers +p426 +I32 +sVbonuses +p427 +I32 +sVearly-warning +p428 +I32 +sVlocalized +p429 +I32 +sVdesigning +p430 +I32 +sVelects +p431 +I4 +sVincreasing +p432 +I100 +sVadmiral +p433 +I36 +sVdepartment-related +p434 +I4 +sVpioneering +p435 +I32 +sVspecialist +p436 +I32 +sVzweig +p437 +I8 +sVhero +p438 +I32 +sVevaluating +p439 +I32 +sVreporter +p440 +I36 +sVmicheal +p441 +I2 +sVmailings +p442 +I32 +sVerror +p443 +I36 +sVhere +p444 +I106 +sVatoms +p445 +I32 +sVreported +p446 +I100 +sVgreats +p447 +I32 +sVchina +p448 +I46 +sVauctioned +p449 +I32 +sVtungsten +p450 +I38 +sVhers +p451 +I32 +sVaffiliated +p452 +I32 +sVwarrick +p453 +I4 +sVcalculate +p454 +I32 +sVborrowers +p455 +I32 +sVcyclical +p456 +I32 +sVsubstance +p457 +I36 +sVoxford +p458 +I4 +sVk +p459 +I4 +sVclimbed +p460 +I36 +sVoasis +p461 +I32 +sVreports +p462 +I110 +sVcontroversy +p463 +I32 +sVs-3a +p464 +I4 +sVstallions +p465 +I32 +sVmilitary +p466 +I100 +sVspotty +p467 +I32 +sVcatalyzed +p468 +I32 +sVcancellation +p469 +I40 +sVbrownsville +p470 +I4 +sVdiplomat +p471 +I32 +sVcriticism +p472 +I32 +sVgolden +p473 +I44 +sVnorsk +p474 +I14 +sVprojection +p475 +I32 +sVmagically +p476 +I32 +sVowed +p477 +I32 +sVkaneb +p478 +I6 +sVexplained +p479 +I32 +sVnorse +p480 +I4 +sVreplace +p481 +I32 +sVbrought +p482 +I36 +sVvanoff +p483 +I4 +sVunix +p484 +I4 +sVsizeable +p485 +I32 +sVstern +p486 +I12 +sVtxu +p487 +I8 +sVcocaine +p488 +I32 +sVunit +p489 +I108 +sVopponents +p490 +I34 +sVpro-rata +p491 +I32 +sVsexual +p492 +I32 +sVpersonal-computer +p493 +I32 +sVdna +p494 +I4 +sVspoke +p495 +I32 +sVdnb +p496 +I4 +sVinsecurity +p497 +I32 +sVgrieux +p498 +I4 +sVoccupying +p499 +I32 +sVrefunding +p500 +I32 +sVmusic +p501 +I44 +sVtelegraph +p502 +I36 +sVviolently +p503 +I32 +sVstrike +p504 +I36 +sVwis.-based +p505 +I4 +sVuntil +p506 +I38 +sVaut +p507 +I4 +sVcutbacks +p508 +I36 +sVpantzer +p509 +I12 +sVfemales +p510 +I34 +sVdelicacy +p511 +I32 +sVmired +p512 +I32 +sVrelax +p513 +I32 +sVsuccessful +p514 +I32 +sVbrings +p515 +I32 +sVgeorgian +p516 +I4 +sVholt +p517 +I8 +sVhurt +p518 +I36 +sVpointedly +p519 +I32 +sVglass +p520 +I36 +sVstandardizes +p521 +I32 +sVsurgeon +p522 +I32 +sVharmless +p523 +I32 +sVmarcom +p524 +I12 +sVjmb +p525 +I4 +sVmidst +p526 +I36 +sVhold +p527 +I32 +sVgashed +p528 +I32 +sVdot +p529 +I32 +sVcircumstances +p530 +I32 +sVjewishness +p531 +I4 +sVcorps +p532 +I32 +sVmorally +p533 +I32 +sVlocked +p534 +I32 +sVunaffiliated +p535 +I32 +sVpursue +p536 +I32 +sVsweeten +p537 +I40 +sVplunged +p538 +I36 +sVrulings +p539 +I32 +sVnakasone +p540 +I4 +sVwdc +p541 +I8 +sVanti-japanese +p542 +I32 +sVimperialism +p543 +I32 +sVtemperatures +p544 +I32 +sVwithdrawing +p545 +I32 +sVleaped +p546 +I32 +sVnear-great +p547 +I32 +sVrevenues +p548 +I32 +sVexample +p549 +I32 +sVexpressively +p550 +I32 +sVwanb +p551 +I8 +sVbrand-name +p552 +I32 +sVwang +p553 +I14 +sVhyatt +p554 +I4 +sVjwt +p555 +I14 +sVhousehold +p556 +I38 +sVartillery +p557 +I32 +sVorganized +p558 +I32 +sVvehemently +p559 +I32 +sVcurrency +p560 +I110 +sVcollaborate +p561 +I32 +sVcaution +p562 +I32 +sVreviewing +p563 +I32 +sVwant +p564 +I36 +sVczm +p565 +I8 +sVorganizer +p566 +I32 +sVpinto +p567 +I4 +sVortner +p568 +I4 +sVphaedra +p569 +I4 +sVabsolute +p570 +I36 +sVhog +p571 +I34 +sVhoe +p572 +I32 +sVef-18a +p573 +I4 +sVbrandon +p574 +I4 +sVtchaikovsky +p575 +I4 +sVcomplaining +p576 +I32 +sVcypm +p577 +I12 +sVtravel +p578 +I46 +sVsthf +p579 +I8 +sVdamage +p580 +I36 +sVcutback +p581 +I32 +sVrevisit +p582 +I32 +sVmachine +p583 +I36 +sVhow +p584 +I46 +sVlouisville +p585 +I4 +sVshunning +p586 +I32 +sVhop +p587 +I32 +sVsignificance +p588 +I32 +sVharlan +p589 +I12 +sVdisgrace +p590 +I40 +sVprivate-property +p591 +I32 +sVgarments +p592 +I32 +sVretreating +p593 +I32 +sVsopranos +p594 +I32 +sVmueller +p595 +I4 +sVoil-services +p596 +I32 +sVbeauty +p597 +I36 +sVmediating +p598 +I32 +sVlatest-quarter +p599 +I32 +sVstretch-out +p600 +I32 +sVdecor +p601 +I32 +sVsayi +p602 +I4 +sVdiagram +p603 +I32 +sVmodest +p604 +I32 +sVbarney +p605 +I12 +sVquips +p606 +I32 +sVdestined +p607 +I32 +sVmortars +p608 +I32 +sVsentencing +p609 +I40 +sVunselfish +p610 +I32 +sVpromotion +p611 +I32 +sVtypes +p612 +I36 +sVsteadfast +p613 +I32 +sVself-indulgent +p614 +I32 +sVprevailing +p615 +I32 +sVeffective +p616 +I32 +sVwins +p617 +I36 +sVattracts +p618 +I32 +sVrevolt +p619 +I32 +sVheadquarters +p620 +I36 +sVcigarettes +p621 +I36 +sVorally +p622 +I32 +sVcalculations +p623 +I32 +sVmenlo +p624 +I4 +sVkeeps +p625 +I32 +sVdebt-laden +p626 +I32 +sVheublein +p627 +I4 +sVdemocratic +p628 +I38 +sVwing +p629 +I36 +sVwind +p630 +I36 +sVwine +p631 +I100 +sVsmashers +p632 +I32 +sVsenators +p633 +I34 +sVslack-jawed +p634 +I32 +sVmabey +p635 +I12 +sVfeedback +p636 +I32 +sVostrow +p637 +I4 +sVcar-assembly +p638 +I96 +sVwelcomed +p639 +I36 +sVdreamed +p640 +I32 +sVfrontal +p641 +I32 +sVgovern +p642 +I32 +sVvary +p643 +I32 +sVstoicism +p644 +I32 +sVwhizzing +p645 +I32 +sVpre-selected +p646 +I32 +sVtelephoned +p647 +I32 +sVbarclays +p648 +I4 +sVbubbles +p649 +I32 +sVlower-cost +p650 +I32 +sVstockpiles +p651 +I32 +sVucl +p652 +I4 +sVscalia +p653 +I12 +sVfidelity +p654 +I14 +sVsubsidizes +p655 +I32 +sVjournals +p656 +I36 +sVbread-and-butter +p657 +I32 +sVunderwithheld +p658 +I32 +sVwelcomes +p659 +I32 +sVfir +p660 +I36 +sVfis +p661 +I8 +sVkramer +p662 +I14 +sVderegulating +p663 +I36 +sVbuss +p664 +I8 +sVmortgage-related +p665 +I32 +sVfit +p666 +I32 +sVphiladelphia-based +p667 +I4 +sVunforeseen +p668 +I32 +sVheretofore +p669 +I40 +sVfix +p670 +I32 +sVstriking +p671 +I34 +sVauditors +p672 +I32 +sVpilkington +p673 +I4 +sVper-unit +p674 +I32 +sVnarrowest +p675 +I32 +sVnonpublic +p676 +I32 +sVuncharacteristically +p677 +I32 +sVconner +p678 +I12 +sVwales +p679 +I4 +sVhidden +p680 +I36 +sVfin +p681 +I4 +sVeasier +p682 +I32 +sVemphasize +p683 +I36 +sVundercut +p684 +I32 +sVlabor-force +p685 +I32 +sVglashow +p686 +I4 +sVlambert +p687 +I4 +sVenrich +p688 +I32 +sVslate +p689 +I32 +sVaccrual +p690 +I32 +sVzoning +p691 +I36 +sVelementary +p692 +I32 +sVeducating +p693 +I32 +sVbasics +p694 +I32 +sVstoltenberg +p695 +I4 +sVeffects +p696 +I32 +sVcarolinians +p697 +I2 +sVsayad +p698 +I4 +sVinterrupt +p699 +I32 +sVtownship +p700 +I32 +sVmimicking +p701 +I32 +sVsayao +p702 +I4 +sVsilver +p703 +I36 +sVglutted +p704 +I32 +sVcompetitiveness +p705 +I36 +sVrepresents +p706 +I32 +sVruth +p707 +I4 +sVdebut +p708 +I32 +sVcftc +p709 +I12 +sVhoworth +p710 +I12 +sVpunitive-damage +p711 +I32 +sVcrackdown +p712 +I32 +sVarrow +p713 +I14 +sVwarplanes +p714 +I32 +sVloyalties +p715 +I32 +sVinterfering +p716 +I32 +sVdevelopment +p717 +I36 +sVfacade +p718 +I32 +sVfinancial +p719 +I108 +sVlow-sulfur +p720 +I32 +sVwoes +p721 +I36 +sVconcord +p722 +I4 +sVseries +p723 +I36 +sVblinder +p724 +I14 +sVlong-running +p725 +I32 +sVallan +p726 +I4 +sVcommons +p727 +I4 +sVcontracting +p728 +I32 +sVraw-materials +p729 +I32 +sVstrips +p730 +I32 +sVprecedes +p731 +I32 +sVsubstantially +p732 +I32 +sVlaboratory +p733 +I32 +sVallay +p734 +I32 +sVtruman +p735 +I2 +sVmessage +p736 +I32 +sVwhip +p737 +I32 +sVborne +p738 +I32 +sVrt +p739 +I4 +sVbatchelor +p740 +I12 +sVsmelters +p741 +I32 +sVliterature +p742 +I32 +sVcomputers/office +p743 +I32 +sVwashingtonians +p744 +I4 +sVtianjin +p745 +I4 +sVha +p746 +I8 +sVwaive +p747 +I32 +sVsms +p748 +I4 +sVtax-loss +p749 +I32 +sVdata-base +p750 +I32 +sVmason +p751 +I14 +sVsemiconductor +p752 +I110 +sVre +p753 +I36 +sVencourage +p754 +I32 +sVhague +p755 +I4 +sVheavy-duty +p756 +I32 +sVadapt +p757 +I32 +sVno-growth +p758 +I32 +sVassignment +p759 +I32 +sVsmf +p760 +I12 +sVmillions +p761 +I32 +sVstrategist +p762 +I32 +sVrj +p763 +I10 +sVcentauri +p764 +I4 +sVfoundation +p765 +I38 +sVabbott +p766 +I14 +sVstamping +p767 +I32 +sVimprisonment +p768 +I32 +sVclarence +p769 +I2 +sVassured +p770 +I32 +sVarraigned +p771 +I32 +sVsuccession +p772 +I32 +sVthreatened +p773 +I32 +sVsurveys +p774 +I34 +sVyesterday +p775 +I106 +sVasbestos-like +p776 +I32 +sVian +p777 +I4 +sVc-yields +p778 +I64 +sVoscher +p779 +I4 +sVsheet +p780 +I36 +sVestimate +p781 +I36 +sVsolicited +p782 +I32 +sVuniversally +p783 +I32 +sVtie-ins +p784 +I32 +sVsingle-day +p785 +I4 +sVconnecting-flight +p786 +I32 +sVlks +p787 +I8 +sVenormous +p788 +I32 +sVperform +p789 +I32 +sVshipper +p790 +I32 +sVspurned +p791 +I32 +sVpiecemeal +p792 +I32 +sVata +p793 +I4 +sVfleming +p794 +I4 +sVmcqueen +p795 +I12 +sVrobitussin +p796 +I4 +sVups +p797 +I6 +sVsilicon +p798 +I36 +sVshipped +p799 +I32 +sVdisturbed +p800 +I32 +sVspeedy +p801 +I32 +sVtempting +p802 +I32 +sVkingdom +p803 +I4 +sVhelane +p804 +I2 +sVr. +p805 +I14 +sVgeared +p806 +I32 +sVpont +p807 +I4 +sVr.t. +p808 +I2 +sVappreciable +p809 +I32 +sVkfv +p810 +I4 +sVstrip-searched +p811 +I32 +sVfarmworker +p812 +I4 +sVcarryover +p813 +I32 +sVshoppes +p814 +I4 +sVelma +p815 +I4 +sVreintroduced +p816 +I32 +sVwhereabouts +p817 +I32 +sVvitro +p818 +I2 +sVmaladies +p819 +I32 +sVchannell +p820 +I12 +sVchannels +p821 +I32 +sVspinning +p822 +I34 +sVmirrored +p823 +I32 +sVracquets-master +p824 +I32 +sVwasn +p825 +I44 +sVposner-controlled +p826 +I4 +sVclarity +p827 +I32 +sVantilles +p828 +I4 +sVintimidation +p829 +I32 +sVtax-cutting +p830 +I32 +sVseizures +p831 +I36 +sVopen-market +p832 +I32 +sVbasketball +p833 +I38 +sVtrost +p834 +I4 +sVservice +p835 +I46 +sVsimilarly +p836 +I42 +sVj.b. +p837 +I4 +sVlawsuits +p838 +I38 +sVengagement +p839 +I32 +sVreuben +p840 +I2 +sVtango +p841 +I32 +sVdown-and-out +p842 +I32 +sVneeded +p843 +I32 +sVperturbations +p844 +I32 +sVmaster +p845 +I36 +sVlisted +p846 +I32 +sVhypothetical +p847 +I32 +sVbrashness +p848 +I32 +sVarchitect +p849 +I40 +sVgilbert +p850 +I12 +sVbitter +p851 +I32 +sVranging +p852 +I32 +sVlisten +p853 +I32 +sVhuffy +p854 +I32 +sVdanish +p855 +I14 +sVrewards +p856 +I32 +sVcollapse +p857 +I36 +sVgeneva +p858 +I4 +sVfibrous +p859 +I32 +sVgothic +p860 +I4 +sVwisdom +p861 +I32 +sVlionel +p862 +I14 +sVpredictable +p863 +I32 +sVchairwoman +p864 +I32 +sVcost-effective +p865 +I32 +sVevil +p866 +I32 +sVzany +p867 +I32 +sVcrawl +p868 +I32 +sVpositively +p869 +I32 +sVgerman-based +p870 +I4 +sVstreams +p871 +I32 +sVnmk +p872 +I8 +sVgreensburg +p873 +I4 +sVrabbi +p874 +I32 +sVshowed +p875 +I36 +sVelegant +p876 +I32 +sVguillermo +p877 +I2 +sVoutlaw +p878 +I32 +sVhandcuffs +p879 +I32 +sVtree +p880 +I36 +sVnations +p881 +I36 +sVproject +p882 +I36 +sVpneumonia +p883 +I32 +sVidle +p884 +I32 +sVdrabkin +p885 +I12 +sVsheen +p886 +I4 +sVkemmons +p887 +I6 +sVseminary +p888 +I32 +sVfeeling +p889 +I32 +sVacquisition +p890 +I44 +sVex-microsoft +p891 +I32 +sVunintended +p892 +I32 +sVg.k. +p893 +I4 +sVwillingness +p894 +I32 +sVpublic-debt +p895 +I32 +sVboston +p896 +I14 +sVwealth +p897 +I32 +sVspectrum +p898 +I32 +sVrehearsing +p899 +I32 +sVcraven +p900 +I4 +sVmovie-maker +p901 +I4 +sVsomething-for-everyone +p902 +I32 +sVcolodny +p903 +I12 +sVbramham +p904 +I4 +sVbroadside +p905 +I32 +sVrecapitalized +p906 +I32 +sVffod +p907 +I4 +sVpmk +p908 +I8 +sVgoldsmith +p909 +I12 +sVbenighted +p910 +I32 +sVdozen +p911 +I32 +sVaffairs +p912 +I36 +sVmaj. +p913 +I4 +sVwed. +p914 +I10 +sVex-officers +p915 +I4 +sVconcrete +p916 +I32 +sVkaye +p917 +I2 +sVresponsible +p918 +I32 +sVfloating-rate +p919 +I32 +sVeagerly +p920 +I32 +sVrecommended +p921 +I32 +sVcausing +p922 +I32 +sVabsorbed +p923 +I32 +sVdoors +p924 +I32 +sVinfusions +p925 +I32 +sVregulating +p926 +I32 +sVgrips +p927 +I32 +sVlayoffs +p928 +I32 +sVkremlin +p929 +I4 +sVshipments +p930 +I36 +sVurs +p931 +I10 +sVjyll +p932 +I4 +sVrehnquist +p933 +I4 +sVcannes +p934 +I4 +sVtransactions +p935 +I32 +sVthrilled +p936 +I32 +sVconceptual +p937 +I32 +sVobject +p938 +I32 +sVdiminishing +p939 +I32 +sVconfrontationism +p940 +I32 +sVcinematic +p941 +I32 +sVvictoria +p942 +I4 +sVy +p943 +I4 +sVmouth +p944 +I32 +sVanti-ulcer +p945 +I32 +sVletter +p946 +I44 +sVconceded +p947 +I32 +sVretaining +p948 +I32 +sVpullman-peabody +p949 +I12 +sVthriller +p950 +I32 +sVmorality +p951 +I32 +sVbradford +p952 +I4 +sVdummy +p953 +I32 +sVsinger +p954 +I38 +sVredistribution +p955 +I32 +sVepisode +p956 +I32 +sVclassicist +p957 +I32 +sVantitrust +p958 +I32 +sVgrove +p959 +I12 +sVdausch +p960 +I8 +sVcamp +p961 +I36 +sVdetectors +p962 +I32 +sVcrowd +p963 +I32 +sVguero +p964 +I32 +sValas +p965 +I2 +sVtech +p966 +I36 +sVhandcuffing +p967 +I4 +sVleahy +p968 +I12 +sVteck +p969 +I4 +sVdetriment +p970 +I32 +sVsinglehandedly +p971 +I32 +sVscream +p972 +I32 +sVincomplete +p973 +I32 +sVclassicism +p974 +I32 +sVcruzado +p975 +I36 +sVadvisory +p976 +I32 +sVboogie +p977 +I32 +sVbomb +p978 +I32 +sVreactor +p979 +I32 +sVdeparting +p980 +I32 +sVmeetings +p981 +I32 +sVsweetner +p982 +I8 +sVfenner +p983 +I4 +sVechoing +p984 +I32 +sVnominated +p985 +I32 +sVlitton +p986 +I6 +sVuntraveled +p987 +I32 +sVreschedule +p988 +I32 +sVgauge +p989 +I32 +sVulcer +p990 +I32 +sVparticipate +p991 +I32 +sVlethal +p992 +I32 +sVhungary +p993 +I14 +sVcalvert +p994 +I4 +sVfive-week +p995 +I32 +sVabreast +p996 +I40 +sVrough-and-tumble +p997 +I32 +sVjunk-bond +p998 +I32 +sVlessons +p999 +I32 +sVorleans +p1000 +I4 +sVtouches +p1001 +I32 +sVbusy +p1002 +I36 +sVlayout +p1003 +I32 +sVthird-place +p1004 +I32 +sVshuffling +p1005 +I32 +sVheadline +p1006 +I32 +sVmenu +p1007 +I32 +sVbust +p1008 +I32 +sVinterbank +p1009 +I36 +sVaccelerate +p1010 +I32 +sVrico +p1011 +I4 +sVtheme +p1012 +I36 +sVpre-apprentices +p1013 +I32 +sVrich +p1014 +I36 +sVmend +p1015 +I32 +sVrestructurings +p1016 +I32 +sVpickens +p1017 +I12 +sVmilton +p1018 +I4 +sVorganizes +p1019 +I32 +sVbuchanan +p1020 +I12 +sVrica +p1021 +I4 +sVplate +p1022 +I32 +sVsalespeople +p1023 +I32 +sVklein +p1024 +I12 +sVjean-pierre +p1025 +I4 +sVsix-to +p1026 +I32 +sVcatered +p1027 +I32 +sVhonda +p1028 +I12 +sVdenounce +p1029 +I32 +sVpsychiatric +p1030 +I36 +sVguano +p1031 +I32 +sVpocket +p1032 +I36 +sVataturk +p1033 +I4 +sVfarmington +p1034 +I4 +sVlenders +p1035 +I32 +sValtogether +p1036 +I40 +sVhilford +p1037 +I4 +sVchurchillian +p1038 +I4 +sVrelish +p1039 +I32 +sVsocieties +p1040 +I32 +sVforbids +p1041 +I32 +sVabbreviation +p1042 +I32 +sVjaguar +p1043 +I4 +sVgreens +p1044 +I36 +sVbluefield +p1045 +I4 +sVdipping +p1046 +I32 +sVpatch +p1047 +I4 +sVgreene +p1048 +I4 +sVmcic +p1049 +I8 +sVyou-know-what +p1050 +I32 +sVthree-year +p1051 +I32 +sVreviving +p1052 +I32 +sVflanked +p1053 +I32 +sVgangster-and-love +p1054 +I32 +sVperron +p1055 +I4 +sVaftermath +p1056 +I32 +sVseizure-prone +p1057 +I32 +sVgenerosity +p1058 +I32 +sVrespond +p1059 +I32 +sVblew +p1060 +I32 +sVleasing +p1061 +I36 +sVdisaster +p1062 +I32 +sVfair +p1063 +I36 +sVgimmickry +p1064 +I32 +sVclarified +p1065 +I32 +sVsensitivity +p1066 +I32 +sVclev +p1067 +I4 +sVevolving +p1068 +I32 +sVrecruit +p1069 +I32 +sVunexpectedly +p1070 +I32 +sVmale-pattern +p1071 +I32 +sVorben +p1072 +I4 +sVresult +p1073 +I32 +sVrajavi +p1074 +I4 +sVfail +p1075 +I36 +sVresigned +p1076 +I108 +sVhammer +p1077 +I36 +sVconnecticut-based +p1078 +I4 +sVbest +p1079 +I36 +sVscreams +p1080 +I32 +sVinns +p1081 +I4 +sVclaridge +p1082 +I8 +sVpressured +p1083 +I32 +sVmisdiagnosis +p1084 +I32 +sVirs +p1085 +I12 +sVrings +p1086 +I32 +sVardently +p1087 +I32 +sVinjuries +p1088 +I32 +sVpressures +p1089 +I40 +sVscore +p1090 +I32 +sVdalhouse +p1091 +I12 +sVscorn +p1092 +I32 +sVuc-santa +p1093 +I2 +sVoccupational +p1094 +I36 +sVire +p1095 +I32 +sVrohatyn +p1096 +I4 +sVskimpy +p1097 +I32 +sVpreserve +p1098 +I32 +sVwage +p1099 +I34 +sVmen +p1100 +I36 +sVinvention +p1101 +I32 +sVnationwide +p1102 +I36 +sVnature +p1103 +I32 +sVrolled +p1104 +I32 +sVfelony +p1105 +I32 +sVherrera +p1106 +I8 +sVaesthetic +p1107 +I32 +sVconvertibles +p1108 +I4 +sVauthorizing +p1109 +I32 +sVinextricably +p1110 +I32 +sVbeutel +p1111 +I4 +sVrgs +p1112 +I4 +sVkurlak +p1113 +I12 +sVaffiliates +p1114 +I36 +sVextent +p1115 +I32 +sVdowngrade +p1116 +I32 +sVcarbon +p1117 +I32 +sVdebt +p1118 +I100 +sVenergy-related +p1119 +I32 +sVpity +p1120 +I32 +sVfeetlebaum +p1121 +I4 +sVplanner +p1122 +I4 +sViowa-based +p1123 +I4 +sVsacrificing +p1124 +I32 +sVveer +p1125 +I32 +sVoki +p1126 +I4 +sVcountry +p1127 +I102 +sVreaders +p1128 +I32 +sVheating +p1129 +I34 +sVdemanded +p1130 +I32 +sVosha +p1131 +I4 +sVplanned +p1132 +I32 +sVgenicom +p1133 +I6 +sVinstallments +p1134 +I32 +sVcolgate-palmolive +p1135 +I2 +sVfederalism +p1136 +I32 +sVargue +p1137 +I32 +sVbetrayed +p1138 +I32 +sVasked +p1139 +I98 +sVpolitical-science +p1140 +I32 +sVrehash +p1141 +I32 +sValternate +p1142 +I4 +sVmaclaine +p1143 +I4 +sVprd +p1144 +I8 +sVfixed-rated +p1145 +I32 +sVvain +p1146 +I32 +sVboosterism +p1147 +I32 +sVblonds +p1148 +I36 +sVwearying +p1149 +I2 +sVgypsies +p1150 +I32 +sVdorm +p1151 +I6 +sVunprotected +p1152 +I32 +sVatswi +p1153 +I4 +sVgleaming +p1154 +I32 +sVtranslates +p1155 +I32 +sVfelt-tipped +p1156 +I32 +sVdavidweill +p1157 +I8 +sVblonde +p1158 +I36 +sVheat-processing-systems +p1159 +I32 +sVsmuin +p1160 +I12 +sVairbus +p1161 +I6 +sVpenalize +p1162 +I32 +sVafinp +p1163 +I8 +sVburton +p1164 +I4 +sVamericus +p1165 +I14 +sVsutezo +p1166 +I4 +sVbilling +p1167 +I32 +sVshouting +p1168 +I34 +sVholdings +p1169 +I44 +sVtatum +p1170 +I8 +sVoil-pipeline +p1171 +I32 +sVsubside +p1172 +I32 +sVprovincially +p1173 +I32 +sVarmand +p1174 +I2 +sVbreathlessly +p1175 +I32 +sVextraction +p1176 +I32 +sVsavin +p1177 +I4 +sVmuch +p1178 +I102 +sVarose +p1179 +I32 +sVdreg +p1180 +I32 +sVsponges +p1181 +I32 +sVprivilege +p1182 +I32 +sVprofit-margin +p1183 +I32 +sVauction-rate +p1184 +I32 +sVfrx +p1185 +I4 +sVpro +p1186 +I32 +sVtoning +p1187 +I32 +sVprofessional-management +p1188 +I32 +sVdoldrums +p1189 +I36 +sVlife +p1190 +I46 +sVkilowatt-hour +p1191 +I32 +sVcrying +p1192 +I34 +sVadd-vantage +p1193 +I6 +sVeastern +p1194 +I46 +sVarkin +p1195 +I4 +sVzico +p1196 +I6 +sVhorseshoe +p1197 +I32 +sVcourtney +p1198 +I4 +sVworker +p1199 +I36 +sVirving +p1200 +I6 +sVracquets +p1201 +I34 +sVirvine +p1202 +I14 +sVboardroom +p1203 +I4 +sVdave +p1204 +I4 +sVkids +p1205 +I32 +sVprostitution +p1206 +I32 +sVchile +p1207 +I6 +sVchild +p1208 +I36 +sVworked +p1209 +I32 +sVatoka +p1210 +I4 +sVspin +p1211 +I32 +sVbridal +p1212 +I32 +sVdiverted +p1213 +I40 +sVcommerce +p1214 +I36 +sVgritty +p1215 +I32 +sVby-election +p1216 +I32 +sVfri. +p1217 +I2 +sVeaster +p1218 +I4 +sVsale-leasebacks +p1219 +I32 +sVcastro +p1220 +I4 +sVshoring +p1221 +I32 +sVemploy +p1222 +I32 +sVpleads +p1223 +I32 +sVseven-state +p1224 +I32 +sVhates +p1225 +I32 +sVappeals +p1226 +I44 +sVpastime +p1227 +I32 +sVgerhard +p1228 +I4 +sVflooding +p1229 +I32 +sVelaborate +p1230 +I32 +sVlevies +p1231 +I32 +sVbar-illan +p1232 +I12 +sVvulnerability +p1233 +I32 +sVmid-may +p1234 +I32 +sVplayed +p1235 +I32 +sVstop-loss +p1236 +I32 +sVhunkered +p1237 +I32 +sVigam +p1238 +I4 +sVaskren +p1239 +I8 +sVkohl +p1240 +I4 +sVconditioned +p1241 +I32 +sVbisporus +p1242 +I32 +sVplayer +p1243 +I32 +sVoutfitted +p1244 +I32 +sVgrisdela +p1245 +I8 +sVkilburn +p1246 +I8 +sVanticipating +p1247 +I34 +sVwaddell +p1248 +I8 +sVlevied +p1249 +I32 +sVnoncompetitive +p1250 +I32 +sVfreezeframe +p1251 +I4 +sVbreakfast +p1252 +I36 +sVtrusted +p1253 +I32 +sVtrustee +p1254 +I32 +sVbricks-and-mortar +p1255 +I32 +sVdamaged +p1256 +I36 +sVdhl +p1257 +I4 +sVtruell +p1258 +I4 +sVoutperforming +p1259 +I32 +sVtaped +p1260 +I32 +sVacqusitions +p1261 +I32 +sVthings +p1262 +I34 +sVyellow +p1263 +I4 +sVcumulative +p1264 +I32 +sVthievery +p1265 +I32 +sVrebellion +p1266 +I32 +sVdemocracies +p1267 +I32 +sVswarthy +p1268 +I32 +sVusx +p1269 +I12 +sVdamages +p1270 +I32 +sVbabies +p1271 +I32 +sVelliott +p1272 +I4 +sVprincipals +p1273 +I32 +sVauto-focus +p1274 +I40 +sVbid +p1275 +I36 +sVholiday-shortened +p1276 +I32 +sVeuropean +p1277 +I14 +sVfairly +p1278 +I32 +sVsaluted +p1279 +I32 +sVpontiac +p1280 +I14 +sVmarches +p1281 +I32 +sVqualifications +p1282 +I32 +sVworkforce +p1283 +I32 +sVagsi +p1284 +I8 +sVphotographers +p1285 +I32 +sVunder-represented +p1286 +I32 +sVownership +p1287 +I32 +sVepton +p1288 +I4 +sVpioneers +p1289 +I32 +sVbloodcurdling +p1290 +I32 +sVcost-effectiveness +p1291 +I32 +sVadopting +p1292 +I32 +sVtune +p1293 +I32 +sVmidsized +p1294 +I32 +sVbudget/tax +p1295 +I32 +sVlucas +p1296 +I4 +sVabdul-haadee +p1297 +I4 +sVr.i. +p1298 +I4 +sVvice-president +p1299 +I32 +sVmargoshes +p1300 +I4 +sVhigh-bypass +p1301 +I32 +sVintrigue +p1302 +I32 +sVsteel-production +p1303 +I32 +sVchafing +p1304 +I32 +sVacademia +p1305 +I32 +sVsubpoena +p1306 +I32 +sVsimulated +p1307 +I32 +sVechoes +p1308 +I32 +sVcorporate +p1309 +I110 +sVjardine +p1310 +I4 +sVabound +p1311 +I36 +sVhoffmann-la +p1312 +I4 +sVopinions +p1313 +I32 +sVspurred +p1314 +I32 +sVgigolo +p1315 +I4 +sVcapitol +p1316 +I4 +sVtxn +p1317 +I12 +sVquasar +p1318 +I4 +sVdistribute +p1319 +I32 +sVgtch +p1320 +I8 +sVbeset +p1321 +I36 +sVdisguise +p1322 +I32 +sVfinancially +p1323 +I32 +sVbirmingham +p1324 +I14 +sVsnickered +p1325 +I32 +sVplight +p1326 +I32 +sVaward-winning +p1327 +I32 +sVsomerville +p1328 +I8 +sVportrayed +p1329 +I32 +sVshort-covering +p1330 +I32 +sVprevious +p1331 +I34 +sVdirector-generalship +p1332 +I32 +sVswaggering +p1333 +I32 +sVenters +p1334 +I8 +sVhal +p1335 +I14 +sVcampaign +p1336 +I38 +sVphillips +p1337 +I14 +sVease +p1338 +I36 +sVhad +p1339 +I108 +sVideal +p1340 +I34 +sVstaffing +p1341 +I32 +sVbnk +p1342 +I4 +sVhay +p1343 +I4 +sVdisparity +p1344 +I32 +sVanimation +p1345 +I32 +sVcollections +p1346 +I32 +sVinnocent +p1347 +I36 +sVprison +p1348 +I36 +sVfalter +p1349 +I32 +sVjavett +p1350 +I8 +sVhas +p1351 +I108 +sVtorrance +p1352 +I4 +sVglemp +p1353 +I4 +sVlead-recycling +p1354 +I32 +sVmunicipal +p1355 +I36 +sVcasually +p1356 +I32 +sVelders +p1357 +I36 +sVsurvival +p1358 +I40 +sVrudolfo +p1359 +I4 +sVobscenity +p1360 +I32 +sVpossible +p1361 +I36 +sVawhile +p1362 +I32 +sVfirmer +p1363 +I32 +sVpossibly +p1364 +I34 +sVgridlock +p1365 +I32 +sVbirth +p1366 +I32 +sVfirmed +p1367 +I32 +sVshadow +p1368 +I32 +sVposes +p1369 +I32 +sVevading +p1370 +I32 +sVoccurring +p1371 +I32 +sVdesire +p1372 +I32 +sVpsychological +p1373 +I32 +sVparaphrase +p1374 +I32 +sVoncor +p1375 +I2 +sVbobby +p1376 +I12 +sVgadd +p1377 +I12 +sVgade +p1378 +I4 +sVspecifics +p1379 +I40 +sVteledyne +p1380 +I14 +sVremind +p1381 +I32 +sVmisled +p1382 +I32 +sVdecried +p1383 +I32 +sVsteps +p1384 +I36 +sVgroundwater +p1385 +I32 +sVoverabundance +p1386 +I32 +sVsympathize +p1387 +I32 +sVbasra +p1388 +I4 +sVstanger +p1389 +I8 +sVattorney +p1390 +I108 +sVright +p1391 +I34 +sVold +p1392 +I108 +sVcreek +p1393 +I4 +sVvault +p1394 +I32 +sVpeople +p1395 +I38 +sVmacabre +p1396 +I32 +sVmidyear +p1397 +I32 +sVbroadcasters +p1398 +I38 +sVnorthrop +p1399 +I14 +sVbegin +p1400 +I96 +sVchoosing +p1401 +I32 +sVf.j. +p1402 +I4 +sVconsultants +p1403 +I36 +sVpensions +p1404 +I32 +sVcommonplace +p1405 +I32 +sVinformation-swapping +p1406 +I32 +sVconvincingly +p1407 +I32 +sVinsistence +p1408 +I32 +sVbillboard +p1409 +I32 +sVfiduciary +p1410 +I32 +sVharassment +p1411 +I32 +sVcreer +p1412 +I4 +sVcreep +p1413 +I32 +sVenemies +p1414 +I32 +sVchorus +p1415 +I32 +sVearlier-than-contemplated +p1416 +I32 +sVtxt +p1417 +I8 +sVruffled +p1418 +I36 +sVfor +p1419 +I110 +sVbottom +p1420 +I36 +sVmarketers +p1421 +I32 +sVfox +p1422 +I44 +sVhausfeld +p1423 +I12 +sVcreative +p1424 +I36 +sVunderstandably +p1425 +I32 +sVfoe +p1426 +I32 +sVcontinue +p1427 +I36 +sVlandscape +p1428 +I36 +sVsummoned +p1429 +I96 +sVstorrs +p1430 +I4 +sVumm +p1431 +I4 +sVsurging +p1432 +I32 +sVhead-on +p1433 +I32 +sVperot +p1434 +I4 +sVpalatable +p1435 +I32 +sVsubstitutes +p1436 +I32 +sVgoetzl +p1437 +I12 +sVfish +p1438 +I32 +sVneutrinos +p1439 +I32 +sVdental +p1440 +I32 +sVlilliputian +p1441 +I4 +sVbollerer +p1442 +I4 +sVnon-canadian +p1443 +I32 +sVm.b.a.s +p1444 +I4 +sVcheating +p1445 +I96 +sVshifting +p1446 +I32 +sVdefensive +p1447 +I32 +sVpmco +p1448 +I4 +sVlosing +p1449 +I32 +sVbrokerage +p1450 +I98 +sVbowing +p1451 +I32 +sVmanufacturing +p1452 +I108 +sVpre-election +p1453 +I32 +sVyoko +p1454 +I2 +sVechoed +p1455 +I32 +sVaboard +p1456 +I32 +sVboycotts +p1457 +I32 +sVinstructed +p1458 +I32 +sVleominster +p1459 +I4 +sVvisitors +p1460 +I34 +sVdollars +p1461 +I96 +sVrebuffed +p1462 +I32 +sVo +p1463 +I12 +sVscandal-ridden +p1464 +I32 +sVannualized +p1465 +I34 +sVbenched +p1466 +I32 +sVdespair +p1467 +I32 +sVspins +p1468 +I32 +sVbest-selling +p1469 +I32 +sVlacked +p1470 +I32 +sVbandag +p1471 +I2 +sVslightly +p1472 +I36 +sVnixon +p1473 +I4 +sVmiddle-level +p1474 +I32 +sVraised +p1475 +I108 +sVstatements +p1476 +I32 +sVfacility +p1477 +I32 +sVperkins +p1478 +I4 +sVmarshall +p1479 +I2 +sVimplications +p1480 +I32 +sVwell-suited +p1481 +I32 +sVson +p1482 +I34 +sVnuala +p1483 +I4 +sVrespectable +p1484 +I32 +sVbeings +p1485 +I32 +sVone-fourth +p1486 +I32 +sVmagazines +p1487 +I36 +sVraises +p1488 +I36 +sVsow +p1489 +I32 +sVstockholder +p1490 +I32 +sVconsumer-products +p1491 +I32 +sVattrition +p1492 +I32 +sVshoots +p1493 +I32 +sVreducing +p1494 +I36 +sVdefendants +p1495 +I34 +sVwhittled +p1496 +I32 +sVunambiguous +p1497 +I32 +sVsurround +p1498 +I32 +sVaddington +p1499 +I2 +sVfabric +p1500 +I32 +sVsupport +p1501 +I116 +sVconstantly +p1502 +I32 +sVone-time +p1503 +I32 +sVwaite +p1504 +I6 +sVjoseph +p1505 +I14 +sVassitance +p1506 +I32 +sVauthorized +p1507 +I32 +sVresulted +p1508 +I32 +sVtele +p1509 +I8 +sVbabcock +p1510 +I4 +sVhalls +p1511 +I32 +sVoverhang +p1512 +I32 +sVtherefore +p1513 +I34 +sValloys +p1514 +I32 +sVcity-council +p1515 +I32 +sVnon-contract +p1516 +I32 +sVoffer +p1517 +I44 +sVfascination +p1518 +I32 +sVforming +p1519 +I32 +sVmolding +p1520 +I32 +sVdistortions +p1521 +I32 +sVgrass-roots +p1522 +I32 +sVtalents +p1523 +I32 +sVinnovating +p1524 +I32 +sVunderstandable +p1525 +I32 +sVbounce +p1526 +I32 +sVreinventing +p1527 +I32 +sVrobertson +p1528 +I14 +sVbeech +p1529 +I6 +sVgaming +p1530 +I4 +sVsafeguard +p1531 +I32 +sVbutler +p1532 +I12 +sVbelove +p1533 +I4 +sVnov. +p1534 +I14 +sVsilliness +p1535 +I32 +sVadler +p1536 +I12 +sVinside +p1537 +I34 +sVmyopia +p1538 +I32 +sVhelicopter +p1539 +I32 +sVdevices +p1540 +I36 +sVpeso +p1541 +I32 +sVbreak-up +p1542 +I32 +sVjan. +p1543 +I14 +sVcomplications +p1544 +I32 +sVlays +p1545 +I4 +sVappeals-court +p1546 +I32 +sVsoldering +p1547 +I36 +sVduet +p1548 +I32 +sVpanels +p1549 +I32 +sVazt +p1550 +I6 +sVtriumphing +p1551 +I32 +sVdesktops +p1552 +I32 +sVpassenger +p1553 +I32 +sVjuvenile +p1554 +I36 +sVproud +p1555 +I40 +sVliberal +p1556 +I36 +sVmideast +p1557 +I4 +sVauto-receivables +p1558 +I64 +sVwell-orchestrated +p1559 +I32 +sVbigger-than-expected +p1560 +I32 +sVdisclosing +p1561 +I32 +sVproven +p1562 +I32 +sVconvergent +p1563 +I4 +sVsomebody +p1564 +I36 +sVkhj +p1565 +I4 +sVproves +p1566 +I32 +sVexist +p1567 +I32 +sVmarxists +p1568 +I4 +sVaccounting +p1569 +I36 +sVblack-market +p1570 +I32 +sVmrs +p1571 +I8 +sVdealer +p1572 +I36 +sVnegotiations +p1573 +I32 +sVposting +p1574 +I32 +sVlytton +p1575 +I4 +sVsolicitation +p1576 +I32 +sVcrownx +p1577 +I4 +sVeventual +p1578 +I32 +sVfloor +p1579 +I32 +sVmedrich +p1580 +I12 +sVpopulations +p1581 +I32 +sVmaze +p1582 +I4 +sVactor +p1583 +I36 +sVflood +p1584 +I32 +sVpasadena +p1585 +I12 +sVrole +p1586 +I108 +sVindigent +p1587 +I36 +sVambitious +p1588 +I32 +sVculver +p1589 +I4 +sVcrowne +p1590 +I4 +sVdevelopers +p1591 +I34 +sVsmell +p1592 +I32 +sVroll +p1593 +I32 +sVsteamship +p1594 +I36 +sVcheetah +p1595 +I4 +sVintend +p1596 +I32 +sVcab +p1597 +I4 +sVmodels +p1598 +I36 +sVramada +p1599 +I12 +sVdual-purpose +p1600 +I32 +sVstealing +p1601 +I32 +sVtaurus +p1602 +I4 +sVconservatively +p1603 +I32 +sVmesmerized +p1604 +I32 +sVacquaintance +p1605 +I32 +sVinvested +p1606 +I32 +sVgrowth-oriented +p1607 +I32 +sVrolling +p1608 +I36 +sVreplacement +p1609 +I32 +sVdispersed +p1610 +I32 +sVexplosions +p1611 +I32 +sVdirks +p1612 +I4 +sVduplication +p1613 +I32 +sVreorganization +p1614 +I40 +sVmicrobes +p1615 +I32 +sVdogma +p1616 +I36 +sVg.d. +p1617 +I10 +sVhammett +p1618 +I12 +sVottawa +p1619 +I12 +sVtriple-damage +p1620 +I32 +sVpost-it +p1621 +I4 +sVgood-natured +p1622 +I32 +sVtime +p1623 +I44 +sVpush +p1624 +I36 +sVyork-new +p1625 +I4 +sVbanners +p1626 +I32 +sVquantity +p1627 +I32 +sVchikane +p1628 +I12 +sVchip-industry +p1629 +I32 +sVdiego-based +p1630 +I4 +sVcincinnati +p1631 +I4 +sVchain +p1632 +I36 +sVa.h. +p1633 +I14 +sVchestnuts +p1634 +I32 +sVoglesby +p1635 +I12 +sVhurl +p1636 +I32 +sVactivated +p1637 +I32 +sVgousha +p1638 +I12 +sVcrocodile +p1639 +I4 +sVtheaters +p1640 +I32 +sVmathewson +p1641 +I4 +sVtampa +p1642 +I4 +sVjarring +p1643 +I32 +sVequalized +p1644 +I32 +sVchair +p1645 +I32 +sVdavao +p1646 +I4 +sVpacts +p1647 +I36 +sVindefinite +p1648 +I32 +sVpiscataway +p1649 +I4 +sVballet +p1650 +I36 +sVver +p1651 +I4 +sVcaldwell +p1652 +I4 +sVlara +p1653 +I12 +sVsuspending +p1654 +I32 +sVblindfold +p1655 +I32 +sVplainclothes +p1656 +I32 +sVhobhouse +p1657 +I4 +sVgrappled +p1658 +I32 +sVaccomplish +p1659 +I32 +sVven +p1660 +I4 +sVconnecting +p1661 +I32 +sVirksome +p1662 +I32 +sVoversight +p1663 +I32 +sVself-dealing +p1664 +I32 +sVrecipient +p1665 +I32 +sVquaintness +p1666 +I32 +sVpaychecks +p1667 +I32 +sVicing +p1668 +I32 +sVjerk +p1669 +I32 +sVkumar +p1670 +I4 +sVallegations +p1671 +I34 +sVrefinance +p1672 +I32 +sVtwo-way +p1673 +I36 +sVconsolidation +p1674 +I32 +sVspate +p1675 +I32 +sVchoice +p1676 +I32 +sVwharton +p1677 +I14 +sVfrench-sounding +p1678 +I4 +sVgloomy +p1679 +I32 +sVdrexel +p1680 +I14 +sVservicing +p1681 +I32 +sValnt +p1682 +I8 +sVportuguese +p1683 +I4 +sVcorp. +p1684 +I12 +sVexact +p1685 +I32 +sVminute +p1686 +I32 +sVnorwood +p1687 +I12 +sVnotations +p1688 +I32 +sVjudaism +p1689 +I4 +sVreining +p1690 +I32 +sVtear +p1691 +I32 +sVmcneill +p1692 +I4 +sVleave +p1693 +I36 +sVtap +p1694 +I32 +sVdepositors +p1695 +I32 +sVsettle +p1696 +I44 +sVcooke +p1697 +I4 +sVsubway +p1698 +I32 +sVpasztor +p1699 +I4 +sVteam +p1700 +I32 +sVpublic-choice +p1701 +I32 +sVflaxen-haired +p1702 +I32 +sVspeculation +p1703 +I34 +sVz-holiday +p1704 +I16 +sVrate-increase +p1705 +I32 +sVunaware +p1706 +I32 +sVprevent +p1707 +I32 +sVspiritual +p1708 +I32 +sVyitzhak +p1709 +I4 +sVchesebrough +p1710 +I2 +sVrents +p1711 +I32 +sVfindings +p1712 +I32 +sVinsignificant +p1713 +I36 +sVsigh +p1714 +I32 +sVsouthwestern +p1715 +I32 +sVsoft-spoken +p1716 +I32 +sVboca +p1717 +I12 +sVsign +p1718 +I44 +sVjumblatt +p1719 +I4 +sVlong-suffering +p1720 +I32 +sVshirts +p1721 +I32 +sVpatient +p1722 +I32 +sVsecond-front-page +p1723 +I32 +sVeducate +p1724 +I32 +sVtrop +p1725 +I4 +sVessence +p1726 +I32 +sVexempts +p1727 +I32 +sVburroughs-wellcome +p1728 +I6 +sVconvulse +p1729 +I32 +sVantwerp +p1730 +I4 +sVaxes +p1731 +I32 +sVrealizing +p1732 +I32 +sVacademicians +p1733 +I32 +sVcurrent +p1734 +I102 +sVunderfinanced +p1735 +I32 +sVpuckett +p1736 +I8 +sVpoindexter +p1737 +I12 +sVfalling +p1738 +I42 +sVboost +p1739 +I36 +sVfslic +p1740 +I4 +sVclevepak +p1741 +I4 +sVl.p. +p1742 +I12 +sVdrafted +p1743 +I32 +sVrosenberg +p1744 +I4 +sVtotalling +p1745 +I32 +sVjury +p1746 +I36 +sVsweeter +p1747 +I32 +sVarizona +p1748 +I14 +sVamalgam +p1749 +I32 +sVfuneral +p1750 +I36 +sVbroadcasts +p1751 +I32 +sVvanderbilt +p1752 +I12 +sVunderstanding +p1753 +I36 +sVmagnetism +p1754 +I32 +sVsnack +p1755 +I32 +sVegypt +p1756 +I4 +sVaddress +p1757 +I32 +sValone +p1758 +I36 +sValong +p1759 +I42 +sVdwindling +p1760 +I32 +sVbenson +p1761 +I4 +sVsystemwide +p1762 +I32 +sVpassengers +p1763 +I32 +sVplunges +p1764 +I4 +sVaccomplishes +p1765 +I32 +sVbrilliant +p1766 +I32 +sVstudied +p1767 +I32 +sVfunded +p1768 +I32 +sVcommonly +p1769 +I32 +sVacceded +p1770 +I32 +sVaccomplished +p1771 +I32 +sVineffective +p1772 +I32 +sVabsenteeism +p1773 +I32 +sVill-fated +p1774 +I32 +sVmyers +p1775 +I12 +sVstudies +p1776 +I44 +sVbearable +p1777 +I32 +sVnowhere +p1778 +I34 +sVtasks +p1779 +I36 +sVlove +p1780 +I36 +sVekstrom +p1781 +I8 +sVdictatorial +p1782 +I32 +sVroyster +p1783 +I12 +sVprefer +p1784 +I32 +sVipo +p1785 +I4 +sVlogical +p1786 +I32 +sVonce-monolithic +p1787 +I32 +sVconflict-of-interest +p1788 +I32 +sVmarvelous +p1789 +I32 +sVresidual +p1790 +I32 +sVraking +p1791 +I32 +sVloquacity +p1792 +I32 +sVfake +p1793 +I32 +sVforefront +p1794 +I32 +sVflagging +p1795 +I32 +sVrelating +p1796 +I32 +sVraiding +p1797 +I32 +sVconservatorship +p1798 +I32 +sVopposes +p1799 +I32 +sVtowards +p1800 +I32 +sVlenox +p1801 +I4 +sVworking +p1802 +I34 +sVbendel +p1803 +I4 +sVpositive +p1804 +I32 +sVavant-garde +p1805 +I32 +sVpredictions +p1806 +I32 +sVtightly +p1807 +I32 +sVmontero +p1808 +I4 +sVcherished +p1809 +I32 +sVwood +p1810 +I36 +sVopposed +p1811 +I36 +sVwondering +p1812 +I32 +sVunjust +p1813 +I32 +sVfilms +p1814 +I32 +sVstreeter +p1815 +I4 +sVsyrians +p1816 +I4 +sVtheoretical +p1817 +I32 +sVprosecutor +p1818 +I32 +sVhigh-speed +p1819 +I32 +sVintroducing +p1820 +I32 +sVearth-stuff +p1821 +I32 +sVafford +p1822 +I32 +sVabove-market +p1823 +I32 +sVapparent +p1824 +I32 +sVdrams +p1825 +I4 +sVrefrain +p1826 +I32 +sVapproving +p1827 +I32 +sVnon-family +p1828 +I32 +sVcharacterize +p1829 +I32 +sVappendix +p1830 +I32 +sVeverywhere +p1831 +I32 +sVovercharges +p1832 +I32 +sVtransfusions +p1833 +I32 +sVaccustomed +p1834 +I32 +sVeasiest +p1835 +I32 +sVbehalf +p1836 +I32 +sVmascot +p1837 +I32 +sVlogos +p1838 +I32 +sVvalued +p1839 +I100 +sVstettin +p1840 +I4 +sVchild-bearing +p1841 +I32 +sVcaseload +p1842 +I32 +sVoriginally +p1843 +I40 +sVfacilitating +p1844 +I32 +sVfatalistic +p1845 +I32 +sVprivy +p1846 +I32 +sVbelieves +p1847 +I96 +sVstrain +p1848 +I36 +sVimpasse +p1849 +I32 +sVprinting +p1850 +I36 +sVvalues +p1851 +I32 +sVslowness +p1852 +I32 +sVkendrick +p1853 +I4 +sVbelieved +p1854 +I32 +sVsuperstations +p1855 +I32 +sVtoll-free +p1856 +I34 +sVkamin +p1857 +I4 +sVvodavi +p1858 +I4 +sVdegenerate +p1859 +I32 +sVlocke +p1860 +I4 +sVdistracted +p1861 +I32 +sVawesome +p1862 +I32 +sVromanticism +p1863 +I32 +sVstipulation +p1864 +I32 +sVincremental +p1865 +I32 +sVn.y. +p1866 +I4 +sVunveiled +p1867 +I32 +sVallowed +p1868 +I32 +sVhard-to-please +p1869 +I32 +sVoffense +p1870 +I32 +sVstockbroker +p1871 +I32 +sVgalbraith +p1872 +I12 +sVviewers +p1873 +I38 +sVevidently +p1874 +I2 +sVmcgegan +p1875 +I4 +sVlistens +p1876 +I32 +sVbeaumont +p1877 +I4 +sVenderlin +p1878 +I4 +sVmonitoring +p1879 +I32 +sVwinter +p1880 +I46 +sVinability +p1881 +I32 +sVhowe +p1882 +I4 +sVunraveling +p1883 +I32 +sVcozy +p1884 +I32 +sVdivided +p1885 +I32 +sVvainly +p1886 +I32 +sVnon-farm +p1887 +I2 +sVimmune +p1888 +I32 +sVcontrasts +p1889 +I32 +sVs. +p1890 +I14 +sVelephant +p1891 +I32 +sVgrossed +p1892 +I32 +sVcoleman +p1893 +I14 +sVauto-company +p1894 +I32 +sVchillicothe +p1895 +I4 +sVpa.-based +p1896 +I4 +sVfive-year +p1897 +I32 +sVminicomputers +p1898 +I32 +sVedinburgh +p1899 +I4 +sVsnaps +p1900 +I32 +sVlaundry +p1901 +I32 +sVlandmark +p1902 +I32 +sVprovincial +p1903 +I32 +sVill-considered +p1904 +I32 +sVspot +p1905 +I36 +sVhigh-energy +p1906 +I32 +sVexpectation +p1907 +I32 +sVapplications +p1908 +I42 +sVexplored +p1909 +I32 +sVeproms +p1910 +I4 +sVdate +p1911 +I40 +sVsuch +p1912 +I34 +sVprides +p1913 +I32 +sVdata +p1914 +I46 +sVcodes +p1915 +I32 +sVharmon +p1916 +I4 +sVinsulated +p1917 +I32 +sVpulley +p1918 +I32 +sVstress +p1919 +I32 +sVnatural +p1920 +I44 +sVvarieties +p1921 +I32 +sVsectors +p1922 +I36 +sVinterest-sensitive +p1923 +I32 +sVconsequently +p1924 +I2 +sVwheelchair +p1925 +I32 +sVapplicant +p1926 +I32 +sVyielding +p1927 +I32 +sVhi-bred +p1928 +I4 +sVciba-geigy +p1929 +I4 +sVcastings +p1930 +I32 +sVtruck +p1931 +I36 +sVsm +p1932 +I8 +sVimnx +p1933 +I8 +sVsb +p1934 +I4 +sVtruce +p1935 +I32 +sVpulled +p1936 +I32 +sVregimen +p1937 +I32 +sVse +p1938 +I32 +sVpublish +p1939 +I32 +sVair-defense +p1940 +I32 +sVunsolicited +p1941 +I32 +sVbush +p1942 +I14 +sVinsurgency +p1943 +I32 +sVsell-off +p1944 +I32 +sVnon-ibm +p1945 +I32 +sVunacceptable +p1946 +I32 +sVkong +p1947 +I4 +sVkiplinger +p1948 +I4 +sVcourse +p1949 +I32 +sVyearn +p1950 +I32 +sVexperiments +p1951 +I32 +sVfasteners +p1952 +I32 +sVsupervised +p1953 +I32 +sVlybrand +p1954 +I4 +sVfrequents +p1955 +I32 +sVlegal-ethics +p1956 +I32 +sVboroughs +p1957 +I32 +sVtendency +p1958 +I32 +sVcolorado +p1959 +I6 +sVcaucasus +p1960 +I4 +sVloeb +p1961 +I4 +sVderive +p1962 +I32 +sVoverhaul +p1963 +I36 +sVhaughty +p1964 +I32 +sVinternationally +p1965 +I32 +sVimperishable +p1966 +I32 +sVlackluster +p1967 +I32 +sVjim +p1968 +I6 +sVtroubles +p1969 +I32 +sVsylvan +p1970 +I14 +sVaviv +p1971 +I4 +sVtort +p1972 +I32 +sVpractical-joking +p1973 +I32 +sVcreations +p1974 +I4 +sVsuspicion +p1975 +I32 +sVssc +p1976 +I6 +sVconstitutes +p1977 +I32 +sVantipathy +p1978 +I32 +sVsuspension +p1979 +I32 +sVtroubled +p1980 +I36 +sVdecades +p1981 +I36 +sVabusive +p1982 +I32 +sVpetition +p1983 +I32 +sVinconvenient +p1984 +I32 +sVdownsizing +p1985 +I32 +sVmodestly +p1986 +I32 +sVreaping +p1987 +I32 +sVstever +p1988 +I4 +sVretooled +p1989 +I32 +sVthereby +p1990 +I32 +sVcivilian +p1991 +I32 +sVsubordinates +p1992 +I32 +sVorigination +p1993 +I32 +sVbashful +p1994 +I32 +sVevacuation +p1995 +I32 +sVnation +p1996 +I36 +sVtomasson +p1997 +I12 +sVrecords +p1998 +I44 +sVsubsides +p1999 +I32 +sVcompelled +p2000 +I32 +sVdrilling +p2001 +I36 +sVsubscribers +p2002 +I32 +sVsymposium +p2003 +I32 +sVakron +p2004 +I12 +sVpinnacle +p2005 +I4 +sVtwilight +p2006 +I32 +sVsubordinated +p2007 +I32 +sVmatched +p2008 +I32 +sVr.k. +p2009 +I4 +sVclosed-end +p2010 +I32 +sVfreya +p2011 +I6 +sVkra +p2012 +I8 +sVhancock +p2013 +I8 +sVdidn +p2014 +I32 +sVrevert +p2015 +I32 +sVestablishing +p2016 +I36 +sVphenomenally +p2017 +I32 +sVfabian +p2018 +I8 +sVfsia +p2019 +I4 +sVbreach +p2020 +I32 +sVfanuc +p2021 +I4 +sVbowling +p2022 +I32 +sVbousquet-cadillac +p2023 +I4 +sVamnesty +p2024 +I2 +sVquarter +p2025 +I100 +sVrepaired +p2026 +I32 +sVworkman +p2027 +I36 +sVturtle +p2028 +I32 +sVkram +p2029 +I4 +sVstalling +p2030 +I32 +sVsquare +p2031 +I36 +sVhonduras +p2032 +I4 +sVtripling +p2033 +I32 +sVmajor-illness +p2034 +I4 +sVkeynesian +p2035 +I4 +sVrevised +p2036 +I36 +sVbovine +p2037 +I32 +sVremembrance +p2038 +I4 +sVoveraddiction +p2039 +I32 +sVsponsor +p2040 +I32 +sVentering +p2041 +I32 +sVkeyed +p2042 +I32 +sVplaintive +p2043 +I32 +sVsmall-scale +p2044 +I32 +sVcontainer +p2045 +I36 +sVkilpatrick +p2046 +I8 +sVdevaluing +p2047 +I32 +sVrabushka +p2048 +I12 +sVshored +p2049 +I32 +sVjapanese-designed +p2050 +I4 +sVbls +p2051 +I4 +sVlong-form +p2052 +I32 +sVbragg +p2053 +I12 +sVinvestigation +p2054 +I100 +sVcadillac +p2055 +I8 +sVsuggesting +p2056 +I32 +sVfourth-largest +p2057 +I32 +sVsquares +p2058 +I32 +sVchemically +p2059 +I32 +sVrecalculating +p2060 +I32 +sVmims +p2061 +I4 +sVcomplimented +p2062 +I32 +sVcurbs +p2063 +I36 +sVteradata +p2064 +I8 +sVsiege +p2065 +I32 +sVpieter +p2066 +I4 +sVmillion +p2067 +I100 +sVseventh +p2068 +I34 +sVpossibility +p2069 +I32 +sVquite +p2070 +I38 +sVquickie +p2071 +I32 +sVrecordings +p2072 +I32 +sVsees +p2073 +I100 +sVmime +p2074 +I32 +sVplea +p2075 +I36 +sVbumpy +p2076 +I40 +sVquits +p2077 +I4 +sVunnamed +p2078 +I32 +sVremainder +p2079 +I32 +sVglobe-trotting +p2080 +I32 +sVontario +p2081 +I4 +sVtraining +p2082 +I36 +sVdisguised +p2083 +I32 +sVcollapsing +p2084 +I32 +sVhamel +p2085 +I4 +sVwrong +p2086 +I36 +sVrouted +p2087 +I4 +sVchevy +p2088 +I4 +sVkathleen +p2089 +I4 +sVmassive +p2090 +I34 +sVrifadin +p2091 +I4 +sVpotentially +p2092 +I32 +sVroutes +p2093 +I32 +sVmisused +p2094 +I32 +sVplasminogen +p2095 +I32 +sVneglect +p2096 +I32 +sVreassess +p2097 +I32 +sVemotion +p2098 +I4 +sVgunshot +p2099 +I32 +sVretool +p2100 +I32 +sVsaving +p2101 +I32 +sVono +p2102 +I4 +sVreveals +p2103 +I32 +sVspoken +p2104 +I32 +sVclause +p2105 +I32 +sVpranksterism +p2106 +I32 +sVparksigns +p2107 +I4 +sVaristar +p2108 +I4 +sVparkinson +p2109 +I4 +sVone +p2110 +I46 +sVopec +p2111 +I4 +sVspecifically +p2112 +I42 +sVthumbed +p2113 +I32 +sVvote +p2114 +I36 +sVpotted +p2115 +I32 +sVopen +p2116 +I36 +sVdrebsky +p2117 +I4 +sVaffords +p2118 +I32 +sVmicrosemi +p2119 +I2 +sVcity +p2120 +I46 +sVstifles +p2121 +I32 +sVwrath +p2122 +I32 +sVinformation-driven +p2123 +I32 +sVrecoupment +p2124 +I32 +sVbite +p2125 +I32 +sVstructured +p2126 +I32 +sVcost-plus-fixed-fee +p2127 +I32 +sVbeer-industry +p2128 +I32 +sVindicate +p2129 +I36 +sVteacher +p2130 +I32 +sVmkt +p2131 +I4 +sVdraft +p2132 +I32 +sVbracher +p2133 +I12 +sVstuffed +p2134 +I32 +sVforeclose +p2135 +I32 +sVshoppers +p2136 +I32 +sVwalid +p2137 +I4 +sVstructures +p2138 +I32 +sVcite +p2139 +I32 +sVwilliams +p2140 +I12 +sVslashes +p2141 +I32 +sVneronian +p2142 +I4 +sVbeesley +p2143 +I12 +sVbridesmaids +p2144 +I32 +sVcherbourg +p2145 +I4 +sVinhalable +p2146 +I32 +sVfloppy +p2147 +I32 +sVreinterpreting +p2148 +I32 +sVfund-raisers +p2149 +I32 +sVproving +p2150 +I34 +sVmtbe +p2151 +I4 +sVs.c. +p2152 +I4 +sVridiculous +p2153 +I32 +sVslashed +p2154 +I32 +sVspecialists +p2155 +I32 +sVrepresenting +p2156 +I32 +sVnine-year +p2157 +I32 +sVcfps +p2158 +I4 +sVgovernment-guaranteed +p2159 +I32 +sVrobusta +p2160 +I4 +sVimpractical +p2161 +I32 +sVconn. +p2162 +I4 +sVdepressed +p2163 +I32 +sVrival +p2164 +I38 +sVfolly +p2165 +I32 +sVtourist-drawing +p2166 +I32 +sVfuture +p2167 +I36 +sVbrady +p2168 +I4 +sVsmelling +p2169 +I32 +sVcavalier +p2170 +I4 +sVfinancings +p2171 +I32 +sVfuturo +p2172 +I4 +sVrules-enforcing +p2173 +I32 +sVopponent +p2174 +I32 +sVrussia +p2175 +I4 +sVshakeup +p2176 +I32 +sVimplication +p2177 +I32 +sVprospect +p2178 +I32 +sVaddressing +p2179 +I34 +sVillness +p2180 +I32 +sVsao +p2181 +I4 +sVsan +p2182 +I12 +sVsam +p2183 +I12 +sVroyalties +p2184 +I32 +sVshipowners +p2185 +I32 +sVwheeler-dealers +p2186 +I2 +sVexcesses +p2187 +I32 +sVturned +p2188 +I32 +sVargument +p2189 +I32 +sVjewels +p2190 +I4 +sVsad +p2191 +I42 +sVauroras +p2192 +I4 +sVprestigious +p2193 +I32 +sVsay +p2194 +I100 +sVgene-splicing +p2195 +I32 +sVburied +p2196 +I34 +sVfinancier +p2197 +I36 +sVlurking +p2198 +I32 +sVhorsepower +p2199 +I32 +sVallen +p2200 +I12 +sVregards +p2201 +I32 +sVsaw +p2202 +I32 +sVsat +p2203 +I32 +sVfilm-making +p2204 +I32 +sVinches +p2205 +I32 +sVfashionable +p2206 +I32 +sVm-s-r +p2207 +I12 +sVaside +p2208 +I36 +sVzoo +p2209 +I32 +sVnote +p2210 +I106 +sVintends +p2211 +I32 +sVportents +p2212 +I32 +sVtraining-related +p2213 +I32 +sVtake +p2214 +I102 +sVsurfacing +p2215 +I32 +sVanti-dumping +p2216 +I42 +sVwanting +p2217 +I32 +sVcoincide +p2218 +I32 +sVencouraged +p2219 +I36 +sVhigh-technology +p2220 +I32 +sVrelaxed +p2221 +I32 +sVquick-reaction +p2222 +I32 +sVkong-based +p2223 +I4 +sVimperatives +p2224 +I32 +sVprinter +p2225 +I32 +sVmaneuvering +p2226 +I32 +sVt.ims +p2227 +I4 +sVopposite +p2228 +I32 +sVbuffer +p2229 +I32 +sVt3100 +p2230 +I4 +sVdiscerning +p2231 +I32 +sVknew +p2232 +I32 +sVmolecule +p2233 +I32 +sVfirestone +p2234 +I4 +sVinvestment-bank +p2235 +I64 +sVheterodox +p2236 +I32 +sVprinted +p2237 +I32 +sVdebtor-country +p2238 +I32 +sVremarks +p2239 +I32 +sVknowingly +p2240 +I32 +sVpages +p2241 +I32 +sVvoluntary +p2242 +I32 +sVaxp +p2243 +I12 +sVlabor-relations +p2244 +I32 +sVtouchy +p2245 +I32 +sVathletes +p2246 +I32 +sVaverage +p2247 +I46 +sVfarmer-borrowers +p2248 +I32 +sVinfections +p2249 +I32 +sVdrive +p2250 +I36 +sVwgr-am +p2251 +I4 +sVoccidental +p2252 +I2 +sVways +p2253 +I36 +sVbade +p2254 +I32 +sVbackdrop +p2255 +I32 +sVrefining +p2256 +I32 +sVmedium-duty +p2257 +I32 +sVlink +p2258 +I36 +sVlantern-lit +p2259 +I32 +sVsalt +p2260 +I44 +sVliquidity +p2261 +I32 +sVaffirmed +p2262 +I32 +sVlaws +p2263 +I100 +sVlulling +p2264 +I32 +sVwalking +p2265 +I34 +sVseekers +p2266 +I32 +sVsurplus +p2267 +I36 +sVunassailable +p2268 +I32 +sVcoughlin +p2269 +I8 +sVlotus +p2270 +I14 +sVdefinite +p2271 +I36 +sVmerit +p2272 +I32 +sVthurs +p2273 +I10 +sVgeorg +p2274 +I4 +sVbright +p2275 +I32 +sVaccommodations +p2276 +I32 +sVama +p2277 +I8 +sVbbc-brown +p2278 +I2 +sVclose-out +p2279 +I32 +sVscarce +p2280 +I32 +sVaggressive +p2281 +I32 +sVstay-over +p2282 +I32 +sVcalamari +p2283 +I32 +sVcommissars +p2284 +I32 +sVslot +p2285 +I8 +sVgutowski +p2286 +I4 +sVslow +p2287 +I32 +sVcriminals +p2288 +I32 +sVscion +p2289 +I8 +sVlinerboard +p2290 +I38 +sVnutshell +p2291 +I32 +sVcoaxing +p2292 +I32 +sVrobn +p2293 +I8 +sVtears +p2294 +I36 +sVgoing +p2295 +I32 +sVoversubscription +p2296 +I32 +sVequipped +p2297 +I32 +sVoutrage +p2298 +I32 +sVstaffer +p2299 +I32 +sVentreaties +p2300 +I32 +sVtarrant +p2301 +I2 +sVeuromarket +p2302 +I4 +sVcongressional +p2303 +I38 +sVdispute +p2304 +I36 +sVdresser +p2305 +I4 +sVguarded +p2306 +I32 +sVpolypropylene +p2307 +I32 +sVpsychiatrist +p2308 +I36 +sVoccupation +p2309 +I32 +sVassistant +p2310 +I36 +sVcondemning +p2311 +I32 +sVgazette +p2312 +I4 +sVfreezing +p2313 +I32 +sVcountered +p2314 +I32 +sVsimplistic +p2315 +I32 +sVoutlet +p2316 +I32 +sVthunderous +p2317 +I32 +sVawaiting +p2318 +I36 +sVmorse +p2319 +I14 +sVprime +p2320 +I38 +sVresource +p2321 +I36 +sVerich +p2322 +I8 +sVkeenly +p2323 +I32 +sVsettings +p2324 +I32 +sVcords +p2325 +I8 +sVhinges +p2326 +I32 +sVnolde +p2327 +I4 +sVsaliva +p2328 +I36 +sVholyoke +p2329 +I4 +sVroutinely +p2330 +I32 +sVworried +p2331 +I32 +sVfenders +p2332 +I32 +sVmutually +p2333 +I32 +sVscotch +p2334 +I4 +sVmarrel +p2335 +I4 +sVresins +p2336 +I32 +sVtherapies +p2337 +I32 +sVbombs +p2338 +I32 +sVliable +p2339 +I32 +sVworries +p2340 +I36 +sVuncover +p2341 +I32 +sVmarred +p2342 +I32 +sVwhere +p2343 +I38 +sVvision +p2344 +I32 +sVcih +p2345 +I4 +sVsheathed +p2346 +I32 +sVespn +p2347 +I6 +sVartistically +p2348 +I32 +sVraged +p2349 +I4 +sVkeyboard +p2350 +I32 +sVmifflin +p2351 +I4 +sVportec +p2352 +I8 +sVgangster +p2353 +I32 +sVmore-extensive +p2354 +I32 +sVtop-level +p2355 +I32 +sVsurgery +p2356 +I32 +sVaroused +p2357 +I32 +sVrewarded +p2358 +I32 +sVconstraints +p2359 +I32 +sVmecca +p2360 +I32 +sVmisappropriated +p2361 +I32 +sVintegon +p2362 +I6 +sVcompounds +p2363 +I32 +sVjumped +p2364 +I96 +sVheileman +p2365 +I8 +sVrepresentatives +p2366 +I32 +sVsponsorship +p2367 +I34 +sVdormitory +p2368 +I32 +sVcalan +p2369 +I4 +sVbureau +p2370 +I36 +sVconsumer-electronics +p2371 +I32 +sVaffecting +p2372 +I32 +sVenjoys +p2373 +I36 +sVpalates +p2374 +I32 +sVmolds +p2375 +I32 +sVdecks +p2376 +I32 +sVinappropriately +p2377 +I32 +sVpunta +p2378 +I14 +sVpanache +p2379 +I2 +sVjobs +p2380 +I36 +sVuk +p2381 +I4 +sVmarvin +p2382 +I6 +sVscreen +p2383 +I36 +sVcephalexin +p2384 +I6 +sVaryans +p2385 +I4 +sVdome +p2386 +I2 +sVsupermarket +p2387 +I36 +sVrevealed +p2388 +I32 +sVclayton +p2389 +I4 +sVrecitation +p2390 +I32 +sVvolcker +p2391 +I12 +sVawards +p2392 +I32 +sVjets +p2393 +I32 +sVspark +p2394 +I32 +sVsuppressed +p2395 +I32 +sVundermine +p2396 +I32 +sVjett +p2397 +I12 +sVconcentrated +p2398 +I32 +sVoust +p2399 +I32 +sVquicksands +p2400 +I32 +sVcongregations +p2401 +I32 +sVspadaro +p2402 +I8 +sVsatellite-beamed +p2403 +I32 +sVburdines +p2404 +I4 +sVmany +p2405 +I46 +sVdemento +p2406 +I8 +sVloewi +p2407 +I4 +sVdeduction +p2408 +I32 +sVs +p2409 +I36 +sVwci +p2410 +I8 +sVworkplace +p2411 +I32 +sVnatomas +p2412 +I4 +sVconcentrates +p2413 +I32 +sVexpression +p2414 +I32 +sVvbnd +p2415 +I4 +sVmann +p2416 +I12 +sVnow-defunct +p2417 +I32 +sVguts +p2418 +I32 +sVmoderate-priced +p2419 +I32 +sVacute-care +p2420 +I32 +sVtaxi-bureau +p2421 +I32 +sVdonoghue +p2422 +I4 +sVimmuno-modulator +p2423 +I32 +sVdark-skinned +p2424 +I32 +sVfurthered +p2425 +I32 +sVhomosexuality +p2426 +I32 +sVcomeback +p2427 +I36 +sVbible +p2428 +I4 +sVmarquette +p2429 +I4 +sValluringly +p2430 +I32 +sVcokes +p2431 +I4 +sVconsiders +p2432 +I96 +sVboat +p2433 +I36 +sVnationalist +p2434 +I32 +sVsurvivors +p2435 +I32 +sVcombines +p2436 +I36 +sVcollider +p2437 +I4 +sVcounsels +p2438 +I32 +sVpre-trial +p2439 +I32 +sVstretch +p2440 +I32 +sVwest +p2441 +I46 +sVlocally +p2442 +I32 +sVeasier-to-use +p2443 +I32 +sVvacation +p2444 +I32 +sVconcede +p2445 +I32 +sVhutton +p2446 +I14 +sVraging +p2447 +I32 +sVlinkenauger +p2448 +I8 +sVcombined +p2449 +I34 +sVmotives +p2450 +I32 +sVstripped +p2451 +I32 +sVdaylong +p2452 +I32 +sVreflex +p2453 +I32 +sVluff +p2454 +I32 +sVhilarity +p2455 +I32 +sVpannill +p2456 +I4 +sVwants +p2457 +I96 +sVpratically +p2458 +I32 +sVenable +p2459 +I32 +sVlanes +p2460 +I32 +sVstarters +p2461 +I32 +sVunsafe +p2462 +I32 +sVthousand +p2463 +I32 +sVformed +p2464 +I32 +sVreaching +p2465 +I32 +sVcurbing +p2466 +I32 +sVflurry +p2467 +I32 +sVrekindled +p2468 +I32 +sVobserve +p2469 +I32 +sVabject +p2470 +I32 +sVlibel +p2471 +I32 +sVformer +p2472 +I110 +sVpertained +p2473 +I32 +sVmissions +p2474 +I32 +sVrunnin +p2475 +I4 +sVisabella +p2476 +I4 +sVjuveniles +p2477 +I32 +sVdistressing +p2478 +I32 +sVconsultant +p2479 +I32 +sVreebok +p2480 +I14 +sVpolls +p2481 +I42 +sVsingle +p2482 +I32 +sVend-use +p2483 +I32 +sVintimately +p2484 +I32 +sVinvoking +p2485 +I32 +sVhardymon +p2486 +I8 +sVskimming +p2487 +I32 +sVcref +p2488 +I14 +sVpolicies +p2489 +I36 +sVpennzoil +p2490 +I14 +sVnewspaper +p2491 +I32 +sVsituation +p2492 +I36 +sVpleasurable +p2493 +I32 +sVpoliakoff +p2494 +I12 +sVspotlight +p2495 +I32 +sVgameshow +p2496 +I8 +sVlogicon +p2497 +I4 +sVgintel +p2498 +I12 +sVprevalence +p2499 +I32 +sVwholesaler +p2500 +I32 +sVblas +p2501 +I4 +sVe.f.ihutton +p2502 +I4 +sVcanon +p2503 +I14 +sVhills +p2504 +I36 +sVbros +p2505 +I4 +sVjohnsons +p2506 +I4 +sVsuperconducting +p2507 +I4 +sVstanch +p2508 +I32 +sVwove +p2509 +I32 +sVboomlet +p2510 +I32 +sVatlasair +p2511 +I4 +sVtechnology +p2512 +I110 +sVfame +p2513 +I32 +sVtmc +p2514 +I8 +sVdebilitating +p2515 +I32 +sVmissiles +p2516 +I36 +sVverified +p2517 +I32 +sVthreatens +p2518 +I32 +sVperpetually +p2519 +I32 +sVsubstitution +p2520 +I32 +sVrespite +p2521 +I32 +sVclimber +p2522 +I32 +sVhoneywell +p2523 +I6 +sVunderestimate +p2524 +I32 +sVotto +p2525 +I4 +sVthree-cent +p2526 +I32 +sVdamon +p2527 +I4 +sVrekindling +p2528 +I32 +sVludwig +p2529 +I4 +sVworkout +p2530 +I32 +sVcramming +p2531 +I32 +sVsterling +p2532 +I36 +sVlodging +p2533 +I32 +sVmanagements +p2534 +I32 +sVedged +p2535 +I32 +sVhills-based +p2536 +I4 +sVoceanographic +p2537 +I32 +sVsingapore +p2538 +I14 +sVboosted +p2539 +I96 +sViron-bending +p2540 +I32 +sVstructurally +p2541 +I32 +sVtransmutes +p2542 +I32 +sVwps +p2543 +I8 +sVallocation +p2544 +I2 +sVgraft-vs.-host +p2545 +I32 +sVharris +p2546 +I14 +sVwired +p2547 +I32 +sVenrico +p2548 +I4 +sVsenator +p2549 +I104 +sVtariff +p2550 +I32 +sVrecapture +p2551 +I32 +sVpsychiatrists +p2552 +I32 +sVtaffeta +p2553 +I32 +sVcosta +p2554 +I12 +sVrain +p2555 +I32 +sVpetro-canada +p2556 +I4 +sVself-tender +p2557 +I32 +sVballooning +p2558 +I40 +sVrenunciation +p2559 +I32 +sVunderwritings +p2560 +I32 +sVone-cent-a-share +p2561 +I32 +sVcustomized +p2562 +I32 +sVovertime +p2563 +I32 +sVcosts +p2564 +I38 +sVnonunionized +p2565 +I32 +sVproduction-quota +p2566 +I32 +sVsunnyvale +p2567 +I12 +sVtrains +p2568 +I32 +sVloosens +p2569 +I32 +sVlegal-trade +p2570 +I32 +sVpersistently +p2571 +I32 +sVscholarship +p2572 +I32 +sVgdp +p2573 +I4 +sVsummer +p2574 +I36 +sVmanifold +p2575 +I32 +sVrosenbaum +p2576 +I4 +sVbeing +p2577 +I34 +sVcohesive +p2578 +I32 +sVoffice-space +p2579 +I32 +sVrest +p2580 +I36 +sVjudiciously +p2581 +I32 +sVschools +p2582 +I36 +sVrubens +p2583 +I4 +sVfateful +p2584 +I32 +sVinvalid +p2585 +I32 +sVjung/brannen +p2586 +I4 +sVn.j.-based +p2587 +I4 +sVcaramels +p2588 +I32 +sVintensifying +p2589 +I32 +sVrobins +p2590 +I14 +sVthree-division +p2591 +I32 +sVweekly +p2592 +I36 +sVblondes +p2593 +I32 +sVmobile-home +p2594 +I32 +sVpillar +p2595 +I32 +sVgenerator +p2596 +I32 +sVadjuvant +p2597 +I32 +sVemily +p2598 +I4 +sVundeveloped +p2599 +I32 +sVbriefings +p2600 +I32 +sVattache +p2601 +I32 +sVoc +p2602 +I4 +sVhereabouts +p2603 +I32 +sVeisenhower +p2604 +I4 +sVinstrument +p2605 +I32 +sVcontesting +p2606 +I32 +sVpriori +p2607 +I32 +sValready-crowded +p2608 +I32 +sVsaddened +p2609 +I32 +sVghostly +p2610 +I32 +sVprominently +p2611 +I32 +sVstructural +p2612 +I32 +sVfamily-planning +p2613 +I32 +sVskies +p2614 +I32 +sVconventions +p2615 +I32 +sVdefection +p2616 +I32 +sVaspects +p2617 +I34 +sVaround +p2618 +I44 +sVfrancaise +p2619 +I8 +sVpor +p2620 +I4 +sVexcreta +p2621 +I32 +sVsums +p2622 +I32 +sVunveil +p2623 +I32 +sVdark +p2624 +I32 +sVcujo +p2625 +I4 +sVsnarl +p2626 +I32 +sVtraffic +p2627 +I36 +sVpreference +p2628 +I32 +sVacronyms +p2629 +I32 +sVscurrying +p2630 +I32 +sVvalvano +p2631 +I4 +sVworld +p2632 +I46 +sVpostal +p2633 +I32 +sVredistributing +p2634 +I32 +sVbabylonian +p2635 +I2 +sVclan +p2636 +I36 +sVafforded +p2637 +I32 +sVapple +p2638 +I6 +sVintel +p2639 +I12 +sVheftier +p2640 +I32 +sVclad +p2641 +I32 +sVsalinas +p2642 +I4 +sVundermining +p2643 +I32 +sVsingle-b-3 +p2644 +I32 +sVdirect-mail +p2645 +I32 +sVwhite-haired +p2646 +I32 +sVfull-scale +p2647 +I32 +sVoresman +p2648 +I8 +sVclay +p2649 +I6 +sVbeverly +p2650 +I12 +sVmoratorium +p2651 +I32 +sVauditorium +p2652 +I36 +sVbankruptcies +p2653 +I40 +sVsatisfactory +p2654 +I32 +sVsuperintendent +p2655 +I32 +sVtvx +p2656 +I4 +sVfives +p2657 +I32 +sVbarton +p2658 +I12 +sVconditional +p2659 +I32 +sVlebanon +p2660 +I4 +sVsupplementary +p2661 +I32 +sVcelebrity-laden +p2662 +I32 +sVbermingham +p2663 +I4 +sVpervading +p2664 +I32 +sVkoester +p2665 +I8 +sVdiving +p2666 +I34 +sVracial +p2667 +I32 +sVgrounded +p2668 +I32 +sVthinks +p2669 +I32 +sVreigning +p2670 +I32 +sVbelched +p2671 +I32 +sVscandals +p2672 +I44 +sVscholarships +p2673 +I32 +sVaccidental +p2674 +I32 +sVinstability +p2675 +I32 +sVbaylor +p2676 +I4 +sVf-100 +p2677 +I4 +sVtube +p2678 +I36 +sVfining +p2679 +I32 +sVsearing +p2680 +I32 +sVmoslem +p2681 +I6 +sVeyerman +p2682 +I12 +sVfringes +p2683 +I32 +sVledyard +p2684 +I4 +sVddc +p2685 +I4 +sVmosley +p2686 +I4 +sVfrancois +p2687 +I12 +sVinsiders +p2688 +I32 +sVrestoring +p2689 +I32 +sVleaned +p2690 +I32 +sVcephalosporin +p2691 +I32 +sVvacillation +p2692 +I64 +sVbiased +p2693 +I32 +sVsquabble +p2694 +I32 +sVtransformers +p2695 +I4 +sVscientific +p2696 +I36 +sVpower +p2697 +I46 +sVintimate +p2698 +I36 +sVsalamon +p2699 +I4 +sVindustrialized +p2700 +I32 +sVmpi +p2701 +I4 +sVsprung +p2702 +I32 +sVwindfalls +p2703 +I32 +sVoliver +p2704 +I14 +sVinstructing +p2705 +I32 +sVratios +p2706 +I32 +sVthrowback +p2707 +I32 +sVdispositions +p2708 +I32 +sVinflation-adjusted +p2709 +I32 +sVinfancy +p2710 +I32 +sVbona +p2711 +I32 +sVacc +p2712 +I4 +sVrenault +p2713 +I8 +sVstone +p2714 +I46 +sVace +p2715 +I32 +sVpackage +p2716 +I36 +sVswarms +p2717 +I32 +sVindustry +p2718 +I110 +sVnitze +p2719 +I12 +sVfavorite +p2720 +I32 +sVslender +p2721 +I32 +sVcro-magnons +p2722 +I4 +sVforstmann +p2723 +I4 +sVabalone-processing +p2724 +I32 +sVaccob +p2725 +I8 +sVneighbor +p2726 +I32 +sVact +p2727 +I36 +sVjohnston +p2728 +I12 +sVacy +p2729 +I8 +sVluck +p2730 +I36 +sVtaras +p2731 +I4 +sVskew +p2732 +I32 +sVstony +p2733 +I2 +sVberger +p2734 +I4 +sVtakeda +p2735 +I4 +sVcurling +p2736 +I32 +sVburning +p2737 +I32 +sVimprovise +p2738 +I32 +sVbrueghel +p2739 +I4 +sVimage +p2740 +I32 +sVhomeland +p2741 +I32 +sVpolicy-coordination +p2742 +I32 +sVehrman +p2743 +I4 +sVcustomary +p2744 +I32 +sVhomeless +p2745 +I32 +sVparties +p2746 +I36 +sVbargain-basement +p2747 +I32 +sVaccumulated +p2748 +I32 +sVconceptually +p2749 +I32 +sVt.fcy +p2750 +I4 +sVimpressive +p2751 +I32 +sVarctic +p2752 +I4 +sVcensured +p2753 +I32 +sVcoloreds +p2754 +I32 +sVhew +p2755 +I4 +sVher +p2756 +I34 +sVhes +p2757 +I8 +sVgleam +p2758 +I32 +sVco-plaintiffs +p2759 +I2 +sVrepetitive +p2760 +I32 +sVhex +p2761 +I12 +sVphiladelphia +p2762 +I12 +sVsides +p2763 +I36 +sVsewage-treatment +p2764 +I32 +sVharpsichord +p2765 +I32 +sVfutile +p2766 +I32 +sVsealed +p2767 +I32 +sVbrazilian +p2768 +I14 +sVslopes +p2769 +I32 +sVbubble +p2770 +I32 +sVburgess +p2771 +I4 +sVinterfaith +p2772 +I4 +sVrecommends +p2773 +I32 +sVemergence +p2774 +I32 +sVcomplete +p2775 +I32 +sVwits +p2776 +I32 +sVtone +p2777 +I40 +sVprintemps +p2778 +I6 +sVdangers +p2779 +I32 +sVtailored +p2780 +I32 +sVsocietal +p2781 +I32 +sVstoddard +p2782 +I14 +sVbeginners +p2783 +I4 +sVdeterrence +p2784 +I32 +sVplunking +p2785 +I32 +sVsurvived +p2786 +I32 +sVcoups +p2787 +I32 +sVelimination +p2788 +I32 +sVunreliable +p2789 +I32 +sVmice +p2790 +I36 +sVskins +p2791 +I32 +sVwith +p2792 +I110 +sVescalates +p2793 +I32 +sVbuying +p2794 +I44 +sVhandsome +p2795 +I32 +sVabused +p2796 +I32 +sVpull +p2797 +I32 +sVrush +p2798 +I32 +sVoctober +p2799 +I4 +sVu.s.-italian +p2800 +I4 +sVnaming +p2801 +I36 +sVmonopoly +p2802 +I32 +sVhooray +p2803 +I2 +sVunveils +p2804 +I12 +sVwelton +p2805 +I4 +sVcyclops +p2806 +I14 +sVdirty +p2807 +I32 +sVabuses +p2808 +I32 +sVdependents +p2809 +I32 +sVpolitically +p2810 +I32 +sVadvantage +p2811 +I32 +sVpulp +p2812 +I40 +sVtouchstone +p2813 +I32 +sVregimes +p2814 +I32 +sVdetailed +p2815 +I32 +sVgone +p2816 +I36 +sVuic +p2817 +I4 +sVcarver +p2818 +I32 +sVad +p2819 +I34 +sVag +p2820 +I12 +sVexhausted +p2821 +I32 +sVcertain +p2822 +I44 +sVamdec +p2823 +I4 +sVam +p2824 +I38 +sVal +p2825 +I6 +sVwatches +p2826 +I32 +sVan +p2827 +I46 +sVbehest +p2828 +I32 +sVas +p2829 +I110 +sVar +p2830 +I4 +sVassociating +p2831 +I32 +sVat +p2832 +I110 +sVfollow-up +p2833 +I32 +sVwalks +p2834 +I32 +sVax +p2835 +I32 +sVtranquil +p2836 +I32 +sVamused +p2837 +I32 +sVviewpoint +p2838 +I40 +sVdawn +p2839 +I32 +sVcream +p2840 +I32 +sVga.-based +p2841 +I4 +sVecdysiast +p2842 +I32 +sVnomura +p2843 +I4 +sVmoniker +p2844 +I32 +sVideally +p2845 +I34 +sVdrafts +p2846 +I32 +sVbored +p2847 +I32 +sVcoal-burning +p2848 +I32 +sVshortages +p2849 +I32 +sVsanguine +p2850 +I32 +sVwheaton +p2851 +I4 +sVvocational +p2852 +I32 +sVgraduate +p2853 +I36 +sVmaloof +p2854 +I4 +sVtight +p2855 +I32 +sVbeverage +p2856 +I36 +sVmultiple-unit +p2857 +I32 +sVberisford +p2858 +I4 +sVangola +p2859 +I4 +sVpollutants +p2860 +I32 +sVsubjecting +p2861 +I32 +sVdisgraceful +p2862 +I32 +sVconjectures +p2863 +I32 +sVaction-forcing +p2864 +I32 +sVindemnify +p2865 +I32 +sVpincham +p2866 +I4 +sVcongress +p2867 +I46 +sVrefunded +p2868 +I32 +sVcombipress +p2869 +I6 +sVaccosted +p2870 +I32 +sVmerchants +p2871 +I36 +sVseriousness +p2872 +I32 +sVherbs +p2873 +I32 +sVnissan +p2874 +I8 +sVangiographics +p2875 +I32 +sVterry +p2876 +I4 +sVwaterhouse +p2877 +I4 +sVcheckoff +p2878 +I4 +sVresell +p2879 +I32 +sVdeadline +p2880 +I32 +sVfreely +p2881 +I32 +sVcph +p2882 +I4 +sVobservers +p2883 +I32 +sVdisdained +p2884 +I32 +sVomnibus +p2885 +I32 +sVsobbing +p2886 +I32 +sVtricks +p2887 +I32 +sVbullishness +p2888 +I32 +sVmask +p2889 +I32 +sVclowning +p2890 +I32 +sVraphael +p2891 +I4 +sVdetrick +p2892 +I4 +sVmimic +p2893 +I32 +sVmass +p2894 +I36 +sVnelson +p2895 +I12 +sVfour-story-tall +p2896 +I32 +sVcpq +p2897 +I12 +sVsensibility +p2898 +I32 +sVcpt +p2899 +I6 +sVoriginal +p2900 +I32 +sVlegislatures +p2901 +I32 +sVmasx +p2902 +I4 +sVaxles +p2903 +I32 +sVinfluenza +p2904 +I32 +sVconsider +p2905 +I34 +sVconsciences +p2906 +I32 +sVpetrofina +p2907 +I4 +sVcaused +p2908 +I32 +sVinstincts +p2909 +I32 +sVceramic +p2910 +I32 +sVsmr +p2911 +I4 +sVmnh +p2912 +I8 +sVrecapturing +p2913 +I32 +sVmodernizing +p2914 +I32 +sVrecyclers +p2915 +I32 +sVrecycled +p2916 +I32 +sVrestated +p2917 +I32 +sVwelfare +p2918 +I32 +sVjason +p2919 +I2 +sVmnd +p2920 +I4 +sVsubjects +p2921 +I32 +sVcauses +p2922 +I32 +sVimproperly +p2923 +I36 +sVparticles +p2924 +I32 +sVandrea +p2925 +I4 +sVcaveats +p2926 +I32 +sVhunting +p2927 +I32 +sVtv +p2928 +I12 +sVopera-comique +p2929 +I4 +sVtt +p2930 +I8 +sVillustrates +p2931 +I32 +sVlaughing +p2932 +I32 +sVriots +p2933 +I32 +sVto +p2934 +I126 +sVtl +p2935 +I4 +sVdetroit-based +p2936 +I4 +sVscratch +p2937 +I8 +sVmini-recession +p2938 +I32 +sVpremeditation +p2939 +I32 +sVmidwest +p2940 +I4 +sVschwartzman +p2941 +I4 +sVnorm +p2942 +I32 +sVghana +p2943 +I4 +sVpaying +p2944 +I36 +sVgilgore +p2945 +I12 +sVcalif. +p2946 +I4 +sVappointment +p2947 +I32 +sVreturned +p2948 +I32 +sVpuzzled +p2949 +I32 +sVmyself +p2950 +I32 +sVsaved +p2951 +I32 +sVpeace-of-mind +p2952 +I32 +sVpuzzles +p2953 +I32 +sVblockade +p2954 +I36 +sVtrillions +p2955 +I32 +sVrevolving +p2956 +I32 +sVexisting +p2957 +I32 +sVcondition +p2958 +I32 +sVoutnumbering +p2959 +I32 +sVillustrated +p2960 +I32 +sVmoines +p2961 +I4 +sVhooking +p2962 +I32 +sVcable +p2963 +I46 +sVaccompanying +p2964 +I32 +sVshenanigans +p2965 +I32 +sVvenezuela +p2966 +I4 +sVlaying +p2967 +I32 +sVjoined +p2968 +I32 +sVlarge +p2969 +I36 +sVboozer +p2970 +I32 +sVsand +p2971 +I32 +sVchoreographic +p2972 +I32 +sVtong +p2973 +I4 +sVharry +p2974 +I6 +sVsmall +p2975 +I36 +sVmount +p2976 +I36 +sVsupersaver +p2977 +I32 +sVmaggie +p2978 +I4 +sVmishima +p2979 +I4 +sVquicker +p2980 +I32 +sVantibiotic +p2981 +I32 +sVbinlc +p2982 +I8 +sVpenalties +p2983 +I36 +sVpaso +p2984 +I4 +sVllsi +p2985 +I4 +sVhasbro +p2986 +I4 +sVpast +p2987 +I38 +sVhealey +p2988 +I4 +sVluanda +p2989 +I12 +sVdisplays +p2990 +I32 +sVpass +p2991 +I32 +sVassaults +p2992 +I32 +sVinvestment +p2993 +I102 +sVhandicapped +p2994 +I32 +sVrichard +p2995 +I14 +sVclock +p2996 +I32 +sVforestall +p2997 +I32 +sVpoisonous +p2998 +I32 +sVprevailed +p2999 +I32 +sVschumer +p3000 +I4 +sVscientists +p3001 +I38 +sVromualdez +p3002 +I4 +sVsteinberg +p3003 +I4 +sVnurse +p3004 +I36 +sVmicrochip +p3005 +I32 +sVmethod +p3006 +I32 +sVcontrast +p3007 +I32 +sVrevealing +p3008 +I32 +sVhasn +p3009 +I98 +sVfull +p3010 +I44 +sVcarlucci +p3011 +I4 +sVscuttled +p3012 +I32 +sVsport-fishing +p3013 +I32 +sVreplaceable +p3014 +I32 +sVlobbyist +p3015 +I32 +sVleaping +p3016 +I32 +sVjaruzelski +p3017 +I4 +sVfugitive +p3018 +I32 +sVhours +p3019 +I32 +sVciticorp +p3020 +I6 +sVvacations +p3021 +I34 +sVpickets +p3022 +I32 +sVmckenzie +p3023 +I12 +sVcivilians +p3024 +I32 +sVconcluding +p3025 +I32 +sVgraves +p3026 +I12 +sVnovember +p3027 +I4 +sVwhammy +p3028 +I32 +sVshrieks +p3029 +I32 +sVsherwood +p3030 +I6 +sVtlr +p3031 +I4 +sVallergens +p3032 +I32 +sVmiscreants +p3033 +I32 +sVlight-skinned +p3034 +I32 +sVthymidine +p3035 +I32 +sVmarcheschi +p3036 +I12 +sVsemiconductor-equipment +p3037 +I32 +sVintroductory +p3038 +I32 +sVturkish +p3039 +I4 +sVexperience +p3040 +I32 +sVanthropologists +p3041 +I32 +sVprior +p3042 +I106 +sVinfrequently +p3043 +I36 +sVperiodic +p3044 +I32 +sVsocial +p3045 +I38 +sVaction +p3046 +I110 +sVskepticism +p3047 +I32 +sVhouse-backed +p3048 +I4 +sVsmuggle +p3049 +I32 +sVwarrant +p3050 +I96 +sVvic +p3051 +I8 +sVtax-free +p3052 +I32 +sVvia +p3053 +I104 +sVfollowed +p3054 +I96 +sVretroactive +p3055 +I32 +sVvie +p3056 +I32 +sVenactment +p3057 +I32 +sVvin +p3058 +I4 +sVlandfill +p3059 +I32 +sVpurveyors +p3060 +I32 +sVa.t. +p3061 +I4 +sVi`ve +p3062 +I4 +sVfull-sized +p3063 +I32 +sVcoercion +p3064 +I32 +sVmistress +p3065 +I32 +sVselect +p3066 +I32 +sVhart-dyke +p3067 +I4 +sVintensive +p3068 +I32 +sVsilva +p3069 +I12 +sVattendance +p3070 +I32 +sVvlsi +p3071 +I4 +sVtrips +p3072 +I32 +sVobjectives +p3073 +I32 +sVoligopoly +p3074 +I32 +sVpetroleum +p3075 +I44 +sVworkaday +p3076 +I32 +sVwines +p3077 +I32 +sVcornerstone +p3078 +I32 +sVbigness +p3079 +I4 +sVakshay +p3080 +I2 +sVwavering +p3081 +I32 +sVpitching +p3082 +I32 +sVsmoot-hawley +p3083 +I4 +sVdefying +p3084 +I32 +sVamassing +p3085 +I32 +sVmore +p3086 +I110 +sVteen +p3087 +I32 +sVcontinuing-education +p3088 +I32 +sVdoor +p3089 +I32 +sVinitiated +p3090 +I32 +sVsubstances +p3091 +I32 +sVstrange +p3092 +I32 +sVtampering +p3093 +I32 +sVcompany +p3094 +I110 +sVallied-signal +p3095 +I4 +sVcorrected +p3096 +I32 +sVemission +p3097 +I32 +sVbig-name +p3098 +I32 +sVdrug-enforcement +p3099 +I32 +sVtested +p3100 +I32 +sVt-word +p3101 +I4 +sVcasino-hotel +p3102 +I32 +sVpandair +p3103 +I4 +sVnonviolent +p3104 +I32 +sVfoundations +p3105 +I32 +sVobjections +p3106 +I32 +sVcommander +p3107 +I32 +sVadministrators +p3108 +I48 +sVbedford +p3109 +I12 +sVkeeping +p3110 +I38 +sVfatal +p3111 +I32 +sVlawrenceville +p3112 +I8 +sVdisplaced +p3113 +I32 +sVscience +p3114 +I36 +sVmalt +p3115 +I32 +sVshelves +p3116 +I32 +sVindustrialists +p3117 +I96 +sVinstalling +p3118 +I32 +sVpest-resistant +p3119 +I32 +sVbomber +p3120 +I32 +sVmall +p3121 +I32 +sVsent +p3122 +I32 +sVmorgan +p3123 +I14 +sVlearn +p3124 +I32 +sVdeductibility +p3125 +I32 +sVcentre +p3126 +I4 +sVmale +p3127 +I32 +sVscramble +p3128 +I4 +sVbeautiful +p3129 +I36 +sVvli +p3130 +I14 +sVspite +p3131 +I32 +sVprompt +p3132 +I32 +sVmemoirs +p3133 +I4 +sVstated +p3134 +I32 +sVgoldman-kidder +p3135 +I4 +sVcieply +p3136 +I4 +sVcampsite +p3137 +I32 +sVkimberly-clark +p3138 +I4 +sVsuggestions +p3139 +I32 +sVaccept +p3140 +I32 +sVstates +p3141 +I46 +sVoverbuilding +p3142 +I32 +sVtough-talking +p3143 +I32 +sVfiercely +p3144 +I32 +sVlibrettist +p3145 +I32 +sVjug +p3146 +I4 +sVsense +p3147 +I32 +sVhigh-performance +p3148 +I32 +sVgallon +p3149 +I32 +sVupjohn +p3150 +I14 +sVmicrochips +p3151 +I40 +sVdress +p3152 +I32 +sVsikh +p3153 +I6 +sVhuge +p3154 +I32 +sVspurgeon +p3155 +I8 +sVtorture +p3156 +I32 +sVequities +p3157 +I36 +sVgannett +p3158 +I4 +sVtakeover-trading +p3159 +I32 +sVaffiliates-led +p3160 +I4 +sVdismissed +p3161 +I32 +sVdeal-making +p3162 +I32 +sVtransfers +p3163 +I96 +sVmusicians +p3164 +I32 +sVshorts +p3165 +I32 +sVearnings +p3166 +I46 +sVjustin +p3167 +I4 +sVrelinquished +p3168 +I32 +sVcreature +p3169 +I32 +sVwaved +p3170 +I32 +sVfreddie +p3171 +I14 +sVplant +p3172 +I108 +sVsaint +p3173 +I14 +sVplans +p3174 +I110 +sVspartacus +p3175 +I4 +sVnotre +p3176 +I4 +sVperrin +p3177 +I4 +sVvariant +p3178 +I32 +sVtreatments +p3179 +I32 +sVentrepreneurship +p3180 +I32 +sVcolorado-brewed +p3181 +I4 +sVplane +p3182 +I32 +sVdirector +p3183 +I102 +sg149 +I10 +sVhovers +p3184 +I32 +sVpleaded +p3185 +I96 +sVlow-margin +p3186 +I32 +sVauthentic +p3187 +I32 +sVmalevolent +p3188 +I32 +sVacquisitions +p3189 +I38 +sVtoppped +p3190 +I4 +sVrefuse +p3191 +I32 +sVorganization +p3192 +I36 +sVpalmolive +p3193 +I4 +sVaids-related +p3194 +I4 +sVcl +p3195 +I8 +sVregister +p3196 +I36 +sVdjango +p3197 +I4 +sVindebtedness +p3198 +I32 +sVbroadcasting +p3199 +I38 +sVpredatory +p3200 +I32 +sVspeeds +p3201 +I32 +sVfundamental +p3202 +I32 +sValphabet +p3203 +I32 +sVadorjan +p3204 +I8 +sVlong-term-gain +p3205 +I32 +sVgeographic +p3206 +I32 +sVabf +p3207 +I8 +sVreplied +p3208 +I32 +sVpassages +p3209 +I32 +sVmexican +p3210 +I6 +sVleigh +p3211 +I12 +sVcrimps +p3212 +I32 +sVbowl +p3213 +I4 +sVmid-to-upper +p3214 +I32 +sVitc +p3215 +I4 +sVmousse +p3216 +I32 +sVtrade +p3217 +I108 +sVwide-ranging +p3218 +I32 +sVresorts +p3219 +I44 +sVattitude +p3220 +I32 +sVpaper +p3221 +I38 +sVbrio +p3222 +I8 +sVsigns +p3223 +I36 +sVbroadway +p3224 +I4 +sVdruse +p3225 +I4 +sVdata-reading +p3226 +I32 +sVkilns +p3227 +I32 +sVits +p3228 +I46 +sVroots +p3229 +I32 +sVbbdo +p3230 +I4 +sVlaced +p3231 +I32 +sVrapidly +p3232 +I32 +sVsumitomo +p3233 +I4 +sVfiguring +p3234 +I32 +sVgerald +p3235 +I6 +sVcaesars +p3236 +I14 +sVdeeds +p3237 +I32 +sVwipe +p3238 +I32 +sVbendix +p3239 +I6 +sVmother-of-pearl +p3240 +I32 +sVbypass +p3241 +I32 +sVsymptoms +p3242 +I32 +sVisaac +p3243 +I4 +sVfollowers +p3244 +I32 +sVsauce +p3245 +I32 +sVmulders +p3246 +I12 +sVally +p3247 +I32 +sVwry +p3248 +I32 +sVtentatively +p3249 +I96 +sVlowell +p3250 +I12 +sVskipped +p3251 +I32 +sVabandons +p3252 +I32 +sVentire +p3253 +I32 +sVpre-agreement +p3254 +I32 +sVpropose +p3255 +I44 +sVputka +p3256 +I4 +sVretaliated +p3257 +I32 +sVb.f. +p3258 +I4 +sVdaffynition +p3259 +I8 +sg159 +I14 +sVoutlawing +p3260 +I32 +sVst +p3261 +I4 +sVmisuse +p3262 +I32 +sVsen. +p3263 +I6 +sVspeculate +p3264 +I32 +sVharrow +p3265 +I4 +sVpsycho-killer +p3266 +I32 +sVbuyouts +p3267 +I32 +sVfeldstein +p3268 +I12 +sVreal-estate +p3269 +I96 +sVdesignation +p3270 +I32 +sVnugget +p3271 +I4 +sValways +p3272 +I32 +sVassemblies +p3273 +I32 +sVloosely +p3274 +I32 +sVinstruct +p3275 +I32 +sVisle +p3276 +I4 +sVeloquence +p3277 +I32 +sVtransmission +p3278 +I32 +sVpiping +p3279 +I32 +sVmonessen +p3280 +I4 +sVrepayment +p3281 +I32 +sVfound +p3282 +I100 +sVshocking +p3283 +I32 +sVkinderhill +p3284 +I4 +sVinvestigators +p3285 +I46 +sVstatus +p3286 +I32 +sVbrunette +p3287 +I32 +sVengland +p3288 +I4 +sVchevron +p3289 +I14 +sVaccelerator +p3290 +I32 +sVnumerals +p3291 +I32 +sVosaka +p3292 +I4 +sVreduce +p3293 +I36 +sVslowdown +p3294 +I32 +sVgenital +p3295 +I32 +sVinvestigated +p3296 +I36 +sVmeasurement +p3297 +I32 +sVvierdanck +p3298 +I4 +sVadvertisers +p3299 +I32 +sVoperation +p3300 +I36 +sVnicaraguan +p3301 +I4 +sVpenicillin +p3302 +I32 +sVdeepen +p3303 +I32 +sVreally +p3304 +I38 +sVrepressive +p3305 +I32 +sVtry +p3306 +I42 +sVmissed +p3307 +I34 +sVblacks +p3308 +I32 +sVsparingly +p3309 +I32 +sVoechslin +p3310 +I12 +sVdisadvantages +p3311 +I32 +sVkensington +p3312 +I4 +sVresearch +p3313 +I102 +sVapplaud +p3314 +I32 +sVftc +p3315 +I12 +sVrace +p3316 +I38 +sVministerial +p3317 +I32 +sVinquirer +p3318 +I4 +sVreich +p3319 +I12 +sVdarling +p3320 +I32 +sVoccurs +p3321 +I32 +sVsalute +p3322 +I32 +sVneidl +p3323 +I4 +sVronk +p3324 +I8 +sVfoam +p3325 +I32 +sVbelief +p3326 +I32 +sVrisen +p3327 +I36 +sVpiecuch +p3328 +I8 +sVsparked +p3329 +I32 +sVmedea +p3330 +I4 +sVyield-driven +p3331 +I32 +sVness +p3332 +I4 +sVbutane-powered +p3333 +I32 +sValtar +p3334 +I32 +sVqualify +p3335 +I36 +sVpitfalls +p3336 +I44 +sVproxy +p3337 +I36 +sVimagine +p3338 +I32 +sVrises +p3339 +I36 +sVreproach +p3340 +I32 +sVdisadvantaged +p3341 +I32 +sVowners +p3342 +I100 +sVchoppy +p3343 +I32 +sVretained +p3344 +I32 +sVacquaint +p3345 +I32 +sVpersons +p3346 +I32 +sVspinach +p3347 +I32 +sVpositioning +p3348 +I32 +sVso +p3349 +I106 +sVhavens +p3350 +I4 +sVretainer +p3351 +I32 +sVzaibatsu +p3352 +I32 +sVcastle +p3353 +I36 +sVbernie +p3354 +I4 +sVexhibited +p3355 +I32 +sVransom +p3356 +I32 +sVsikhism +p3357 +I4 +sVgrossman +p3358 +I12 +sVbelmar +p3359 +I4 +sVreversing +p3360 +I32 +sVstruts +p3361 +I32 +sVunqualified +p3362 +I32 +sVprotectionist +p3363 +I32 +sVgirls +p3364 +I32 +sVlimerick +p3365 +I32 +sVcontender +p3366 +I32 +sVnumber +p3367 +I32 +sVtwisted +p3368 +I32 +sVgrieveson +p3369 +I4 +sVtelephone-installation +p3370 +I32 +sVhousewares +p3371 +I32 +sVanonymity +p3372 +I32 +sVfirsts +p3373 +I4 +sVcontended +p3374 +I32 +sVballistic +p3375 +I32 +sVprotectionism +p3376 +I32 +sVabitibi-price +p3377 +I6 +sVdiffer +p3378 +I32 +sVhalcion +p3379 +I4 +sVheads +p3380 +I96 +sVguest +p3381 +I32 +sVjet +p3382 +I36 +sVintroduction +p3383 +I38 +sVarlington +p3384 +I4 +sVmoderately +p3385 +I32 +sVtradition +p3386 +I34 +sVavez +p3387 +I32 +sVcontra +p3388 +I4 +sVflimsy +p3389 +I34 +sVfield-goals-allowed +p3390 +I32 +sVinterviewing +p3391 +I32 +sVerupted +p3392 +I32 +sVessays +p3393 +I32 +sVsmall-appliance +p3394 +I32 +sVjustly +p3395 +I32 +sVlaundrette +p3396 +I4 +sVassign +p3397 +I32 +sVphilippines +p3398 +I4 +sVoil-service +p3399 +I32 +sVrelationship +p3400 +I32 +sVpurer +p3401 +I32 +sVhelpful +p3402 +I32 +sVinterviewed +p3403 +I32 +sVimmediate +p3404 +I32 +sVappreciation +p3405 +I32 +sVsale-and-leaseback +p3406 +I32 +sVel-barajneh +p3407 +I32 +sVcrop +p3408 +I32 +sVconsult +p3409 +I32 +sVfocusing +p3410 +I32 +sVtan +p3411 +I4 +sVunderbilling +p3412 +I32 +sVunrealistic +p3413 +I32 +sVgrace +p3414 +I46 +sVpersonal-recognizance +p3415 +I32 +sVkerley +p3416 +I8 +sVcritically +p3417 +I32 +sVsatirist +p3418 +I32 +sViranian +p3419 +I4 +sVfuzziness +p3420 +I32 +sVdrift +p3421 +I32 +sVswx +p3422 +I8 +sVvocal +p3423 +I36 +sVcomputer-guided +p3424 +I2 +sVdefends +p3425 +I32 +sVminimize +p3426 +I32 +sVintc +p3427 +I12 +sVdetermined +p3428 +I32 +sVemirates +p3429 +I4 +sVcenterior +p3430 +I4 +sVhyde +p3431 +I12 +sVtaxis +p3432 +I38 +sVnone-too-subtle +p3433 +I32 +sVmatrimony +p3434 +I32 +sVsprawling +p3435 +I32 +sVgoldwater +p3436 +I8 +sVrefrigerators +p3437 +I32 +sVbavarian +p3438 +I4 +sVfights +p3439 +I36 +sVdefect +p3440 +I32 +sVwaft +p3441 +I32 +sVrecital +p3442 +I32 +sVguarding +p3443 +I32 +sVkeizai +p3444 +I4 +sVprecipitating +p3445 +I32 +sVlicenser +p3446 +I32 +sVheartening +p3447 +I32 +sVmidcon +p3448 +I4 +sVsell +p3449 +I36 +sVeaux +p3450 +I4 +sVscrawled +p3451 +I32 +sVfoals +p3452 +I2 +sVrecouping +p3453 +I32 +sVflannigan +p3454 +I4 +sVuep +p3455 +I8 +sValso +p3456 +I110 +sVrecognizing +p3457 +I10 +sVinternal +p3458 +I46 +sVptrk +p3459 +I8 +sVfrail +p3460 +I32 +sVieoc +p3461 +I6 +sVbrace +p3462 +I4 +sVfleet-replenishment +p3463 +I32 +sVplay +p3464 +I32 +sVgambled +p3465 +I4 +sVgentlemanly +p3466 +I32 +sVplas +p3467 +I4 +sVblackboard +p3468 +I32 +sVrelied +p3469 +I32 +sVstaffers +p3470 +I36 +sVanti-takeover +p3471 +I44 +sVlynne +p3472 +I6 +sVcoordinate +p3473 +I32 +sVvirus +p3474 +I40 +sVsecurities-law +p3475 +I32 +sVthank +p3476 +I32 +sVplan +p3477 +I44 +sVstar-topped +p3478 +I32 +sVdarts +p3479 +I4 +sVdefections +p3480 +I32 +sVaccepting +p3481 +I32 +sVhigh-rate +p3482 +I32 +sVoyster +p3483 +I32 +sVaquitaine +p3484 +I4 +sVunderstands +p3485 +I32 +sVexe +p3486 +I4 +sVunequal +p3487 +I32 +sVdirective +p3488 +I32 +sVarson +p3489 +I32 +sVcovey +p3490 +I32 +sVpahn-ish +p3491 +I4 +sVsometimes +p3492 +I34 +sVcover +p3493 +I36 +sVrectified +p3494 +I32 +sVdiscomforts +p3495 +I32 +sVtelectronics +p3496 +I6 +sVbarred +p3497 +I32 +sVlounge +p3498 +I32 +sVartistic +p3499 +I32 +sVsemiconductor-manufacturing +p3500 +I32 +sVcarteret +p3501 +I6 +sVartel +p3502 +I10 +sVbarrel +p3503 +I36 +sVccb +p3504 +I12 +sVamusements +p3505 +I4 +sVharvests +p3506 +I32 +sVambiguities +p3507 +I32 +sVsluggishness +p3508 +I32 +sVbelding +p3509 +I4 +sVbeating +p3510 +I32 +sVgolf +p3511 +I32 +sVgold +p3512 +I110 +sVtoughened +p3513 +I4 +sVinterceptors +p3514 +I32 +sVsecretaries +p3515 +I32 +sVaghast +p3516 +I32 +sVdefended +p3517 +I32 +sVequicor +p3518 +I2 +sVdecentralizing +p3519 +I32 +sVnasdaq +p3520 +I4 +sVsession +p3521 +I40 +sVparochial +p3522 +I32 +sVjean-jacques +p3523 +I2 +sVfreight +p3524 +I44 +sVentity +p3525 +I32 +sVdockets +p3526 +I32 +sVhereditary +p3527 +I32 +sVoverwhelmed +p3528 +I34 +sVblender +p3529 +I32 +sVimpact +p3530 +I36 +sVhenceforth +p3531 +I32 +sVindicator +p3532 +I36 +sVconsistently +p3533 +I32 +sVdrug-company +p3534 +I32 +sVwrites +p3535 +I32 +sVstockholders +p3536 +I32 +sVthoughout +p3537 +I32 +sVpeculiar +p3538 +I32 +sVfailed +p3539 +I36 +sVenzyme +p3540 +I32 +sVwayne +p3541 +I8 +sVcassette +p3542 +I32 +sVsymptom +p3543 +I32 +sVolivetti +p3544 +I12 +sVfactor +p3545 +I32 +sVtwins +p3546 +I32 +sVcolumns +p3547 +I32 +sVminichain +p3548 +I32 +sVgiants +p3549 +I36 +sVunpleasant +p3550 +I32 +sVfinancial-services +p3551 +I32 +sVmousetraps +p3552 +I32 +sVspoiler +p3553 +I32 +sVdependent +p3554 +I32 +sVliquid +p3555 +I32 +sVbanned +p3556 +I32 +sVcountervailing-duty +p3557 +I32 +sVsunny +p3558 +I32 +sVaspiration +p3559 +I32 +sVgetty +p3560 +I12 +sVresent +p3561 +I32 +sVremedy +p3562 +I32 +sVunearthed +p3563 +I32 +sVpreparing +p3564 +I32 +sVclosely +p3565 +I102 +sVdevising +p3566 +I32 +sVfa-18 +p3567 +I4 +sVbanner +p3568 +I32 +sVsacco +p3569 +I4 +sVdistraction +p3570 +I32 +sVenemy +p3571 +I36 +sVsubjourneymen +p3572 +I32 +sVzehli +p3573 +I4 +sVadapts +p3574 +I4 +sVprogressive +p3575 +I36 +sVlavish +p3576 +I32 +sVaircraft-evacuation +p3577 +I32 +sVopc +p3578 +I4 +sVcry +p3579 +I36 +sVbothering +p3580 +I32 +sVproclaim +p3581 +I32 +sVbanking +p3582 +I108 +sVtortuously +p3583 +I32 +sVblossoms +p3584 +I32 +sVcouriers +p3585 +I32 +sVkill +p3586 +I32 +sVpeak +p3587 +I32 +sVriver +p3588 +I4 +sVawacs +p3589 +I4 +sVprospectus +p3590 +I32 +sVrumored +p3591 +I32 +sVkalamazoo +p3592 +I8 +sVdelicately +p3593 +I32 +sVset +p3594 +I44 +sVconvenience +p3595 +I32 +sVcreator +p3596 +I32 +sVlargesse +p3597 +I32 +sVappalachian +p3598 +I4 +sVcarrying +p3599 +I32 +sVactivists +p3600 +I32 +sVbyron +p3601 +I4 +sVpotent +p3602 +I32 +sVbitterness +p3603 +I32 +sVadministrator +p3604 +I32 +sVcollectively +p3605 +I32 +sVsee +p3606 +I38 +sVfermenta +p3607 +I14 +sVbackfire +p3608 +I32 +sVsea +p3609 +I46 +sVoverboard +p3610 +I32 +sVinstitutes +p3611 +I36 +sVwalton +p3612 +I12 +sVregulator +p3613 +I32 +sVbaritone +p3614 +I32 +sVspirits +p3615 +I32 +sVmuted +p3616 +I32 +sVmovie +p3617 +I36 +sVcurrently +p3618 +I42 +sVdiluted +p3619 +I32 +sVrejecting +p3620 +I32 +sVguides +p3621 +I32 +sVunspectacularly +p3622 +I32 +sVpickup +p3623 +I36 +sVfive-ton +p3624 +I32 +sVincurring +p3625 +I32 +sVsomber +p3626 +I32 +sVdilutes +p3627 +I32 +sVthrive +p3628 +I32 +sVendure +p3629 +I32 +sVavailable +p3630 +I32 +sVorganizing +p3631 +I32 +sVcandor +p3632 +I32 +sVcabrera +p3633 +I12 +sVtargeted +p3634 +I32 +sVbrewing +p3635 +I36 +sVpostponement +p3636 +I32 +sVpunch +p3637 +I4 +sVcowbells +p3638 +I32 +sVincident +p3639 +I32 +sVrenewed +p3640 +I32 +sVsteenburgen +p3641 +I12 +sVlow-hanging +p3642 +I32 +sVthree-week +p3643 +I32 +sVcondoned +p3644 +I32 +sVstaging +p3645 +I32 +sVcornetti +p3646 +I4 +sVwilkis +p3647 +I12 +sVprospects +p3648 +I36 +sVimproved +p3649 +I32 +sVlegitimately +p3650 +I32 +sVcolton +p3651 +I4 +sVinfluential +p3652 +I32 +sVoffending +p3653 +I32 +sVpds +p3654 +I4 +sVpacking +p3655 +I32 +sg131 +I14 +sVthinking +p3656 +I32 +sVconnection +p3657 +I32 +sVimproves +p3658 +I32 +sVpounded +p3659 +I32 +sVlong-term +p3660 +I34 +sVpoverty +p3661 +I32 +sg133 +I8 +sVprankster +p3662 +I32 +sVwhole +p3663 +I32 +sVpoor-quality +p3664 +I32 +sVload +p3665 +I46 +sVbollenbacher +p3666 +I4 +sVtax-favored +p3667 +I32 +sVbell +p3668 +I46 +sVunderwent +p3669 +I32 +sVhalf-price +p3670 +I32 +sVloan +p3671 +I100 +sVnortheastern +p3672 +I6 +sVcswc +p3673 +I4 +sVallegiance +p3674 +I32 +sVcommunity +p3675 +I38 +sVhollow +p3676 +I32 +sVhobart +p3677 +I2 +sVbely +p3678 +I4 +sVagents +p3679 +I32 +sVadaptation +p3680 +I32 +sVchurch +p3681 +I46 +sVfar-fetched +p3682 +I32 +sVdallas-based +p3683 +I4 +sVbattipaglia +p3684 +I4 +sVbelt +p3685 +I36 +sVsubversion +p3686 +I32 +sVworthless +p3687 +I32 +sVwalcott +p3688 +I4 +sVdilute +p3689 +I32 +sVpublishing +p3690 +I46 +sVwestinghouse +p3691 +I4 +sVmonthly +p3692 +I32 +sVacceptance +p3693 +I32 +sVpullback +p3694 +I32 +sVlets +p3695 +I32 +sVevoking +p3696 +I32 +sVirritating +p3697 +I32 +sVexpedited +p3698 +I32 +sVsuburbs +p3699 +I32 +sVproprietor +p3700 +I32 +sVcitations +p3701 +I32 +sVlucrative +p3702 +I32 +sVtcoma +p3703 +I4 +sVcontained +p3704 +I32 +sVwoodcuts +p3705 +I32 +sVdecompression +p3706 +I32 +sVwidening +p3707 +I44 +sVscholar +p3708 +I4 +sVgloating +p3709 +I32 +sVfirm +p3710 +I44 +sVresting +p3711 +I32 +sVraced +p3712 +I32 +sVuser-charge +p3713 +I32 +sVnabisco +p3714 +I4 +sVsilenced +p3715 +I32 +sVfire +p3716 +I36 +sVcaleb +p3717 +I4 +sVproprietary +p3718 +I32 +sVreincorporation +p3719 +I32 +sVstripping +p3720 +I32 +sVmine +p3721 +I32 +sVfund +p3722 +I36 +sVfung +p3723 +I12 +sVraces +p3724 +I32 +sVsleeves +p3725 +I32 +sVrepresentative +p3726 +I36 +sVpacemaker +p3727 +I96 +sVemployee-benefits +p3728 +I32 +sVtowns +p3729 +I32 +sVformless +p3730 +I32 +sVsniff +p3731 +I32 +sVpresses +p3732 +I36 +sVhandling +p3733 +I36 +sVuncertain +p3734 +I32 +sVslyly +p3735 +I32 +sVall-time +p3736 +I32 +sVjagry +p3737 +I4 +sVdisrupt +p3738 +I32 +sVstraight +p3739 +I36 +sVexpanded +p3740 +I32 +sVpatrol +p3741 +I36 +sVbudget +p3742 +I110 +sVcoupon +p3743 +I40 +sVreceive +p3744 +I32 +sVmlp +p3745 +I8 +sVpressed +p3746 +I34 +sVreliably +p3747 +I32 +sVleaning +p3748 +I32 +sVhead-to-head +p3749 +I32 +sVkissing +p3750 +I32 +sVdi +p3751 +I44 +sVrobin +p3752 +I4 +sVzanzotto +p3753 +I12 +sVswim +p3754 +I32 +sVpound +p3755 +I32 +sVhoping +p3756 +I34 +sVelegance +p3757 +I36 +sVbacking +p3758 +I32 +sVaveraging +p3759 +I32 +sVvon +p3760 +I32 +sVmotors +p3761 +I36 +sVsmorgasboard +p3762 +I32 +sVducks +p3763 +I32 +sVsilence +p3764 +I32 +sVtriple +p3765 +I32 +sVbeautifully +p3766 +I32 +sVmeager +p3767 +I32 +sVvanish +p3768 +I32 +sVcoca-cola +p3769 +I14 +sVcarry-forwards +p3770 +I32 +sVchase +p3771 +I46 +sVrumford +p3772 +I4 +sVfunny +p3773 +I32 +sVimpatiens +p3774 +I32 +sVraiders +p3775 +I32 +sVpacemakers +p3776 +I32 +sVspectacular +p3777 +I32 +sVshorted +p3778 +I32 +sVfibers +p3779 +I32 +sVbarnes +p3780 +I12 +sVbrazilians +p3781 +I2 +sVshorten +p3782 +I32 +sVfallacies +p3783 +I32 +sVmarket-sensitive +p3784 +I32 +sVshorter +p3785 +I32 +sVrules +p3786 +I36 +sVunsavory-looking +p3787 +I32 +sVvirtually +p3788 +I32 +sVbethesda +p3789 +I4 +sVruler +p3790 +I32 +sVwasteland +p3791 +I32 +sVsurvey +p3792 +I36 +sVvote-getter +p3793 +I32 +sVstung +p3794 +I32 +sVharvard-educated +p3795 +I4 +sVweinberg +p3796 +I8 +sVknitting +p3797 +I36 +sVd.c. +p3798 +I4 +sVflooded +p3799 +I32 +sVcomprehensive +p3800 +I36 +sVderby +p3801 +I8 +sValert +p3802 +I32 +sVviewing +p3803 +I32 +sVlevels +p3804 +I36 +sVnecessity +p3805 +I32 +sVmorrison +p3806 +I4 +sVnickname +p3807 +I32 +sVclimb +p3808 +I32 +sVrecent +p3809 +I42 +sVamy +p3810 +I4 +sVfront-runners +p3811 +I32 +sVsurrogate +p3812 +I32 +sValleging +p3813 +I32 +sVmeddlesome +p3814 +I32 +sVchevrefeuille +p3815 +I4 +sVpicks +p3816 +I36 +sVperson +p3817 +I32 +sVoil-drilling +p3818 +I32 +sVltd. +p3819 +I4 +sVwicklow +p3820 +I4 +sVclearance +p3821 +I36 +sVcomprise +p3822 +I32 +sVnutsiness +p3823 +I32 +sVbrentwood +p3824 +I4 +sVrudolph +p3825 +I14 +sVsalvo +p3826 +I32 +sVpre-dated +p3827 +I32 +sVundue +p3828 +I32 +sVred-haired +p3829 +I32 +sVtelegram +p3830 +I32 +sVblur +p3831 +I32 +sVarms-sale +p3832 +I32 +sVlinger +p3833 +I32 +sVmilitiamen +p3834 +I32 +sVjob-service +p3835 +I2 +sVarrests +p3836 +I44 +sVhercules +p3837 +I4 +sVousting +p3838 +I32 +sVplagued +p3839 +I32 +sVstunt +p3840 +I32 +sVsecured-lease +p3841 +I32 +sVsimi +p3842 +I4 +sVs-corporation +p3843 +I6 +sVforrest +p3844 +I4 +sVno-strike +p3845 +I32 +sVperes +p3846 +I12 +sVexecution +p3847 +I32 +sVconclusions +p3848 +I32 +sVsurprises +p3849 +I32 +sVadmission +p3850 +I32 +sVchest +p3851 +I32 +sVisgur +p3852 +I4 +sVsignals +p3853 +I32 +sVeager +p3854 +I32 +sVhigh-interest +p3855 +I32 +sVgrapefruit +p3856 +I32 +sVparents +p3857 +I38 +sVlocation +p3858 +I32 +sVsydney +p3859 +I8 +sVorbn +p3860 +I8 +sVinput +p3861 +I32 +sVherculean +p3862 +I32 +sVreverted +p3863 +I32 +sVsurprised +p3864 +I32 +sVharvesting +p3865 +I32 +sVaustralia +p3866 +I14 +sVvictims +p3867 +I36 +sVemergency +p3868 +I32 +sVdemands +p3869 +I96 +sVcouple +p3870 +I32 +sVpre-strike +p3871 +I32 +sVbureaucrat +p3872 +I4 +sVfolk +p3873 +I32 +sVdepreciable +p3874 +I32 +sVhigh-ranking +p3875 +I32 +sVsuffering +p3876 +I32 +sVquest +p3877 +I38 +sVhitters +p3878 +I32 +sVprivate +p3879 +I34 +sVaerospace +p3880 +I108 +sVanti-gadhafi +p3881 +I32 +sVconversing +p3882 +I32 +sVbuyout +p3883 +I40 +sVnhrd +p3884 +I8 +sVweights +p3885 +I32 +sVprojects +p3886 +I32 +sVformal +p3887 +I32 +sVsorting +p3888 +I32 +sVimposed +p3889 +I96 +sg191 +I44 +sVmarquee +p3890 +I32 +sVfacets +p3891 +I32 +sVunderway +p3892 +I32 +sVconsensus +p3893 +I32 +sVcommunications +p3894 +I46 +sVindividuals +p3895 +I34 +sVyields +p3896 +I34 +sVpatrick +p3897 +I14 +sVivan +p3898 +I4 +sValexandra +p3899 +I4 +sVtechnologic +p3900 +I4 +sVdisorder +p3901 +I32 +sVunrequited +p3902 +I32 +sVmelville +p3903 +I8 +sVprivately +p3904 +I32 +sVreelection +p3905 +I32 +sVmanipulated +p3906 +I32 +sVmightn +p3907 +I32 +sVmethods +p3908 +I36 +sVsenate +p3909 +I14 +sVspring +p3910 +I36 +sVhorst +p3911 +I4 +sVshriners +p3912 +I4 +sVunfazed +p3913 +I32 +sVvcc.a +p3914 +I4 +sVstimulated +p3915 +I32 +sVmoline +p3916 +I4 +sVfour-month-per-exam +p3917 +I32 +sVmooney +p3918 +I4 +sVmighty +p3919 +I32 +sVbells +p3920 +I36 +sVpalo +p3921 +I8 +sVhard-line +p3922 +I32 +sVcurious +p3923 +I32 +sVsprint +p3924 +I4 +sVwesson +p3925 +I4 +sVpale +p3926 +I32 +sVamicable +p3927 +I32 +sVmomentary +p3928 +I32 +sVconciliatory +p3929 +I32 +sVand/or +p3930 +I32 +sVstringfellow +p3931 +I4 +sVveterinary +p3932 +I4 +sVnovelty +p3933 +I32 +sVtokkin +p3934 +I32 +sVreligion +p3935 +I32 +sVbehave +p3936 +I36 +sVfortney +p3937 +I8 +sVassisted +p3938 +I34 +sVwbb +p3939 +I12 +sVdating +p3940 +I32 +sVdurables +p3941 +I32 +sVtemple +p3942 +I4 +sVinclination +p3943 +I32 +sVbe +p3944 +I108 +sVlowly +p3945 +I32 +sVmystique +p3946 +I32 +sVba +p3947 +I12 +sVbb +p3948 +I4 +sVoverallotments +p3949 +I32 +sVcrooks +p3950 +I12 +sVbn +p3951 +I8 +sVobscures +p3952 +I32 +sVagreement +p3953 +I36 +sVsmiths +p3954 +I4 +sVbk +p3955 +I8 +sVbt +p3956 +I4 +sVmontera +p3957 +I4 +sVequals +p3958 +I32 +sVlooming +p3959 +I32 +sVsanta +p3960 +I12 +sVbs +p3961 +I8 +sVtidal +p3962 +I32 +sVcarol +p3963 +I4 +sVobscured +p3964 +I32 +sVby +p3965 +I126 +sVklm +p3966 +I4 +sVthird-country +p3967 +I32 +sVfine-tuning +p3968 +I32 +sVwildlife +p3969 +I4 +sVcivil-rights +p3970 +I32 +sVgifts +p3971 +I32 +sVanything +p3972 +I32 +sVwore +p3973 +I32 +sVexaggerated +p3974 +I32 +sVcrzy +p3975 +I8 +sVbirnbaum +p3976 +I8 +sVwon-lost +p3977 +I32 +sVhatcher +p3978 +I4 +sVmethodology +p3979 +I32 +sVdeserves +p3980 +I32 +sVzug +p3981 +I4 +sVspawned +p3982 +I32 +sVstuart +p3983 +I6 +sVsupercomputers +p3984 +I32 +sVbenefactors +p3985 +I32 +sVrituals +p3986 +I32 +sVpalm-sized +p3987 +I32 +sVrepair +p3988 +I36 +sVwell-versed +p3989 +I32 +sVseven-figure +p3990 +I32 +sVreverence +p3991 +I32 +sVgarbage +p3992 +I32 +sVterrorists +p3993 +I32 +sVreadable +p3994 +I32 +sVinto +p3995 +I96 +sVdiceon +p3996 +I14 +sVnormick +p3997 +I4 +sVleapfrogging +p3998 +I32 +sVvaal +p3999 +I4 +sVdame +p4000 +I4 +sVappropriate +p4001 +I32 +sVcontroversies +p4002 +I32 +sVprimarily +p4003 +I32 +sVrepaid +p4004 +I36 +sVforson +p4005 +I8 +sVguideline +p4006 +I32 +sVore.-based +p4007 +I4 +sVfurnishing +p4008 +I32 +sVuncertainties +p4009 +I32 +sVcriticisms +p4010 +I32 +sVpoaching +p4011 +I32 +sVkiichi +p4012 +I4 +sVspending +p4013 +I34 +sVtelco +p4014 +I14 +sVpenned +p4015 +I32 +sVrembleske +p4016 +I8 +sVbargaining +p4017 +I32 +sVsubmit +p4018 +I32 +sVcustom +p4019 +I32 +sVoccupy +p4020 +I32 +sVtxel +p4021 +I8 +sVbioscience +p4022 +I36 +sVsuit +p4023 +I44 +sVcertification +p4024 +I36 +sVconrail +p4025 +I14 +sVopens +p4026 +I32 +sVmarking +p4027 +I32 +sVblueprint +p4028 +I32 +sVconsiderably +p4029 +I32 +sVventres +p4030 +I8 +sVinsensitivity +p4031 +I32 +sVatlantis +p4032 +I14 +sVelsewhere +p4033 +I32 +sVhawaiian +p4034 +I12 +sVjewish +p4035 +I6 +sVcologne +p4036 +I4 +sVtally +p4037 +I32 +sVslump +p4038 +I36 +sVvowing +p4039 +I32 +sVsoviet-bloc +p4040 +I4 +sVinched +p4041 +I32 +sVdeductions +p4042 +I32 +sVatlantic +p4043 +I14 +sVpacific +p4044 +I14 +sVatom +p4045 +I36 +sVline +p4046 +I36 +sVrealists +p4047 +I32 +sVsusquehanna +p4048 +I14 +sVconsiderable +p4049 +I32 +sVheinrich +p4050 +I4 +sVposted +p4051 +I100 +sVseneca +p4052 +I4 +sVcia +p4053 +I12 +sVinducements +p4054 +I32 +sVrefinancing +p4055 +I40 +sVfdic +p4056 +I6 +sVredeemed +p4057 +I32 +sVdynamic-random-access +p4058 +I32 +sVut +p4059 +I4 +sVsleepers +p4060 +I32 +sVconcussed +p4061 +I32 +sVup +p4062 +I46 +sVus +p4063 +I34 +sVcil +p4064 +I4 +sVmaturity +p4065 +I32 +sVcustomers +p4066 +I110 +sVuh +p4067 +I32 +sVmature +p4068 +I32 +sVcit +p4069 +I4 +sVcontinuously +p4070 +I32 +sVfein +p4071 +I4 +sVretaliatory +p4072 +I32 +sVprofessor +p4073 +I32 +sVpainfully +p4074 +I32 +sVyelled +p4075 +I32 +sVsupervisor +p4076 +I32 +sVreconcile +p4077 +I32 +sVarmstrong +p4078 +I14 +sVenjoins +p4079 +I4 +sVdefined +p4080 +I32 +sVlikewise +p4081 +I34 +sVstart-up +p4082 +I32 +sVmultimillion-dollar +p4083 +I32 +sVinfluence +p4084 +I32 +sVsurpassing +p4085 +I32 +sVpresided +p4086 +I32 +sVjournal/europe +p4087 +I4 +sVdiverse +p4088 +I34 +sVbreathes +p4089 +I32 +sVkillian +p4090 +I8 +sVgraceful +p4091 +I32 +sVnationalism +p4092 +I32 +sVerrickson +p4093 +I8 +sVdefines +p4094 +I32 +sVtark +p4095 +I4 +sVsubmersible +p4096 +I96 +sVdanube +p4097 +I4 +sVdissemination +p4098 +I32 +sVedwards +p4099 +I12 +sVuranium +p4100 +I32 +sVreimbursed +p4101 +I32 +sVhaggarty +p4102 +I4 +sVoccasional +p4103 +I32 +sVstepchild +p4104 +I32 +sVdefinitely +p4105 +I100 +sVactors +p4106 +I32 +sVtrait +p4107 +I32 +sVstrassner +p4108 +I8 +sVfreighter +p4109 +I32 +sVlynford +p4110 +I12 +sVrevision +p4111 +I32 +sVrifkin +p4112 +I12 +sVscapegoat +p4113 +I32 +sVelements +p4114 +I32 +sVenergetic +p4115 +I32 +sVbeginnings +p4116 +I32 +sVmasterson +p4117 +I8 +sVlitigants +p4118 +I32 +sVt.spz +p4119 +I4 +sVaussies +p4120 +I4 +sVlucia +p4121 +I4 +sVbeneficial +p4122 +I32 +sVtreatable +p4123 +I32 +sVkaiser +p4124 +I14 +sVcurtail +p4125 +I32 +sVreinsurance +p4126 +I32 +sVmeals +p4127 +I32 +sVleaflets +p4128 +I32 +sVnios +p4129 +I4 +sVago +p4130 +I44 +sVbases +p4131 +I32 +sVlane +p4132 +I36 +sVland +p4133 +I36 +sVfighter +p4134 +I32 +sVfrest +p4135 +I12 +sVwafer +p4136 +I32 +sVtrail +p4137 +I32 +sVrooted +p4138 +I32 +sVsunbeam +p4139 +I14 +sVgeraldine +p4140 +I4 +sVmidnight-to-5-a.m. +p4141 +I32 +sVaga +p4142 +I4 +sVr.a. +p4143 +I2 +sVsummit +p4144 +I42 +sVarisen +p4145 +I32 +sVcame +p4146 +I40 +sVfreer +p4147 +I32 +sVwalker +p4148 +I4 +sVfresh +p4149 +I36 +sVholed +p4150 +I64 +sVhaving +p4151 +I46 +sVessay +p4152 +I32 +sVhampton +p4153 +I4 +sVcode +p4154 +I36 +sVpartial +p4155 +I32 +sVteach +p4156 +I32 +sVtax-withholding +p4157 +I32 +sVtreasuries +p4158 +I36 +sVeffigy +p4159 +I32 +sVsr. +p4160 +I4 +sVbroaden +p4161 +I32 +sVinformally +p4162 +I32 +sVdmbk +p4163 +I8 +sVresults +p4164 +I58 +sVsoften +p4165 +I32 +sVhighways +p4166 +I32 +sVdebtors +p4167 +I36 +sVstature +p4168 +I32 +sVaquatic +p4169 +I32 +sVstops +p4170 +I32 +sVbroader +p4171 +I34 +sVgladly +p4172 +I32 +sVgossip +p4173 +I32 +sVshrugged +p4174 +I32 +sVcenters +p4175 +I36 +sVseemed +p4176 +I32 +sVone-half +p4177 +I32 +sVlongstanding +p4178 +I32 +sVselikoff +p4179 +I12 +sVimpeding +p4180 +I32 +sVconcerned +p4181 +I32 +sVexpress-parcel +p4182 +I32 +sVyoung +p4183 +I46 +sVsend +p4184 +I32 +sVstudent-loan +p4185 +I32 +sVciting +p4186 +I42 +sVrejoined +p4187 +I32 +sVvisitor +p4188 +I32 +sVsubscription +p4189 +I32 +sVresources +p4190 +I36 +sVgarret +p4191 +I4 +sVlindner +p4192 +I8 +sVprobe +p4193 +I36 +sVsaying +p4194 +I36 +sVgarden +p4195 +I44 +sVtulsa +p4196 +I12 +sVcbs/fox +p4197 +I14 +sVcontinues +p4198 +I100 +sVreopened +p4199 +I32 +sVmcalpine +p4200 +I4 +sVsemiconductor-industry +p4201 +I32 +sVwell-done +p4202 +I32 +sVballs +p4203 +I32 +sVridgefield +p4204 +I8 +sVpetitions +p4205 +I32 +sVpracticing +p4206 +I32 +sVdecorating +p4207 +I32 +sVquadrupled +p4208 +I40 +sVcontinued +p4209 +I34 +sVminerals +p4210 +I36 +sVcategories +p4211 +I32 +sVmaxcell +p4212 +I4 +sVtimely +p4213 +I32 +sVnorthwestern +p4214 +I4 +sVmagic +p4215 +I36 +sVtro +p4216 +I4 +sVtrn +p4217 +I4 +sVharbor +p4218 +I36 +sVexperiencing +p4219 +I32 +sVembarked +p4220 +I32 +sVtre +p4221 +I4 +sVfewer +p4222 +I34 +sVyevgeny +p4223 +I4 +sVascribed +p4224 +I32 +sVtrudeau +p4225 +I4 +sVdiscounting +p4226 +I32 +sVanti-ballet +p4227 +I32 +sVbally +p4228 +I14 +sVmisapplying +p4229 +I32 +sVsevered +p4230 +I32 +sVrack +p4231 +I32 +sVtrw +p4232 +I4 +sVgerlach +p4233 +I8 +sVlogistics +p4234 +I32 +sVadm. +p4235 +I6 +sVmcmxxv +p4236 +I4 +sVjournalistic +p4237 +I32 +sVpledge +p4238 +I32 +sVlowenthal +p4239 +I12 +sVmediterranean +p4240 +I4 +sVmetropolis +p4241 +I8 +sVunprofitable +p4242 +I32 +sVrecruitment +p4243 +I32 +sVpastore +p4244 +I4 +sVvideo +p4245 +I38 +sVenclosed +p4246 +I32 +sVmunitions +p4247 +I32 +sVlicenses +p4248 +I32 +sVomnicom +p4249 +I14 +sVdynamics +p4250 +I4 +sVodd +p4251 +I32 +sVcruikshank +p4252 +I4 +sVvictor +p4253 +I14 +sVconvex +p4254 +I4 +sVindex +p4255 +I36 +sVangiographic +p4256 +I32 +sVpirrie +p4257 +I8 +sVapparatus +p4258 +I32 +sVlehman +p4259 +I14 +sVhealth-products +p4260 +I32 +sVexpressed +p4261 +I32 +sVsweaty +p4262 +I32 +sVrichmond +p4263 +I4 +sVlaurence +p4264 +I6 +sVaberrational +p4265 +I32 +sVindian +p4266 +I4 +sVturnaround +p4267 +I36 +sVpolluting +p4268 +I32 +sVflowing +p4269 +I32 +sVexpresses +p4270 +I36 +sVfirms +p4271 +I46 +sVchefs +p4272 +I32 +sVpublications +p4273 +I36 +sVparis-dakar +p4274 +I4 +sVproliferation +p4275 +I32 +sVled +p4276 +I96 +sVlee +p4277 +I14 +sVleg +p4278 +I36 +sVrespectively +p4279 +I32 +sVgathered +p4280 +I32 +sVdolly +p4281 +I4 +sVe.l. +p4282 +I4 +sVleo +p4283 +I6 +sVdressed +p4284 +I32 +sVles +p4285 +I12 +sVlet +p4286 +I46 +sVleu +p4287 +I4 +sVoctave +p4288 +I32 +sVlew +p4289 +I4 +sVconsideration +p4290 +I32 +sVsquirming +p4291 +I32 +sVinvented +p4292 +I32 +sVcrocker +p4293 +I4 +sVdarwinism +p4294 +I4 +sVgreat +p4295 +I46 +sVengage +p4296 +I32 +sVuneasy +p4297 +I32 +sVtechnical +p4298 +I36 +sVinvolved +p4299 +I36 +sVchemical-analysis +p4300 +I32 +sVpolystyrene +p4301 +I32 +sVvideo-disk +p4302 +I32 +sVconcurrently +p4303 +I2 +sVrehabilitation +p4304 +I32 +sVmoto +p4305 +I14 +sVresulting +p4306 +I32 +sVtakeover-oriented +p4307 +I32 +sVrdc +p4308 +I4 +sVdefeat +p4309 +I32 +sVpopcorn +p4310 +I32 +sVopinion +p4311 +I38 +sVresidents +p4312 +I32 +sVbookkeeping +p4313 +I32 +sVmakes +p4314 +I36 +sVmaker +p4315 +I100 +sVinvolves +p4316 +I32 +sVportasol +p4317 +I4 +sVfar-flung +p4318 +I32 +sVpanicked +p4319 +I2 +sg87 +I12 +sVpepsi-cola +p4320 +I4 +sVtelecom +p4321 +I14 +sVcomplying +p4322 +I32 +sVfractured +p4323 +I32 +sVslid +p4324 +I32 +sVdistrusted +p4325 +I32 +sVwhiteman +p4326 +I4 +sVforeign-exchange +p4327 +I40 +sVmoonlighting +p4328 +I4 +sVcrosby +p4329 +I12 +sVcupid +p4330 +I2 +sVpay-as-we-go +p4331 +I32 +sVpilliod +p4332 +I8 +sVprohibiting +p4333 +I32 +sVliterary +p4334 +I32 +sVtelequest +p4335 +I14 +sVtools +p4336 +I36 +sVstanding +p4337 +I32 +sVendangered +p4338 +I32 +sVconfidence +p4339 +I36 +sVfrancis +p4340 +I12 +sVbattery-processing +p4341 +I32 +sVexcursions +p4342 +I4 +sVcertificate +p4343 +I32 +sVmendoza +p4344 +I4 +sVillegal +p4345 +I32 +sVchocolates +p4346 +I44 +sVministers +p4347 +I32 +sVdollar-owners +p4348 +I32 +sVnext +p4349 +I110 +sVdixie-narco +p4350 +I4 +sVduplicate +p4351 +I32 +sVdoubt +p4352 +I32 +sVcamcorder +p4353 +I32 +sVtahoe +p4354 +I4 +sVlpx +p4355 +I8 +sVfeelingly +p4356 +I32 +sVyardstick +p4357 +I32 +sVdoubling +p4358 +I32 +sVzim +p4359 +I8 +sVforefathers +p4360 +I32 +sVmidday +p4361 +I32 +sVjudged +p4362 +I32 +sVdayco +p4363 +I4 +sVwitchlike +p4364 +I32 +sVpfe +p4365 +I12 +sVbaffled +p4366 +I32 +sVdivests +p4367 +I32 +sg136 +I14 +sVteikoku +p4368 +I4 +sVoccurred +p4369 +I32 +sVbing +p4370 +I4 +sVdealings +p4371 +I32 +sVgood-sized +p4372 +I32 +sVfederally +p4373 +I32 +sVsharply +p4374 +I34 +sVre-regulating +p4375 +I32 +sVbaby +p4376 +I36 +sVhootch +p4377 +I32 +sVroller-coaster +p4378 +I32 +sVpromotional +p4379 +I96 +sVcenturion +p4380 +I4 +sVcumbersome +p4381 +I32 +sVfast-moving +p4382 +I32 +sVcustomer +p4383 +I32 +sVmid-1970s +p4384 +I32 +sVrice +p4385 +I44 +sVanimals +p4386 +I32 +sVintegrating +p4387 +I32 +sVthis +p4388 +I110 +sVaids-information +p4389 +I4 +sVchallenge +p4390 +I32 +sVclients +p4391 +I36 +sVinsists +p4392 +I32 +sVjailed +p4393 +I32 +sVreproduce +p4394 +I32 +sVjeep +p4395 +I36 +sVemerson +p4396 +I14 +sVthin +p4397 +I32 +sVdrill +p4398 +I32 +sVgunshots +p4399 +I32 +sVfulfill +p4400 +I32 +sVfive-month +p4401 +I32 +sVhavre +p4402 +I4 +sVbend +p4403 +I36 +sVpenobscot +p4404 +I12 +sVcompany-owned +p4405 +I32 +sVu.s.-dominated +p4406 +I4 +sVweaker +p4407 +I32 +sVbent +p4408 +I32 +sVpainstakingly +p4409 +I32 +sVprocess +p4410 +I32 +sVlock +p4411 +I32 +sVthinner +p4412 +I4 +sVslim +p4413 +I32 +sVrode +p4414 +I32 +sVpurposes +p4415 +I32 +sVpresidente +p4416 +I4 +sVpieces +p4417 +I32 +sVhigh +p4418 +I46 +sVp.a.m. +p4419 +I4 +sVdia +p4420 +I4 +sVco-equal +p4421 +I32 +sVslip +p4422 +I36 +sVforestalls +p4423 +I4 +sVpieced +p4424 +I32 +sVyutaka +p4425 +I4 +sVfinanza +p4426 +I4 +sVfloury +p4427 +I32 +sVreynolds +p4428 +I14 +sVbolstered +p4429 +I32 +sVweaken +p4430 +I32 +sVcurrency-stabilization +p4431 +I32 +sVeducational +p4432 +I36 +sVstadiums +p4433 +I32 +sVmaxsaver-type +p4434 +I4 +sVseemala +p4435 +I6 +sVdestroying +p4436 +I32 +sVexpansion-minded +p4437 +I32 +sVdelay +p4438 +I36 +sVswitzerland-based +p4439 +I4 +sVstoke +p4440 +I32 +sVescalating +p4441 +I32 +sVpair +p4442 +I32 +sVanimal +p4443 +I32 +sVyen-denominated +p4444 +I34 +sVhillsman +p4445 +I4 +sVmysteries +p4446 +I32 +sVreimposed +p4447 +I32 +sVestablishment +p4448 +I32 +sVcasino +p4449 +I36 +sVgowan +p4450 +I8 +sVamerika +p4451 +I4 +sVblocks +p4452 +I32 +sVhalter +p4453 +I8 +sVconnors +p4454 +I4 +sVdravidians +p4455 +I4 +sVawait +p4456 +I36 +sVtied +p4457 +I36 +sVhalted +p4458 +I32 +sVweighed +p4459 +I36 +sVtoyco +p4460 +I4 +sVpreferring +p4461 +I32 +sVfits +p4462 +I32 +sVties +p4463 +I44 +sVmarrow +p4464 +I32 +sVhawk +p4465 +I4 +sVtariffs +p4466 +I36 +sVsolidarity +p4467 +I4 +sVcinderblock +p4468 +I32 +sVinscrutability +p4469 +I32 +sVplatt +p4470 +I4 +sVrealized +p4471 +I32 +sVrock-and-roll +p4472 +I32 +sVboeing +p4473 +I14 +sVmisappropriation +p4474 +I32 +sVbackup +p4475 +I32 +sVcarceres +p4476 +I4 +sVcounter +p4477 +I32 +sVrobot +p4478 +I64 +sVlnc +p4479 +I4 +sVelement +p4480 +I32 +sg154 +I44 +sVacquitted +p4481 +I32 +sVmaclean +p4482 +I4 +sVwrit +p4483 +I32 +sVrealizes +p4484 +I32 +sVallow +p4485 +I32 +sVintellectuals +p4486 +I34 +sVvolunteers +p4487 +I32 +sVcounted +p4488 +I32 +sVextraparliamentary +p4489 +I32 +sVhouston +p4490 +I12 +sVunderstate +p4491 +I32 +sVcushion +p4492 +I32 +sVproducer +p4493 +I46 +sVproduces +p4494 +I32 +sVeileen +p4495 +I4 +sVmove +p4496 +I44 +sVsalivating +p4497 +I32 +sVm.b.a. +p4498 +I4 +sVdoubtful +p4499 +I32 +sVproduced +p4500 +I32 +sVdanse +p4501 +I32 +sVlongs +p4502 +I32 +sVsculptured +p4503 +I32 +sVspectacle +p4504 +I40 +sVdirects +p4505 +I32 +sVbrakeman +p4506 +I32 +sVfinanziaria +p4507 +I8 +sVshapes +p4508 +I32 +sVyear-earlier +p4509 +I38 +sVwarren +p4510 +I14 +sVperfect +p4511 +I32 +sVsaturn +p4512 +I6 +sVrecreating +p4513 +I32 +sVcut-rate +p4514 +I32 +sVchosen +p4515 +I32 +sVkelley +p4516 +I4 +sVrash +p4517 +I32 +sVdispose +p4518 +I32 +sVfete +p4519 +I32 +sVmeantime +p4520 +I34 +sVchip-consuming +p4521 +I32 +sVmcgaw +p4522 +I4 +sVdegrees +p4523 +I32 +sVspoiling +p4524 +I32 +sVstalled +p4525 +I32 +sVderivative +p4526 +I32 +sVvolatility +p4527 +I32 +sVsabotaging +p4528 +I32 +sVphysicians +p4529 +I36 +sVdesigns +p4530 +I32 +sVhainan +p4531 +I4 +sVself-evaluation +p4532 +I32 +sVlow-status +p4533 +I32 +sVoutlined +p4534 +I32 +sVcaucused +p4535 +I32 +sVbat +p4536 +I34 +sVnewman +p4537 +I4 +sVpereslavl-zalessky +p4538 +I4 +sVdisturb +p4539 +I32 +sVbilliard +p4540 +I32 +sVsnake +p4541 +I36 +sVkiss +p4542 +I40 +sVnear-infrared-spectroscopy +p4543 +I32 +sVconvene +p4544 +I32 +sVfour-alarm +p4545 +I32 +sVrealize +p4546 +I32 +sVpresidential +p4547 +I38 +sVvalve-stem +p4548 +I32 +sVcomedy +p4549 +I32 +sVinstallment +p4550 +I32 +sVbette +p4551 +I2 +sVned +p4552 +I6 +sVtraced +p4553 +I32 +sVmerge +p4554 +I32 +sVpeking +p4555 +I8 +sVbaroque +p4556 +I4 +sVtruth +p4557 +I32 +sVshortage +p4558 +I36 +sVrising +p4559 +I34 +sVbeneath +p4560 +I32 +sVrousseau +p4561 +I4 +sVunderpricing +p4562 +I32 +sValice +p4563 +I14 +sVreproducing +p4564 +I32 +sVenigmatic +p4565 +I32 +sVmets +p4566 +I8 +sVdowd +p4567 +I4 +sVspreckels +p4568 +I4 +sVjudicial +p4569 +I32 +sVdoing +p4570 +I40 +sVstresses +p4571 +I32 +sVsociete +p4572 +I4 +sVtack +p4573 +I32 +sVdeficiency +p4574 +I32 +sVbooks +p4575 +I44 +sVthirteen +p4576 +I2 +sVresuscitate +p4577 +I32 +sVtien +p4578 +I4 +sVrumor +p4579 +I32 +sVagriculture +p4580 +I36 +sVpresplit +p4581 +I32 +sVwitness +p4582 +I40 +sVodds-makers +p4583 +I32 +sVdepository +p4584 +I32 +sVillegitimate +p4585 +I32 +sVsovereign +p4586 +I36 +sVfundamentally +p4587 +I32 +sVlimousines +p4588 +I32 +sVdismissal +p4589 +I32 +sVvalve +p4590 +I32 +sVoverproduction +p4591 +I32 +sVmuch-larger +p4592 +I32 +sViosif +p4593 +I4 +sVleveraged-buyout +p4594 +I32 +sVthiokol +p4595 +I4 +sVmechanism +p4596 +I32 +sVantimissile +p4597 +I32 +sVbunches +p4598 +I32 +sVmotifs +p4599 +I32 +sVhilarious +p4600 +I32 +sVbab +p4601 +I12 +sVhighs +p4602 +I32 +sVczar +p4603 +I32 +sVdisgust +p4604 +I32 +sVshut +p4605 +I32 +sVunwieldy +p4606 +I32 +sVperle +p4607 +I12 +sVindecisive +p4608 +I32 +sVnadzick +p4609 +I4 +sVpecora +p4610 +I4 +sVmarket-research +p4611 +I32 +sVrelease +p4612 +I36 +sVregulators +p4613 +I38 +sVsurely +p4614 +I34 +sVgardner +p4615 +I4 +sVkneale +p4616 +I4 +sVthrust +p4617 +I32 +sVembarrass +p4618 +I32 +sVcordis +p4619 +I14 +sVsteering +p4620 +I32 +sVs.p.a. +p4621 +I4 +sVscary +p4622 +I32 +sVbackless +p4623 +I32 +sVfertility +p4624 +I32 +sVtop-of-the-line +p4625 +I32 +sVspill +p4626 +I36 +sVdubbed +p4627 +I32 +sVtransferable +p4628 +I32 +sVcould +p4629 +I108 +sVunity +p4630 +I32 +sVput +p4631 +I34 +sVvineyards +p4632 +I32 +sVdavid +p4633 +I14 +sVkelton +p4634 +I12 +sVlength +p4635 +I32 +sVratification +p4636 +I32 +sVdryburgh +p4637 +I8 +sVrefinements +p4638 +I32 +sVdavis +p4639 +I12 +sVhussein +p4640 +I4 +sVreceding +p4641 +I32 +sVrelays +p4642 +I32 +sVstimulate +p4643 +I32 +sVlatched +p4644 +I32 +sVkendall +p4645 +I8 +sVsheet-metal +p4646 +I32 +sVjurists +p4647 +I32 +sVdemonstrating +p4648 +I32 +sVobligator +p4649 +I32 +sVyells +p4650 +I32 +sVscene +p4651 +I32 +sVowned +p4652 +I32 +sVdisposed +p4653 +I32 +sVtier +p4654 +I32 +sVmuhammad +p4655 +I12 +sVevolutionary +p4656 +I32 +sVstark +p4657 +I4 +sVnpt +p4658 +I8 +sVowner +p4659 +I32 +sVwoodhead +p4660 +I8 +sVblows +p4661 +I32 +sVcato +p4662 +I4 +sVsummaries +p4663 +I32 +sVcabbage +p4664 +I4 +sVbuoyed +p4665 +I32 +sVnyse +p4666 +I4 +sVlegislative +p4667 +I32 +sVsharon +p4668 +I14 +sVdeceptive +p4669 +I32 +sVfascinating +p4670 +I32 +sVerstwhile +p4671 +I32 +sVstart +p4672 +I36 +sVfestival +p4673 +I36 +sVdetailing +p4674 +I32 +sVsystem +p4675 +I46 +sVupstate +p4676 +I32 +sVforwarder +p4677 +I32 +sVsergeant +p4678 +I32 +sVstate-controlled +p4679 +I32 +sVefficiently +p4680 +I32 +sVwetherby +p4681 +I4 +sVpainful +p4682 +I34 +sVadopts +p4683 +I12 +sVinterests +p4684 +I32 +sVenforcement +p4685 +I36 +sVcreatures +p4686 +I32 +sVco-op +p4687 +I32 +sVvigorous +p4688 +I32 +sVstars +p4689 +I36 +sVragbag +p4690 +I32 +sVchagrin +p4691 +I32 +sVflipped +p4692 +I32 +sVcrnr +p4693 +I4 +sVingersoll +p4694 +I4 +sVdepressing +p4695 +I32 +sVhamadei +p4696 +I4 +sVspecial-events +p4697 +I32 +sVaryan +p4698 +I4 +sVvalencia +p4699 +I4 +sVrecess +p4700 +I32 +sVelite +p4701 +I36 +sVhaven +p4702 +I36 +sVsteel +p4703 +I46 +sVconventional-mortgage +p4704 +I32 +sVcolleagues +p4705 +I34 +sVpre-school +p4706 +I32 +sVwarfare +p4707 +I32 +sVsplit +p4708 +I38 +sVbother +p4709 +I32 +sVroberto +p4710 +I4 +sVreacted +p4711 +I32 +sVextraordinarily +p4712 +I32 +sVtortured +p4713 +I32 +sVroberts +p4714 +I12 +sVfair-skinned +p4715 +I32 +sVlisteners +p4716 +I32 +sVinfo +p4717 +I4 +sVorchestrated +p4718 +I32 +sVmalpractice +p4719 +I32 +sVbriefing +p4720 +I32 +sVnegatively +p4721 +I32 +sVrepented +p4722 +I32 +sVsteep +p4723 +I32 +sVtorrent +p4724 +I32 +sVdevotion +p4725 +I32 +sVcollecting +p4726 +I34 +sVoverpaid +p4727 +I32 +sVinadequacy +p4728 +I32 +sVfalse +p4729 +I36 +sVshrinks +p4730 +I32 +sVemphatically +p4731 +I32 +sVpartnership +p4732 +I100 +sVcost-reduction +p4733 +I32 +sVgentle +p4734 +I32 +sVchrysanthemum +p4735 +I32 +sVdefending +p4736 +I32 +sVdeferring +p4737 +I32 +sVdibacco +p4738 +I8 +sVone-megabit +p4739 +I32 +sVblockbuster +p4740 +I46 +sVamos-lee +p4741 +I4 +sVviewed +p4742 +I36 +sVfinancial-information +p4743 +I32 +sVllx +p4744 +I4 +sVprohibits +p4745 +I32 +sVdocuments +p4746 +I34 +sVbacterium +p4747 +I32 +sVstudying +p4748 +I32 +sVawed +p4749 +I32 +sVmills +p4750 +I36 +sVlikud +p4751 +I4 +sVhangover +p4752 +I32 +sVadjunct +p4753 +I32 +sVsinatra +p4754 +I4 +sVbonanza +p4755 +I4 +sVseidman +p4756 +I12 +sVashore +p4757 +I32 +sVequaling +p4758 +I32 +sVlinda +p4759 +I12 +sVkorean +p4760 +I4 +sVinjunctions +p4761 +I32 +sVlipton +p4762 +I12 +sVsoap +p4763 +I32 +sVtoughest +p4764 +I32 +sVworldwide +p4765 +I36 +sVpete +p4766 +I4 +sVcushman +p4767 +I4 +sVnancy +p4768 +I12 +sVfidel +p4769 +I4 +sVanti-consumer +p4770 +I32 +sVclaremont +p4771 +I12 +sVmandatory +p4772 +I32 +sVill-advised +p4773 +I32 +sVbetter-known +p4774 +I32 +sVwell-managed +p4775 +I32 +sVcourtesy +p4776 +I32 +sVvisa +p4777 +I6 +sVstock-held +p4778 +I32 +sVphilhellene +p4779 +I32 +sVvise +p4780 +I32 +sVdevice +p4781 +I36 +sVmanon +p4782 +I4 +sVfirst-phase +p4783 +I32 +sVsegment +p4784 +I32 +sVhewlett-packard +p4785 +I14 +sVrowdiness +p4786 +I32 +sVso-called +p4787 +I32 +sVlined +p4788 +I32 +sVplacement +p4789 +I36 +sVjosephthal +p4790 +I4 +sVbred +p4791 +I32 +sVstronger +p4792 +I38 +sVface +p4793 +I44 +sVlots +p4794 +I36 +sVperceiving +p4795 +I32 +sVfilene +p4796 +I4 +sVclaudine +p4797 +I8 +sVmechanical +p4798 +I32 +sVbrew +p4799 +I32 +sVwounded +p4800 +I32 +sVtickers +p4801 +I32 +sVfact +p4802 +I32 +sVatmosphere +p4803 +I32 +sVhandleman +p4804 +I10 +sVyellows +p4805 +I32 +sVlymph +p4806 +I32 +sVneck +p4807 +I32 +sVcentralized +p4808 +I32 +sVdisbanded +p4809 +I32 +sVvacancy +p4810 +I96 +sVbring +p4811 +I36 +sVacid-rain +p4812 +I96 +sVlloyd +p4813 +I4 +sVbedroom +p4814 +I32 +sVunconnected +p4815 +I32 +sVscotto +p4816 +I4 +sVdroves +p4817 +I32 +sVtrivial +p4818 +I32 +sVbrink +p4819 +I32 +sVdecade +p4820 +I32 +sVprincipal +p4821 +I40 +sVrouse +p4822 +I32 +sVambient +p4823 +I4 +sVresells +p4824 +I32 +sVjay +p4825 +I6 +sVchampioned +p4826 +I64 +sVtechnicon +p4827 +I4 +sVquickened +p4828 +I32 +sVstumbling +p4829 +I32 +sVex-chairman +p4830 +I40 +sVshould +p4831 +I102 +sVjan +p4832 +I4 +sVsoderblom +p4833 +I12 +sVspontaneity +p4834 +I2 +sVtape +p4835 +I32 +sVprinters +p4836 +I32 +sVriding +p4837 +I32 +sVbourbon +p4838 +I32 +sVearly-deployment +p4839 +I32 +sVmayors +p4840 +I32 +sVhope +p4841 +I36 +sVexchanged +p4842 +I32 +sVjackpot +p4843 +I36 +sVabbe +p4844 +I4 +sVchicago-based +p4845 +I4 +sVcapsules +p4846 +I32 +sVbritish-based +p4847 +I4 +sVchg. +p4848 +I4 +sVmeans +p4849 +I36 +sVfamiliar +p4850 +I32 +sVvtek +p4851 +I4 +sVtouting +p4852 +I32 +sVlucky +p4853 +I38 +sVchronologies +p4854 +I32 +sVautos +p4855 +I44 +sVglassmakers +p4856 +I32 +sVenex +p4857 +I10 +sVexchanges +p4858 +I32 +sVcper +p4859 +I4 +sVcatala-roca +p4860 +I4 +sVshaping +p4861 +I36 +sVcapital-intensive +p4862 +I32 +sVstrollers +p4863 +I32 +sVsmash +p4864 +I32 +sVaes +p4865 +I12 +sVaer +p4866 +I4 +sVcommittees +p4867 +I32 +sVaet +p4868 +I8 +sVhustlings +p4869 +I4 +sVreis +p4870 +I12 +sVdenmark +p4871 +I6 +sVwilmington +p4872 +I12 +sVcomprising +p4873 +I32 +sVtaxes +p4874 +I44 +sVyuppies +p4875 +I32 +sVstuff +p4876 +I36 +sVill.-based +p4877 +I4 +sVallegation +p4878 +I32 +sVsmall-to-mid-sized +p4879 +I32 +sVohio +p4880 +I4 +sVrein +p4881 +I32 +sVfavoring +p4882 +I32 +sVinteriors +p4883 +I4 +sVflopped +p4884 +I32 +sVguessing +p4885 +I32 +sVtemporarily +p4886 +I32 +sVtax-shelter +p4887 +I32 +sVmeleiha +p4888 +I4 +sVbtr +p4889 +I2 +sVcatastrophic +p4890 +I32 +sVframe +p4891 +I4 +sVhorns +p4892 +I32 +sVbty +p4893 +I4 +sVandover +p4894 +I4 +sVdabbling +p4895 +I32 +sVedition +p4896 +I32 +sVfelons +p4897 +I32 +sVsubcommittee +p4898 +I36 +sVquayle +p4899 +I4 +sVbidders +p4900 +I34 +sVbti +p4901 +I8 +sVpacked +p4902 +I32 +sVwears +p4903 +I32 +sVlyon +p4904 +I12 +sVwire +p4905 +I36 +sVextend +p4906 +I32 +sVamtrak +p4907 +I4 +sVnuclear +p4908 +I108 +sVbsbx +p4909 +I12 +sVlenient +p4910 +I32 +sVdistressingly +p4911 +I32 +sVunravel +p4912 +I32 +sVlegitimize +p4913 +I32 +sVnominees +p4914 +I32 +sVharsher +p4915 +I32 +sVpistol +p4916 +I32 +sVreinhardt +p4917 +I4 +sVshiite +p4918 +I6 +sVends +p4919 +I36 +sVfaceless +p4920 +I32 +sVtricky +p4921 +I32 +sVpgulf +p4922 +I8 +sVkanter +p4923 +I12 +sVrevived +p4924 +I32 +sVignorance +p4925 +I32 +sVonetime +p4926 +I32 +sVshanghai +p4927 +I4 +sVkeels +p4928 +I32 +sVwitless +p4929 +I32 +sVhistorians +p4930 +I32 +sVbulgarians +p4931 +I4 +sVinterchangeable +p4932 +I32 +sVboise +p4933 +I4 +sVlawsuit +p4934 +I32 +sVendo +p4935 +I8 +sVwessel +p4936 +I4 +sVliquid-yield +p4937 +I32 +sVrestrictions +p4938 +I32 +sVextendable +p4939 +I32 +sVfigured +p4940 +I32 +sVdrum +p4941 +I32 +sVgoldin +p4942 +I4 +sVchallengers +p4943 +I34 +sVinvited +p4944 +I32 +sVdecay +p4945 +I32 +sVrecorders +p4946 +I32 +sVdeficits +p4947 +I32 +sVdrug +p4948 +I102 +sVtriple-b +p4949 +I32 +sVsynergies +p4950 +I32 +sVharvard +p4951 +I4 +sVfigures +p4952 +I42 +sVbristol +p4953 +I4 +sVlo +p4954 +I32 +sVpuff +p4955 +I32 +sVetn +p4956 +I8 +sVmachine-tool +p4957 +I32 +sVboyer +p4958 +I4 +sVco-artistic +p4959 +I32 +sVhussmann +p4960 +I4 +sVadjusted +p4961 +I98 +sVconclude +p4962 +I32 +sVtaylor +p4963 +I12 +sVmalcolm +p4964 +I6 +sVroughed +p4965 +I32 +sVnear-term +p4966 +I32 +sVallocates +p4967 +I32 +sVneutralist +p4968 +I32 +sVcz +p4969 +I8 +sVindict +p4970 +I32 +sVshare-for-share +p4971 +I32 +sVworksheets +p4972 +I32 +sVcoercive +p4973 +I32 +sVallocated +p4974 +I32 +sVlabor +p4975 +I46 +sVhotsy-totsy +p4976 +I32 +sVcarnivorous +p4977 +I32 +sVmidland +p4978 +I12 +sVdoor-to-door +p4979 +I36 +sVbay-based +p4980 +I4 +sVquotas +p4981 +I38 +sVmoralizing +p4982 +I32 +sVmathematics +p4983 +I32 +sVkahn +p4984 +I14 +sVpoured +p4985 +I32 +sVhuyssteen +p4986 +I4 +sVentitle +p4987 +I32 +sVrichards +p4988 +I4 +sVstances +p4989 +I32 +sVhottest +p4990 +I32 +sVwaste +p4991 +I32 +sVlouisiana +p4992 +I12 +sVstatesmanlike +p4993 +I32 +sVtrinity +p4994 +I4 +sVhigh-rise +p4995 +I32 +sVtyranny +p4996 +I32 +sVcommandos +p4997 +I32 +sVlgn +p4998 +I4 +sVc. +p4999 +I6 +sVvaluations +p5000 +I32 +sVslumping +p5001 +I32 +sVcrisscross +p5002 +I32 +sVrioting +p5003 +I32 +sVcoherence +p5004 +I32 +sVrecounts +p5005 +I32 +sVcommuted +p5006 +I32 +sVglobe-trot +p5007 +I32 +sVshop +p5008 +I36 +sVaccident +p5009 +I32 +sVinductance +p5010 +I32 +sVgraphics +p5011 +I36 +sVviolators +p5012 +I32 +sVatlanta +p5013 +I14 +sVsuzdal +p5014 +I4 +sVcoffee-growing +p5015 +I32 +sVcountermeasures +p5016 +I32 +sVsemantical +p5017 +I32 +sVspecious +p5018 +I32 +sVbalanchine +p5019 +I4 +sVcvn +p5020 +I8 +sVeaton +p5021 +I4 +sVexpiration +p5022 +I32 +sVeastbound +p5023 +I32 +sVtharp +p5024 +I4 +sVdeductible +p5025 +I32 +sVfielding +p5026 +I32 +sVforsythe +p5027 +I12 +sVchernobyl +p5028 +I4 +sVhalsor +p5029 +I8 +sVconcerted +p5030 +I32 +sVve +p5031 +I34 +sVvf +p5032 +I14 +sVomni +p5033 +I4 +sVunit-trust +p5034 +I32 +sVdiversification +p5035 +I32 +sVdelaying +p5036 +I32 +sVsite +p5037 +I36 +sVlaundering +p5038 +I32 +sVcontagion +p5039 +I32 +sVlust +p5040 +I32 +sVbank-dallas +p5041 +I4 +sVexcessively +p5042 +I32 +sVbaryshnikov +p5043 +I4 +sVtenor +p5044 +I32 +sVtoxicity +p5045 +I32 +sVon-call +p5046 +I32 +sVsits +p5047 +I32 +sVlunatic +p5048 +I32 +sVamadou-mahtar +p5049 +I2 +sVtabak +p5050 +I4 +sVdenial +p5051 +I34 +sVinformant +p5052 +I32 +sVinsight +p5053 +I32 +sVmicrosystems +p5054 +I4 +sVconcealing +p5055 +I32 +sVpauls +p5056 +I4 +sVblissful +p5057 +I32 +sVnerd +p5058 +I32 +sVpaulo +p5059 +I4 +sVmatthew +p5060 +I4 +sVconcealed +p5061 +I32 +sVjenner +p5062 +I8 +sVtempestuous +p5063 +I32 +sVgibbs +p5064 +I12 +sVariz. +p5065 +I4 +sVsoundness +p5066 +I32 +sVterrorism +p5067 +I32 +sVconglomerateur +p5068 +I32 +sVunforgivable +p5069 +I32 +sVpopularized +p5070 +I32 +sVpaula +p5071 +I4 +sVivanov +p5072 +I4 +sVconflicting +p5073 +I32 +sVbalm +p5074 +I32 +sVball +p5075 +I44 +sVcolumbia +p5076 +I4 +sVraymond +p5077 +I6 +sVemotionally +p5078 +I32 +sVassuaging +p5079 +I32 +sVpha +p5080 +I4 +sVdrink +p5081 +I32 +sVupon +p5082 +I32 +sVnationally +p5083 +I34 +sVv. +p5084 +I4 +sVforecasts +p5085 +I32 +sVpresentations +p5086 +I32 +sVfiddler +p5087 +I32 +sVarchitectures +p5088 +I32 +sVdistinction +p5089 +I32 +sVdust +p5090 +I36 +sVafghan +p5091 +I4 +sVcolts +p5092 +I4 +sVmilpitas +p5093 +I4 +sVexpand +p5094 +I32 +sVaudit +p5095 +I32 +sVpriest +p5096 +I32 +sVoff +p5097 +I36 +sVforty-eight +p5098 +I4 +sVharrisburg +p5099 +I8 +sVadapted +p5100 +I32 +sVreichstuhl +p5101 +I4 +sVnine-to-10-month +p5102 +I32 +sVsoutheastern +p5103 +I4 +sVpatterns +p5104 +I32 +sVcommand +p5105 +I36 +sVcredibility +p5106 +I32 +sVformat +p5107 +I32 +sVhouston-based +p5108 +I4 +sVdiversify +p5109 +I32 +sVaudio +p5110 +I32 +sVdecreased +p5111 +I32 +sVdrawing +p5112 +I32 +sVnorth-south +p5113 +I32 +sVrenegotiated +p5114 +I32 +sVlest +p5115 +I32 +sVbraniff +p5116 +I4 +sVlaffer +p5117 +I4 +sVnewest +p5118 +I32 +sVrestructure +p5119 +I32 +sVpsc +p5120 +I4 +sVflesh +p5121 +I32 +sVmoments +p5122 +I32 +sVnsany +p5123 +I4 +sVglut +p5124 +I32 +sVprotections +p5125 +I32 +sVgenesee +p5126 +I4 +sVmonteverdi +p5127 +I6 +sVtrust +p5128 +I100 +sVbrenton +p5129 +I4 +sVrooms +p5130 +I32 +sVpredicts +p5131 +I32 +sVday-to-day +p5132 +I32 +sVbltb +p5133 +I8 +sVpaul +p5134 +I14 +sVassn +p5135 +I4 +sVexpert +p5136 +I32 +sVweb +p5137 +I32 +sVgenerous +p5138 +I32 +sVrusch +p5139 +I4 +sVwed +p5140 +I32 +sVresidential +p5141 +I34 +sVzinberg +p5142 +I8 +sVsickened +p5143 +I32 +sVwen +p5144 +I8 +sVtoyed +p5145 +I32 +sVoutlines +p5146 +I32 +sVarrest +p5147 +I32 +sVterminating +p5148 +I32 +sVcombine +p5149 +I32 +sVcombing +p5150 +I32 +sVwide-body +p5151 +I32 +sVrenominate +p5152 +I32 +sVirresponsible +p5153 +I32 +sVrobelo +p5154 +I12 +sVchiles +p5155 +I12 +sVincreased +p5156 +I42 +sVgovernment +p5157 +I110 +sVchecking +p5158 +I32 +sVchancellor +p5159 +I36 +sVthicker +p5160 +I32 +sVrubin +p5161 +I4 +sVincreases +p5162 +I44 +sVheadlining +p5163 +I32 +sVfive +p5164 +I102 +sVpremature +p5165 +I32 +sVventer +p5166 +I4 +sVsupervise +p5167 +I32 +sVwhopping +p5168 +I32 +sVgenes +p5169 +I32 +sVpassword +p5170 +I32 +sVun-reagan-like +p5171 +I32 +sVdescendant +p5172 +I32 +sVprivatize +p5173 +I4 +sVleblond +p5174 +I4 +sVcrisp +p5175 +I32 +sVnon-utility +p5176 +I32 +sVprospekt +p5177 +I32 +sVcanyon +p5178 +I6 +sVaccelerating +p5179 +I32 +sVl. +p5180 +I4 +sVerasable +p5181 +I32 +sVimmunity +p5182 +I32 +sVundertaking +p5183 +I32 +sVreform-minded +p5184 +I32 +sVbecome +p5185 +I32 +sVemmy +p5186 +I4 +sVmhp +p5187 +I8 +sVtherapeutic +p5188 +I32 +sVamendment +p5189 +I36 +sVgaining +p5190 +I32 +sVindications +p5191 +I34 +sVgo-between +p5192 +I32 +sVliquidation +p5193 +I32 +sVguaranty +p5194 +I4 +sVactuarial +p5195 +I32 +sVforeseeable +p5196 +I32 +sVoversubscribed +p5197 +I32 +sVhemming +p5198 +I12 +sVinteract +p5199 +I32 +sVrotondo +p5200 +I12 +sVilliquidity +p5201 +I32 +sVdeed +p5202 +I32 +sVnobodies +p5203 +I32 +sVpezim +p5204 +I12 +sVgymnastics +p5205 +I32 +sVanimal-health +p5206 +I32 +sVjanesville +p5207 +I4 +sVrepackaging +p5208 +I32 +sVbirdwell +p5209 +I12 +sVspiraling +p5210 +I32 +sVballot +p5211 +I32 +sVhumming +p5212 +I32 +sVrecognition +p5213 +I32 +sVlibyans +p5214 +I4 +sVpromoter +p5215 +I32 +sVunocal +p5216 +I6 +sVdisbelief +p5217 +I32 +sVsufficiently +p5218 +I32 +sVjust-in-time +p5219 +I32 +sVliterally +p5220 +I32 +sVavoid +p5221 +I36 +sVperils +p5222 +I32 +sVdoel +p5223 +I4 +sVslipping +p5224 +I32 +sVsalaries +p5225 +I38 +sVmeier +p5226 +I4 +sVdisk +p5227 +I40 +sVanguished +p5228 +I32 +sVnegatives +p5229 +I32 +sVsustain +p5230 +I32 +sVpassion +p5231 +I32 +sVnuclear-strategy +p5232 +I32 +sVelsinore +p5233 +I2 +sVforgiven +p5234 +I32 +sVreimbursements +p5235 +I32 +sVhectic +p5236 +I32 +sVunion-backed +p5237 +I32 +sVfazio +p5238 +I4 +sVtop-grade +p5239 +I32 +sVprintable +p5240 +I32 +sVdeciding +p5241 +I32 +sVbiology +p5242 +I32 +sVblowing +p5243 +I32 +sVpersio +p5244 +I4 +sVschedule +p5245 +I32 +sVselecting +p5246 +I32 +sVcopycat +p5247 +I4 +sVforks +p5248 +I4 +sVpressure +p5249 +I100 +sVaccompanied +p5250 +I34 +sVproceeded +p5251 +I32 +sVdiaper +p5252 +I32 +sVloans +p5253 +I44 +sVcoldly +p5254 +I32 +sVvs. +p5255 +I32 +sVstage +p5256 +I32 +sVgained +p5257 +I96 +sVmoines-based +p5258 +I4 +sVsister +p5259 +I32 +sVasks +p5260 +I52 +sVdebentures +p5261 +I100 +sVissuance +p5262 +I32 +sVshoes +p5263 +I32 +sVangeles +p5264 +I4 +sVunion +p5265 +I46 +sVseeds +p5266 +I32 +sVseven-member +p5267 +I32 +sVyawata +p5268 +I4 +sVcomers +p5269 +I32 +sVinsufficient +p5270 +I32 +sVglasses +p5271 +I32 +sVdocumentary +p5272 +I32 +sVsubcompact +p5273 +I32 +sVrevise +p5274 +I32 +sVsoftware +p5275 +I36 +sValliance +p5276 +I36 +sg90 +I40 +sVunattractive +p5277 +I96 +sVrectify +p5278 +I32 +sVcatherine +p5279 +I4 +sVcommitment +p5280 +I96 +sVreferendum +p5281 +I32 +sVscreamed +p5282 +I32 +sVbanca +p5283 +I4 +sVlung +p5284 +I32 +sVerect +p5285 +I32 +sVhubert +p5286 +I4 +sVinroads +p5287 +I32 +sVroads +p5288 +I32 +sVsuitors +p5289 +I32 +sVmerc +p5290 +I4 +sVcharities +p5291 +I32 +sVpritzker +p5292 +I12 +sVterminated +p5293 +I36 +sVspouse +p5294 +I32 +sVyen-dollar +p5295 +I32 +sVbasie +p5296 +I4 +sVhousing +p5297 +I102 +sVfaster-growing +p5298 +I32 +sVspots +p5299 +I32 +sVbiocraft +p5300 +I10 +sVtylenol +p5301 +I4 +sVstartled +p5302 +I32 +sVmassenet +p5303 +I6 +sVfrustration +p5304 +I32 +sVdistillers +p5305 +I4 +sVwork-force +p5306 +I32 +sVoutpacing +p5307 +I32 +sVspecimens +p5308 +I32 +sVtoothpaste +p5309 +I32 +sVflynn +p5310 +I8 +sVnaturally +p5311 +I34 +sVfunction +p5312 +I36 +sVfiscal +p5313 +I44 +sVreferrals +p5314 +I32 +sVcomplacency +p5315 +I32 +sVlaser-related +p5316 +I32 +sVforeclosed +p5317 +I32 +sVglobo +p5318 +I4 +sVfunnier +p5319 +I32 +sVdeja +p5320 +I32 +sVsidestepped +p5321 +I32 +sVdelivery +p5322 +I32 +sVconstruction +p5323 +I44 +sVblack-cowboy +p5324 +I32 +sVdelivers +p5325 +I32 +sVapollo +p5326 +I4 +sVgrata +p5327 +I32 +sVsodium-borohydride +p5328 +I32 +sVt-lymphotropic +p5329 +I4 +sVcount +p5330 +I36 +sVrejuvenate +p5331 +I32 +sVplaces +p5332 +I34 +sVsociety +p5333 +I36 +sVjasinowski +p5334 +I12 +sVofficial +p5335 +I108 +sVsmooth +p5336 +I32 +sVtriumphant +p5337 +I32 +sVimbalances +p5338 +I32 +sVexcitement +p5339 +I32 +sVplaced +p5340 +I36 +sVconvince +p5341 +I32 +sVcommon-stock +p5342 +I32 +sVunguaranteed +p5343 +I2 +sVnominations +p5344 +I32 +sVman-to-man +p5345 +I32 +sVodds +p5346 +I32 +sVprofusion +p5347 +I32 +sVbearing +p5348 +I32 +sVirish +p5349 +I6 +sVquarries +p5350 +I32 +sVtenafly +p5351 +I4 +sVburger +p5352 +I12 +sVrecognize +p5353 +I32 +sVcontribute +p5354 +I32 +sVcultivating +p5355 +I32 +sVslowing +p5356 +I32 +sViverson +p5357 +I4 +sVweston +p5358 +I4 +sVconsumed +p5359 +I32 +sVkhalq +p5360 +I4 +sVreplica +p5361 +I32 +sVfather-in-law +p5362 +I32 +sVini +p5363 +I4 +sVbg +p5364 +I4 +sVink +p5365 +I32 +sVcontractionary +p5366 +I32 +sVrankings +p5367 +I32 +sVing +p5368 +I4 +sVjesse +p5369 +I2 +sVdefense-electronics +p5370 +I32 +sVship-to-stock +p5371 +I32 +sVl.f. +p5372 +I4 +sVcompared +p5373 +I42 +sVsemi-rut +p5374 +I32 +sVspit +p5375 +I32 +sVagreed-upon +p5376 +I32 +sVvariety +p5377 +I32 +sVtrials +p5378 +I32 +sVfavored-nation +p5379 +I32 +sVleisure-time +p5380 +I32 +sVmaryinsky +p5381 +I4 +sVlately +p5382 +I34 +sVatorino +p5383 +I4 +sVcompares +p5384 +I32 +sVdetails +p5385 +I34 +sVquantities +p5386 +I32 +sVhpc +p5387 +I4 +sVbehold +p5388 +I32 +sVgallantly +p5389 +I32 +sVmound +p5390 +I32 +sVvirtues +p5391 +I32 +sVmellifluously +p5392 +I32 +sVfrancisco +p5393 +I4 +sVmonday +p5394 +I14 +sVbailing +p5395 +I32 +sVmclellan +p5396 +I12 +sVembracing +p5397 +I32 +sVoutlets +p5398 +I32 +sVoff-brand +p5399 +I32 +sVbaffling +p5400 +I32 +sVharrah +p5401 +I12 +sVchance +p5402 +I32 +sVarbiter +p5403 +I4 +sVtinier +p5404 +I32 +sVskimmed +p5405 +I32 +sVnicest +p5406 +I32 +sVmultinationals +p5407 +I32 +sVrepeal +p5408 +I36 +sVmastermind +p5409 +I32 +sVvein +p5410 +I32 +sVexposure +p5411 +I32 +sVmentz +p5412 +I4 +sVmozart +p5413 +I4 +sVhoots +p5414 +I32 +sVtransports +p5415 +I32 +sVundercutting +p5416 +I32 +sVspokesmen +p5417 +I34 +sVamitai +p5418 +I8 +sVrule +p5419 +I36 +sVgardena +p5420 +I4 +sVaetna +p5421 +I10 +sVtorrid +p5422 +I32 +sVlift +p5423 +I32 +sVcompete +p5424 +I32 +sVpension +p5425 +I36 +sVsearched +p5426 +I32 +sVrural +p5427 +I32 +sVtax-exempt +p5428 +I32 +sVabhor +p5429 +I32 +sVunspeakable +p5430 +I32 +sVbuoy +p5431 +I32 +sVgadhafi +p5432 +I12 +sVsearle +p5433 +I14 +sVsuicidal +p5434 +I32 +sVclamoring +p5435 +I32 +sVtornto +p5436 +I4 +sVsurrounding +p5437 +I32 +sVconsolidated +p5438 +I46 +sVmagnetic +p5439 +I32 +sVsaves +p5440 +I32 +sVdesirable +p5441 +I32 +sVcleveland-cliffs +p5442 +I10 +sVnursery +p5443 +I4 +sVcontroversial +p5444 +I32 +sVbermon +p5445 +I12 +sVmansion +p5446 +I32 +sVmccann-erickson +p5447 +I4 +sVonions +p5448 +I32 +sVoldest +p5449 +I32 +sVrekindle +p5450 +I32 +sVguarini +p5451 +I8 +sVskeleton +p5452 +I4 +sVethics +p5453 +I36 +sVoslo +p5454 +I10 +sVvotes +p5455 +I32 +sVminer +p5456 +I32 +sVlopped +p5457 +I32 +sVunanimity +p5458 +I32 +sVspeeded +p5459 +I32 +sVpunjab +p5460 +I4 +sVcjn +p5461 +I4 +sVpatsy +p5462 +I32 +sVself-destruct +p5463 +I32 +sVgupta +p5464 +I4 +sVinvaders +p5465 +I32 +sVedward +p5466 +I14 +sVvoted +p5467 +I36 +sVheavy-truck +p5468 +I32 +sVcwm +p5469 +I8 +sVregan +p5470 +I12 +sVchill +p5471 +I4 +sVregalia +p5472 +I32 +sVworth +p5473 +I36 +sVoverpaying +p5474 +I32 +sValternating +p5475 +I32 +sVmohammad +p5476 +I4 +sVeight-tenths +p5477 +I32 +sVblistering +p5478 +I32 +sVnonresidential +p5479 +I32 +sVstud +p5480 +I36 +sVtudor +p5481 +I4 +sVwausau +p5482 +I4 +sVgalinsky +p5483 +I4 +sVaurora +p5484 +I4 +sVpersonal-income +p5485 +I32 +sVone-week +p5486 +I32 +sVsheridan +p5487 +I4 +sVsyrian-lebanese +p5488 +I4 +sVsellers +p5489 +I32 +sVshoot +p5490 +I32 +sVsanf +p5491 +I4 +sVclymer +p5492 +I8 +sVcurrent-dollar +p5493 +I32 +sVpropaganda +p5494 +I32 +sVwashboard +p5495 +I32 +sVjacob +p5496 +I4 +sVtank +p5497 +I32 +sVmonth +p5498 +I38 +sVsuccumbing +p5499 +I32 +sVpostpone +p5500 +I32 +sVmanagerial +p5501 +I32 +sVchapel +p5502 +I12 +sVtickets +p5503 +I36 +sVhess +p5504 +I4 +sVabhorrence +p5505 +I32 +sVprogression +p5506 +I32 +sVinvestigator +p5507 +I32 +sVpinch +p5508 +I32 +sVcmd +p5509 +I4 +sVcmb +p5510 +I8 +sVrelentlessly +p5511 +I32 +sVnigger +p5512 +I32 +sVmonsanto +p5513 +I6 +sVred +p5514 +I36 +sVcoalesced +p5515 +I32 +sVflag +p5516 +I32 +sVabolishing +p5517 +I32 +sVartist +p5518 +I32 +sVlbr +p5519 +I4 +sVall-knowing +p5520 +I32 +sVshedding +p5521 +I32 +sVfliers +p5522 +I34 +sVjamaica +p5523 +I4 +sVpaperback +p5524 +I32 +sVdaring +p5525 +I32 +sVdiverting +p5526 +I32 +sVmid +p5527 +I32 +sVwnews +p5528 +I12 +sVphones +p5529 +I32 +sVforeigner +p5530 +I32 +sVmidsummer +p5531 +I32 +sVmadcap +p5532 +I10 +sVedges +p5533 +I4 +sVpreacher +p5534 +I32 +sVcontortionists +p5535 +I32 +sVcall-ups +p5536 +I32 +sVguillotine +p5537 +I32 +sVsls +p5538 +I8 +sVanti-lawyer +p5539 +I32 +sVmachines +p5540 +I36 +sVpaulette +p5541 +I4 +sVestablished +p5542 +I32 +sVtransportations +p5543 +I4 +sVpeladeau +p5544 +I4 +sVcooperating +p5545 +I32 +sVfood-service +p5546 +I32 +sVugly +p5547 +I32 +sVdeclassified +p5548 +I32 +sVbounties +p5549 +I32 +sVparasitical +p5550 +I32 +sVwalkout +p5551 +I32 +sVkilowatt-hours +p5552 +I32 +sVlardner +p5553 +I4 +sVlondon-based +p5554 +I4 +sVseemann +p5555 +I8 +sVabove +p5556 +I34 +sVtoll +p5557 +I36 +sVchurches +p5558 +I32 +sVofficially +p5559 +I36 +sVconsisting +p5560 +I96 +sVtold +p5561 +I36 +sVpersonifies +p5562 +I32 +sVsynthetic +p5563 +I32 +sVex-military +p5564 +I32 +sVwiedemann +p5565 +I8 +sVsimultaneously +p5566 +I32 +sVwinegardner +p5567 +I12 +sVmultifamily +p5568 +I32 +sVadmirers +p5569 +I32 +sVpreferred-stock +p5570 +I32 +sVconglomerate +p5571 +I32 +sVprotection +p5572 +I36 +sVpursuit +p5573 +I32 +sVpersonified +p5574 +I32 +sVblack-led +p5575 +I32 +sVincarcerated +p5576 +I32 +sVlytle +p5577 +I12 +sVschiff +p5578 +I4 +sVobtained +p5579 +I32 +sVqua +p5580 +I32 +sVovercall +p5581 +I32 +sVwatchers +p5582 +I32 +sVdaughter +p5583 +I32 +sVcredentials +p5584 +I32 +sVsang +p5585 +I32 +sVitems +p5586 +I32 +sVstudy +p5587 +I108 +sVenvoy +p5588 +I32 +sVbloomington +p5589 +I4 +sVadopt +p5590 +I32 +sVpreceding +p5591 +I32 +sVdusty +p5592 +I32 +sVslb +p5593 +I8 +sVsmoke +p5594 +I32 +sVstressed +p5595 +I32 +sVcalculators +p5596 +I32 +sVpostponed +p5597 +I100 +sVuniforms +p5598 +I32 +sVanthophyllite +p5599 +I32 +sVglittering +p5600 +I32 +sVdiameter +p5601 +I32 +sVdealing-room +p5602 +I32 +sVwyoming +p5603 +I4 +sVcrickets +p5604 +I32 +sVsecure +p5605 +I32 +sVdisarmed +p5606 +I32 +sVinequitable +p5607 +I32 +sVpeabody +p5608 +I12 +sVhighly +p5609 +I32 +sVneutrons +p5610 +I32 +sVregulatory +p5611 +I36 +sVthursday +p5612 +I6 +sVfairchild +p5613 +I4 +sVcompulsively +p5614 +I32 +sVglance +p5615 +I36 +sVtotal +p5616 +I46 +sVleak-rate +p5617 +I32 +sVpre-nuptial +p5618 +I32 +sVplot +p5619 +I32 +sVplow +p5620 +I32 +sVpatchwork +p5621 +I4 +sVpalestinian +p5622 +I4 +sVcommissioned +p5623 +I32 +sVgloss +p5624 +I32 +sVploy +p5625 +I32 +sVnegative +p5626 +I32 +sVwell-trained +p5627 +I32 +sVinsult +p5628 +I32 +sVcocktail +p5629 +I32 +sVdicey +p5630 +I32 +sVdeep-rooted +p5631 +I32 +sVshies +p5632 +I32 +sVassiduously +p5633 +I32 +sVminolta +p5634 +I4 +sVindiana +p5635 +I4 +sVlio +p5636 +I8 +sVadministering +p5637 +I32 +sVreevaluate +p5638 +I32 +sVzeroed +p5639 +I32 +sVmodification +p5640 +I32 +sVtwo-pronged +p5641 +I32 +sVinfusion +p5642 +I36 +sVaward +p5643 +I44 +sVaware +p5644 +I32 +sVhigh-limit +p5645 +I32 +sVregrouping +p5646 +I32 +sVlistened +p5647 +I32 +sVincompetent +p5648 +I32 +sVseparates +p5649 +I32 +sVcontinual +p5650 +I32 +sVadamant +p5651 +I32 +sVstriving +p5652 +I32 +sVblocking +p5653 +I32 +sVharnessing +p5654 +I32 +sVtnt +p5655 +I6 +sVword +p5656 +I36 +sVbowman +p5657 +I32 +sVdivorced +p5658 +I32 +sVpermits +p5659 +I32 +sVpresentation +p5660 +I32 +sVwork +p5661 +I38 +sVrefusing +p5662 +I32 +sVworn +p5663 +I32 +sVtheories +p5664 +I38 +sVremedies +p5665 +I32 +sVgroves +p5666 +I8 +sVerg +p5667 +I4 +sVwinnick +p5668 +I4 +sVera +p5669 +I32 +sVmechanic +p5670 +I32 +sVcontainment +p5671 +I32 +sVtnm +p5672 +I4 +sVupscale +p5673 +I32 +sVern +p5674 +I4 +sVginger-haired +p5675 +I32 +sVhyperinflation +p5676 +I32 +sVscripting +p5677 +I32 +sVsalesman +p5678 +I32 +sVworkstations +p5679 +I40 +sVindicated +p5680 +I96 +sVcited +p5681 +I36 +sVbennett +p5682 +I8 +sVindia +p5683 +I14 +sVuaw +p5684 +I4 +sVindicates +p5685 +I32 +sVmarco +p5686 +I4 +sVesther +p5687 +I4 +sVwalsh +p5688 +I4 +sVual +p5689 +I14 +sVshort-year +p5690 +I32 +sVuac +p5691 +I4 +sValtitudes +p5692 +I32 +sVcites +p5693 +I96 +sVtotaled +p5694 +I40 +sVsix-figure +p5695 +I32 +sVsweethearts +p5696 +I32 +sVfortifying +p5697 +I32 +sVrecovery +p5698 +I36 +sVfarce +p5699 +I32 +sVcarriers +p5700 +I100 +sVprovide +p5701 +I32 +sVrationed +p5702 +I32 +sVindirectly +p5703 +I32 +sVnuts +p5704 +I32 +sVthen-preeminent +p5705 +I32 +sVshamberg +p5706 +I12 +sVvery +p5707 +I32 +sVchum +p5708 +I32 +sVdisappear +p5709 +I32 +sVrookie +p5710 +I32 +sVboats +p5711 +I32 +sVordinary +p5712 +I32 +sVbeach +p5713 +I36 +sVoffshore +p5714 +I38 +sVpizza +p5715 +I38 +sVclassifying +p5716 +I32 +sVeurodollar +p5717 +I14 +sVtattered +p5718 +I32 +sVtransforming +p5719 +I32 +sVladder +p5720 +I32 +sVafter +p5721 +I110 +sVhong +p5722 +I12 +sVlab +p5723 +I32 +sVcustoms +p5724 +I44 +sVtheatricality +p5725 +I32 +sVhalliburton +p5726 +I12 +sVboczek +p5727 +I4 +sVlay +p5728 +I36 +sVfarmer-borrower +p5729 +I32 +sVmidlands +p5730 +I4 +sVlau +p5731 +I4 +sVstrategists +p5732 +I96 +sVlaw +p5733 +I108 +sVmeaningful +p5734 +I32 +sVheaddress +p5735 +I32 +sVlas +p5736 +I14 +sVfrazzano +p5737 +I12 +sVlunchmates +p5738 +I32 +sVchilled +p5739 +I32 +sVrepeats +p5740 +I32 +sVaustere +p5741 +I32 +sVathletics +p5742 +I32 +sVweathermen +p5743 +I32 +sValienate +p5744 +I32 +sVgreer +p5745 +I4 +sVschneider +p5746 +I12 +sVhomeowners +p5747 +I32 +sVappreciate +p5748 +I32 +sVscare +p5749 +I32 +sVsupermarkets +p5750 +I4 +sVgreek +p5751 +I6 +sVdoilies +p5752 +I32 +sVrogue +p5753 +I32 +sVgreen +p5754 +I44 +sVplotted +p5755 +I32 +sVmass.-based +p5756 +I4 +sVfan +p5757 +I32 +sVorder +p5758 +I36 +sVgreed +p5759 +I36 +sVnutley +p5760 +I4 +sVcommunity-center +p5761 +I32 +sVsalon +p5762 +I32 +sVtoaster +p5763 +I32 +sVoffice +p5764 +I36 +sVclaimant +p5765 +I32 +sVconsent +p5766 +I32 +sVtandem +p5767 +I4 +sVprospering +p5768 +I32 +sVzen +p5769 +I4 +sVsatisfied +p5770 +I32 +sVproportionate +p5771 +I32 +sVuntaxed +p5772 +I32 +sVfinest +p5773 +I32 +sVfrequency +p5774 +I32 +sVinnovative +p5775 +I32 +sVjapan +p5776 +I14 +sVslimmer +p5777 +I32 +sVpatronized +p5778 +I32 +sVmayor +p5779 +I38 +sVbombing +p5780 +I32 +sVappeasement +p5781 +I32 +sVnear-quadrupling +p5782 +I32 +sViaea +p5783 +I4 +sVair-conditioner +p5784 +I32 +sVdefrauded +p5785 +I32 +sVsomewhere +p5786 +I44 +sVhighlights +p5787 +I40 +sVrecreational +p5788 +I32 +sVdenver +p5789 +I12 +sVclearances +p5790 +I32 +sVtrager +p5791 +I4 +sVproduction +p5792 +I38 +sVworkable +p5793 +I32 +sVprecipitate +p5794 +I32 +sVvern +p5795 +I4 +sVmicrocomputer +p5796 +I12 +sVharmony +p5797 +I36 +sVversus +p5798 +I32 +sVeventually +p5799 +I106 +sVthem +p5800 +I32 +sVaffected +p5801 +I96 +sVoverstates +p5802 +I32 +sVbans +p5803 +I32 +sVthree-ring +p5804 +I32 +sVae-1 +p5805 +I4 +sVsafe +p5806 +I32 +sVbreau +p5807 +I8 +sVexpressionist +p5808 +I4 +sVbreak +p5809 +I32 +sVband +p5810 +I32 +sVbang +p5811 +I36 +sVgiraffe +p5812 +I32 +sVpenetration +p5813 +I32 +sVthalmann +p5814 +I4 +sg22 +I46 +sVlacks +p5815 +I32 +sVfour-share +p5816 +I32 +sVjesus +p5817 +I4 +sVtuxedo +p5818 +I32 +sVbank +p5819 +I110 +sVbread +p5820 +I32 +sVapocryphally +p5821 +I32 +sVwhoop +p5822 +I32 +sVvidal +p5823 +I4 +sVrocky +p5824 +I36 +sVoxygen +p5825 +I32 +sVfails +p5826 +I44 +sVlorimar-telepictures +p5827 +I8 +sVreasonably +p5828 +I32 +sVclassified +p5829 +I32 +sVabsolve +p5830 +I32 +sVrocks +p5831 +I32 +sVw-4s +p5832 +I4 +sVneeding +p5833 +I32 +sVreasonable +p5834 +I32 +sVmissouri +p5835 +I4 +sVanastasio +p5836 +I4 +sVentitled +p5837 +I32 +sVcarlos +p5838 +I4 +sVcircled +p5839 +I32 +sVlifted +p5840 +I32 +sVschemes +p5841 +I32 +sVobservance +p5842 +I32 +sVevolve +p5843 +I32 +sVcouncils +p5844 +I32 +sVdumping +p5845 +I34 +sVtransient +p5846 +I32 +sVcrimes +p5847 +I32 +sVvancouver-based +p5848 +I4 +sVgatherings +p5849 +I32 +sVhosted +p5850 +I32 +sVlogo +p5851 +I32 +sVratepayers +p5852 +I32 +sVrecognizable +p5853 +I32 +sVslew +p5854 +I32 +sVburnham +p5855 +I4 +sVfusillade +p5856 +I32 +sVcompany-operated +p5857 +I32 +sVwarships +p5858 +I32 +sVnetwork +p5859 +I44 +sVcorona +p5860 +I4 +sVcameras +p5861 +I38 +sVvessels +p5862 +I32 +sVrefractory +p5863 +I4 +sVstrangers +p5864 +I32 +sVforte +p5865 +I32 +sVdaniel +p5866 +I14 +sVweighted +p5867 +I32 +sVbraces +p5868 +I32 +sVdrawn-out +p5869 +I32 +sVmedicine +p5870 +I36 +sVprank +p5871 +I32 +sVforth +p5872 +I32 +sVsliding +p5873 +I32 +sVdisagreements +p5874 +I32 +sVdishwashers +p5875 +I32 +sVoskar +p5876 +I4 +sVdisputed +p5877 +I36 +sVbarrier +p5878 +I32 +sVhung +p5879 +I36 +sVveto +p5880 +I32 +sVtops +p5881 +I32 +sVcovenants +p5882 +I32 +sVstandard +p5883 +I46 +sVcampaigns +p5884 +I36 +sVamsterdam-based +p5885 +I4 +sVappointments +p5886 +I32 +sVdisputes +p5887 +I38 +sVrubric +p5888 +I32 +sVamadeus +p5889 +I4 +sVcash-rich +p5890 +I32 +sVcomplied +p5891 +I32 +sVamazement +p5892 +I32 +sVenlightened +p5893 +I32 +sVbilion +p5894 +I32 +sVmuller +p5895 +I12 +sVcertified +p5896 +I44 +sVrenee +p5897 +I4 +sVdelves +p5898 +I32 +sVstaggers +p5899 +I32 +sVunfulfilled +p5900 +I4 +sVsavannah +p5901 +I4 +sVcreated +p5902 +I34 +sVratepayer +p5903 +I32 +sVasinof +p5904 +I4 +sVrefugee +p5905 +I32 +sVcourter +p5906 +I12 +sVshunted +p5907 +I32 +sVcreates +p5908 +I32 +sVlousy +p5909 +I32 +sVrenew +p5910 +I32 +sVdouble-a-3 +p5911 +I32 +sVoppose +p5912 +I32 +sVincorporated +p5913 +I32 +sVsolicitousness +p5914 +I32 +sVcondom +p5915 +I32 +sVtijuana +p5916 +I4 +sVchopped +p5917 +I32 +sVflick +p5918 +I4 +sVmeshed +p5919 +I4 +sVdaunting +p5920 +I32 +sVrender +p5921 +I32 +sVchased +p5922 +I32 +sVrailroads +p5923 +I36 +sVimplicates +p5924 +I8 +sVbucksbaum +p5925 +I12 +sVwasteful +p5926 +I32 +sVemploying +p5927 +I32 +sVdoling +p5928 +I32 +sVanother +p5929 +I110 +sVimplicated +p5930 +I32 +sVrats +p5931 +I32 +sVthick +p5932 +I32 +sVrealistically +p5933 +I36 +sVelectronic +p5934 +I38 +sVcentrifuge +p5935 +I32 +sVtimothy +p5936 +I4 +sVrated +p5937 +I32 +sVhedging +p5938 +I32 +sVrejects +p5939 +I36 +sVself-policing +p5940 +I32 +sVtakeovers +p5941 +I36 +sVprotracted +p5942 +I32 +sVapproximately +p5943 +I34 +sVplentiful +p5944 +I32 +sVairs +p5945 +I32 +sVcompromise +p5946 +I32 +sVupshot +p5947 +I32 +sVjohn +p5948 +I14 +sVdogs +p5949 +I32 +sVdamaging +p5950 +I32 +sVoft-stated +p5951 +I32 +sVkiwi +p5952 +I4 +sVunauthorized +p5953 +I32 +sVdecentralize +p5954 +I32 +sVbelton +p5955 +I4 +sVpaltry +p5956 +I32 +sVenhancing +p5957 +I32 +sVoffhand +p5958 +I32 +sVguyon +p5959 +I4 +sVluncheon +p5960 +I32 +sVdiversified +p5961 +I100 +sValbert +p5962 +I14 +sVinexact +p5963 +I32 +sVrejected +p5964 +I32 +sVcarter-wallace +p5965 +I2 +sVpalestine +p5966 +I4 +sVcd-v. +p5967 +I32 +sVhard-currency +p5968 +I32 +sVhonolulu +p5969 +I8 +sVmaintaining +p5970 +I34 +sVface-saving +p5971 +I32 +sVdimwitted +p5972 +I32 +sVtoronto +p5973 +I12 +sVstanleytown +p5974 +I8 +sVcalero +p5975 +I12 +sVchases +p5976 +I32 +sVguild +p5977 +I38 +sVtarget +p5978 +I44 +sVn.h. +p5979 +I4 +sVcitibank +p5980 +I4 +sVtavern +p5981 +I4 +sVhike +p5982 +I32 +sVnegotiator +p5983 +I32 +sVseated +p5984 +I32 +sVbradstock +p5985 +I4 +sVmerck +p5986 +I14 +sVguilt +p5987 +I32 +sViron +p5988 +I36 +sVcarajas +p5989 +I4 +sVrationalization +p5990 +I32 +sVcontrasted +p5991 +I32 +sVtipping +p5992 +I32 +sVminus +p5993 +I32 +sVpervasive +p5994 +I32 +sVmanned +p5995 +I32 +sVmicroscope +p5996 +I32 +sVportraits +p5997 +I32 +sVreemerge +p5998 +I32 +sVpessimism +p5999 +I32 +sVvastness +p6000 +I32 +sVcomair +p6001 +I4 +sVmanner +p6002 +I32 +sVinstant-camera +p6003 +I32 +sVimpelled +p6004 +I32 +sVaccompany +p6005 +I32 +sVcontents +p6006 +I32 +sVgear +p6007 +I36 +sVforced +p6008 +I32 +sVstrength +p6009 +I32 +sVquarry +p6010 +I32 +sVsmall-lot +p6011 +I40 +sVacademic +p6012 +I32 +sVconvenient +p6013 +I32 +sVlatter +p6014 +I32 +sVrockwell +p6015 +I14 +sVlease-purchase +p6016 +I32 +sVself-defense +p6017 +I32 +sVindexes +p6018 +I36 +sVmorristown +p6019 +I4 +sVpractices +p6020 +I36 +sVluxury +p6021 +I32 +sVforces +p6022 +I32 +sVindexed +p6023 +I32 +sVcurfew +p6024 +I96 +sVcompleted +p6025 +I32 +sVunsecured +p6026 +I34 +sVcircles +p6027 +I32 +sVwalhalla +p6028 +I4 +sVnobody +p6029 +I38 +sVunmanageable +p6030 +I32 +sVtrattori +p6031 +I4 +sVbruce +p6032 +I14 +sViceland +p6033 +I4 +sVbudget-minded +p6034 +I32 +sVhammond +p6035 +I8 +sVwhat +p6036 +I46 +sVprohibitive +p6037 +I32 +sVexercised +p6038 +I32 +sVanatomy +p6039 +I8 +sVextending +p6040 +I32 +sVleftovers +p6041 +I32 +sVinvolving +p6042 +I44 +sVgermany +p6043 +I12 +sVculminates +p6044 +I32 +sVscripts +p6045 +I32 +sVphase +p6046 +I32 +sVassessed +p6047 +I32 +sVgermans +p6048 +I6 +sVanimators +p6049 +I32 +sVmidlevel +p6050 +I32 +sVstupid +p6051 +I36 +sVconsumers +p6052 +I38 +sVneighborhoods +p6053 +I32 +sVrazzak +p6054 +I4 +sVretail-entertainment +p6055 +I32 +sVcalculated +p6056 +I32 +sValumni +p6057 +I32 +sVnewcomers +p6058 +I32 +sVsandinista +p6059 +I4 +sVswamp +p6060 +I32 +sVtrapped +p6061 +I32 +sVaccounted +p6062 +I32 +sVdeeply +p6063 +I32 +sVorder-inflow +p6064 +I32 +sVproponents +p6065 +I34 +sVvoting +p6066 +I36 +sVnotion +p6067 +I32 +sVreserve +p6068 +I38 +sVd. +p6069 +I4 +sVribaminol +p6070 +I34 +sVapplauds +p6071 +I32 +sVstephens +p6072 +I4 +sVlewis +p6073 +I12 +sVcourier-journal +p6074 +I8 +sVbrief +p6075 +I36 +sVreligions +p6076 +I32 +sVcorp +p6077 +I4 +sVshrewsbury +p6078 +I4 +sVcuban +p6079 +I4 +sVsubtle +p6080 +I32 +sVexclusivity +p6081 +I32 +sVreaffirm +p6082 +I32 +sVsharks +p6083 +I32 +sVwillliams +p6084 +I4 +sVlatent +p6085 +I32 +sValluded +p6086 +I32 +sVimplementation +p6087 +I32 +sVtoured +p6088 +I32 +sVguidance +p6089 +I32 +sVsentence +p6090 +I32 +sVmyth +p6091 +I32 +sVhrs +p6092 +I4 +sVdiscretionary +p6093 +I32 +sVfisher +p6094 +I6 +sVglasnost +p6095 +I2 +sVscreening +p6096 +I32 +sVpursuing +p6097 +I36 +sVponnet +p6098 +I4 +sVhrd +p6099 +I4 +sVadequate +p6100 +I32 +sVhigh-class +p6101 +I4 +sVskyw +p6102 +I8 +sVpersonality +p6103 +I32 +sVpredecessor +p6104 +I32 +sVdo +p6105 +I38 +sVhormone-treated +p6106 +I32 +sVdj +p6107 +I4 +sVloved +p6108 +I32 +sVsleepy +p6109 +I32 +sVdd +p6110 +I8 +sVde +p6111 +I100 +sVpittsburgh-based +p6112 +I4 +sVpreferred +p6113 +I34 +sVyielded +p6114 +I32 +sVgoing-private +p6115 +I32 +sVwatson +p6116 +I12 +sVhaunted +p6117 +I32 +sVback-and-forthing +p6118 +I32 +sVsubatomic +p6119 +I32 +sVdu +p6120 +I46 +sVblundered +p6121 +I32 +sVruns +p6122 +I32 +sVpearson +p6123 +I6 +sVwrested +p6124 +I32 +sVhigh-bracket +p6125 +I32 +sVcovering +p6126 +I32 +sVelbtf +p6127 +I4 +sVoil-industry +p6128 +I32 +sVemi +p6129 +I4 +sVgutzwiller +p6130 +I8 +sVirregularities +p6131 +I32 +sVgears +p6132 +I32 +sVemr +p6133 +I8 +sVinsurgents +p6134 +I32 +sVmidwinter +p6135 +I32 +sVprudential-bache +p6136 +I4 +sVless-upholstered +p6137 +I32 +sVexplanations +p6138 +I32 +sVsteam +p6139 +I32 +sVsecretary +p6140 +I46 +sVrudin +p6141 +I4 +sVerroneous +p6142 +I32 +sVcaptures +p6143 +I32 +sVobserver +p6144 +I36 +sVobserves +p6145 +I32 +sVw. +p6146 +I4 +sVlemonade +p6147 +I32 +sVlinchpin +p6148 +I32 +sVobserved +p6149 +I32 +sVdepends +p6150 +I32 +sVprojections +p6151 +I32 +sVcattle +p6152 +I38 +sVdiscussions +p6153 +I32 +sVmiserable +p6154 +I32 +sVouterspace +p6155 +I32 +sVscrutinizing +p6156 +I32 +sVtechniques +p6157 +I36 +sVventron +p6158 +I4 +sVworld-traded +p6159 +I32 +sVbeatrice/hunt +p6160 +I4 +sVshulman +p6161 +I12 +sVrostrum +p6162 +I32 +sVbrewster +p6163 +I12 +sVaway +p6164 +I36 +sVgentleman +p6165 +I32 +sVcompensation +p6166 +I32 +sVrushing +p6167 +I36 +sVarcana +p6168 +I32 +sVasymmetrical +p6169 +I32 +sVunable +p6170 +I32 +sVtainted +p6171 +I32 +sVsucceeding +p6172 +I34 +sVcooperation +p6173 +I100 +sVprops +p6174 +I32 +sVrepurchased +p6175 +I32 +sVdrawn +p6176 +I32 +sVeuropean-looking +p6177 +I4 +sVencounters +p6178 +I36 +sVshields +p6179 +I12 +sVco. +p6180 +I12 +sVwe +p6181 +I46 +sVloose +p6182 +I32 +sVterms +p6183 +I42 +sVwagon +p6184 +I32 +sVdivestitures +p6185 +I32 +sVdowngrades +p6186 +I32 +sVhandful +p6187 +I32 +sVtheresa +p6188 +I8 +sVwu +p6189 +I8 +sVsyne +p6190 +I4 +sVclues +p6191 +I32 +sVathens-based +p6192 +I4 +sVconvertible +p6193 +I36 +sVpackages +p6194 +I32 +sVoverestimated +p6195 +I32 +sVwy +p6196 +I8 +sVpolitburo +p6197 +I32 +sVpgloy +p6198 +I4 +sVreceived +p6199 +I96 +sVessentially +p6200 +I32 +sVpsychologists +p6201 +I34 +sVcot +p6202 +I4 +sVfrancesc +p6203 +I4 +sVcoy +p6204 +I4 +sVcox +p6205 +I4 +sVill +p6206 +I36 +sVncaa +p6207 +I4 +sVtwo-story +p6208 +I32 +sVhowes +p6209 +I4 +sVd&k +p6210 +I14 +sVhot-strip +p6211 +I32 +sVselective +p6212 +I32 +sVbrag +p6213 +I32 +sVsteer +p6214 +I32 +sVreceives +p6215 +I44 +sVkriftcher +p6216 +I8 +sVcatastrophic-illness +p6217 +I32 +sVleeds +p6218 +I4 +sVrequests +p6219 +I36 +sVgroans +p6220 +I32 +sVold-fashioned +p6221 +I32 +sVbram +p6222 +I2 +sVcon +p6223 +I4 +sVnegotiation +p6224 +I32 +sVrodime +p6225 +I6 +sVyear-end +p6226 +I34 +sVtough +p6227 +I46 +sVspear +p6228 +I32 +sVaccusing +p6229 +I32 +sVmuranyi +p6230 +I4 +sVcharacter +p6231 +I32 +sVindefinitely +p6232 +I32 +sVpublicizing +p6233 +I32 +sVadvancement +p6234 +I32 +sVtons +p6235 +I32 +sValcohol-related +p6236 +I32 +sVhealy +p6237 +I12 +sVtony +p6238 +I4 +sVanatolia +p6239 +I4 +sVbroadens +p6240 +I32 +sVtelecommunications +p6241 +I46 +sVpriscilla +p6242 +I4 +sVspeak +p6243 +I32 +sVgratitude +p6244 +I34 +sVbroadening +p6245 +I32 +sViraq +p6246 +I6 +sVunhappily +p6247 +I32 +sVengines +p6248 +I32 +sVsachy +p6249 +I8 +sVya +p6250 +I32 +sVsachs +p6251 +I4 +sVdrafting +p6252 +I32 +sVblanket +p6253 +I32 +sVnoel +p6254 +I2 +sVwestport +p6255 +I4 +sVflexible +p6256 +I32 +sVuntypical +p6257 +I32 +sVdozens +p6258 +I34 +sVwarmth +p6259 +I32 +sVduties +p6260 +I36 +sVhutcheson +p6261 +I4 +sVfamilies +p6262 +I32 +sVeasy +p6263 +I36 +sVrelaxing +p6264 +I32 +sVattacked +p6265 +I32 +sVaccidently +p6266 +I32 +sVconcerning +p6267 +I32 +sVexcite +p6268 +I32 +sVhennessy +p6269 +I8 +sVcatering +p6270 +I32 +sVcoherent +p6271 +I32 +sVimbroglio +p6272 +I4 +sVall-cash +p6273 +I32 +sVogilvy +p6274 +I14 +sVincrements +p6275 +I32 +sVfweets +p6276 +I32 +sVdeterred +p6277 +I32 +sVx-%chg +p6278 +I32 +sVdickerson +p6279 +I8 +sVapplied +p6280 +I40 +sVphysician +p6281 +I32 +sVinhibit +p6282 +I32 +sVeast +p6283 +I46 +sVconviction +p6284 +I32 +sVpublicly +p6285 +I32 +sVkanabayashi +p6286 +I4 +sVlaunches +p6287 +I36 +sVgovil +p6288 +I4 +sVbrahms +p6289 +I4 +sVflashing +p6290 +I32 +sVair +p6291 +I46 +sVaim +p6292 +I32 +sVain +p6293 +I32 +sVabrupt +p6294 +I32 +sVgng +p6295 +I4 +sVapplies +p6296 +I32 +sVedmar +p6297 +I4 +sVaid +p6298 +I100 +sVrightness +p6299 +I32 +sVproperty +p6300 +I38 +sVdavenport +p6301 +I4 +sVurokinase +p6302 +I32 +sVlaunched +p6303 +I98 +sVmistake +p6304 +I32 +sVduthie +p6305 +I4 +sVblood-clot +p6306 +I32 +sVcont +p6307 +I8 +sVcurfew-long +p6308 +I32 +sVvogel +p6309 +I4 +sVheyday +p6310 +I32 +sVsticker +p6311 +I32 +sVmmblf +p6312 +I8 +sVaudrey +p6313 +I4 +sVcleveland-based +p6314 +I4 +sVbrake +p6315 +I32 +sVcone +p6316 +I4 +sVworld-wide +p6317 +I104 +sVcomparative +p6318 +I32 +sVtremendously +p6319 +I32 +sVstint +p6320 +I32 +sVtwo-decade-old +p6321 +I32 +sVspace-launch +p6322 +I32 +sVchamplain +p6323 +I4 +sVconfirmed +p6324 +I96 +sVlangoni +p6325 +I12 +sVmccarran-ferguson +p6326 +I4 +sVpatent +p6327 +I44 +sVdemonstration +p6328 +I32 +sVinformation-service +p6329 +I32 +sVjerry +p6330 +I4 +sVclearly +p6331 +I38 +sVsailors +p6332 +I32 +sVeminent +p6333 +I32 +sVsupplements +p6334 +I32 +sVdeteriorate +p6335 +I32 +sVmaine-based +p6336 +I4 +sVaccumulating +p6337 +I32 +sVquebecor +p6338 +I6 +sVmonarch +p6339 +I14 +sVproxmire +p6340 +I12 +sVindictment +p6341 +I32 +sVconvictions +p6342 +I36 +sVconfection +p6343 +I32 +sVpinstripes +p6344 +I32 +sVwheel +p6345 +I36 +sVindependent +p6346 +I34 +sVd-rams +p6347 +I4 +sVposed +p6348 +I32 +sVswell +p6349 +I32 +sVclosings +p6350 +I32 +sVlugano +p6351 +I4 +sVlyndon +p6352 +I4 +sVhand +p6353 +I36 +sVliberties +p6354 +I32 +sVnorwegian +p6355 +I6 +sVhans +p6356 +I4 +sValums +p6357 +I32 +sVamarillo +p6358 +I12 +sVblamed +p6359 +I32 +sVconservatism +p6360 +I32 +sVhigher-than-anticipated +p6361 +I32 +sVepistolary +p6362 +I32 +sVprescribed +p6363 +I32 +sVvermont +p6364 +I4 +sVkept +p6365 +I32 +sVscenario +p6366 +I32 +sVdirector-general +p6367 +I32 +sVmin +p6368 +I4 +sVtaint +p6369 +I32 +sVwarburg +p6370 +I10 +sVhispanic +p6371 +I4 +sVcontact +p6372 +I32 +sVmurdoch +p6373 +I8 +sVpre-big +p6374 +I32 +sVthe +p6375 +I126 +sVcamps +p6376 +I36 +sVmusical +p6377 +I44 +sVbala-cynwyd +p6378 +I4 +sVfour-year-olds +p6379 +I32 +sVharney +p6380 +I4 +sVmclean +p6381 +I4 +sVstringent +p6382 +I32 +sVmingle +p6383 +I32 +sVtraditions +p6384 +I32 +sVquoted +p6385 +I32 +sVathletic +p6386 +I32 +sVphoto +p6387 +I36 +sVnewton +p6388 +I8 +sVsalovaara +p6389 +I4 +sVquotes +p6390 +I32 +sVfarther +p6391 +I32 +sVvictim +p6392 +I32 +sVdwarfed +p6393 +I32 +sVadding +p6394 +I34 +sVunique +p6395 +I32 +sVpac-man +p6396 +I4 +sVfamily +p6397 +I38 +sVinfractions +p6398 +I32 +sVcornell +p6399 +I4 +sVsimilarities +p6400 +I32 +sVboot +p6401 +I32 +sVfared +p6402 +I32 +sVweiss +p6403 +I4 +sVpassive +p6404 +I32 +sVwright +p6405 +I4 +sVdrill-bit +p6406 +I32 +sVspread +p6407 +I32 +sVtransformed +p6408 +I32 +sVboard +p6409 +I110 +sVrequiring +p6410 +I32 +sVevidenced +p6411 +I32 +sVfares +p6412 +I36 +sVopenings +p6413 +I32 +sVplasma +p6414 +I32 +sVexpelled +p6415 +I32 +sVmass-manufacture +p6416 +I32 +sVusable +p6417 +I32 +sVfreeport-mcmoran +p6418 +I4 +sVinsensitive +p6419 +I32 +sVkaplan +p6420 +I12 +sVwinans +p6421 +I4 +sVtrombonist +p6422 +I32 +sVcaps +p6423 +I32 +sVarab +p6424 +I4 +sVboxes +p6425 +I32 +sVboxer +p6426 +I36 +sVinjuring +p6427 +I32 +sVbarge +p6428 +I32 +sVcampeau +p6429 +I4 +sVtelevisa +p6430 +I4 +sVdesigners +p6431 +I32 +sVunfounded +p6432 +I32 +sVdisadvantage +p6433 +I32 +sVradio-television +p6434 +I4 +sVeroded +p6435 +I32 +sVinsurgent +p6436 +I32 +sVseductive +p6437 +I32 +sVeuphoric +p6438 +I32 +sVpole-vaulter +p6439 +I32 +sVa.g. +p6440 +I4 +sVcompetence +p6441 +I32 +sVsecurities +p6442 +I110 +sVpesticides +p6443 +I32 +sVthrusts +p6444 +I32 +sVchimicles +p6445 +I8 +sVgandhi +p6446 +I4 +sVsparse +p6447 +I32 +sVnight +p6448 +I36 +sVbaja +p6449 +I4 +sVinvaluable +p6450 +I32 +sVsecurity +p6451 +I46 +sVaccuracy +p6452 +I32 +sVkearney +p6453 +I12 +sVcooled +p6454 +I32 +sVmedical-insurance +p6455 +I32 +sVwebb +p6456 +I12 +sVembroiled +p6457 +I32 +sVlikenot +p6458 +I32 +sVmass-manufactured +p6459 +I2 +sVsends +p6460 +I32 +sVflatter +p6461 +I32 +sVdeduced +p6462 +I32 +sVeyeing +p6463 +I32 +sVborn +p6464 +I38 +sVrile +p6465 +I32 +sVproductions +p6466 +I36 +sVniels +p6467 +I4 +sVcritique +p6468 +I32 +sVbore +p6469 +I32 +sVreincorporate +p6470 +I32 +sVconfusing +p6471 +I32 +sVdenies +p6472 +I32 +sVcede +p6473 +I36 +sVspruce +p6474 +I32 +sVrko +p6475 +I4 +sVhumor +p6476 +I32 +sVdo-it-yourself +p6477 +I34 +sVphenomenal +p6478 +I32 +sVlachica +p6479 +I4 +sVtrundles +p6480 +I32 +sVcomments +p6481 +I32 +sVnoxious +p6482 +I32 +sVfilming +p6483 +I32 +sVtrustees +p6484 +I36 +sVsocial-security +p6485 +I32 +sVdisappears +p6486 +I32 +sVdenied +p6487 +I32 +sVdigger +p6488 +I4 +sVn.m. +p6489 +I4 +sVclifford +p6490 +I4 +sVregulated +p6491 +I32 +sVparticipation +p6492 +I32 +sVlacroix +p6493 +I12 +sVpeek +p6494 +I32 +sVcolumbus +p6495 +I12 +sVhome-grown +p6496 +I32 +sVchampion +p6497 +I44 +sVeasy-to-use +p6498 +I32 +sVmarketing +p6499 +I110 +sVconstance +p6500 +I12 +sVshogun +p6501 +I4 +sVillustration +p6502 +I32 +sVgraduates +p6503 +I32 +sVrestructuring +p6504 +I44 +sVhoning +p6505 +I32 +sVplc +p6506 +I4 +sVarchitectural +p6507 +I32 +sVnotorious +p6508 +I32 +sVgraduated +p6509 +I32 +sVkhan +p6510 +I4 +sVpost +p6511 +I36 +sVnev. +p6512 +I4 +sVu.s.-trained +p6513 +I4 +sVproperties +p6514 +I36 +sVheinike +p6515 +I4 +sVjurors +p6516 +I32 +sVbreaded +p6517 +I32 +sVgulf +p6518 +I46 +sVrallying +p6519 +I32 +sVnewspapers +p6520 +I36 +sVmonths +p6521 +I32 +sVaccepts +p6522 +I40 +sVconstituting +p6523 +I32 +sVbyuwi +p6524 +I4 +sVgentles +p6525 +I4 +sVbanker +p6526 +I100 +sVfour-way +p6527 +I32 +sVgingerbread +p6528 +I32 +sVjacques +p6529 +I6 +sVconsiderations +p6530 +I32 +sVdenominated +p6531 +I32 +sVdilemma +p6532 +I36 +sVworldly +p6533 +I32 +sVunabashedly +p6534 +I32 +sVwasting +p6535 +I32 +sVpays +p6536 +I32 +sVprisoners +p6537 +I32 +sVfloat +p6538 +I32 +sVprofession +p6539 +I32 +sVbound +p6540 +I32 +sVbalances +p6541 +I32 +sVrendering +p6542 +I32 +sVunilever +p6543 +I4 +sVchart-guided +p6544 +I32 +sVformidable +p6545 +I32 +sVbalanced +p6546 +I32 +sVzero-coupon +p6547 +I32 +sVstumble +p6548 +I4 +sVguardia +p6549 +I4 +sVchv +p6550 +I12 +sVstockman +p6551 +I8 +sVcompression +p6552 +I32 +sVmaurier +p6553 +I12 +sVshotguns +p6554 +I32 +sVdivertimento +p6555 +I4 +sVcrowe +p6556 +I12 +sVlegislation +p6557 +I40 +sVwab +p6558 +I8 +sVliquidated +p6559 +I32 +sVfight +p6560 +I36 +sVramps +p6561 +I32 +sVczech +p6562 +I4 +sVaccordingly +p6563 +I34 +sVclinical +p6564 +I46 +sVway +p6565 +I38 +sVsnowplows +p6566 +I32 +sVjudith +p6567 +I4 +sVresearchers +p6568 +I42 +sVwas +p6569 +I108 +sVwar +p6570 +I44 +sVlowest +p6571 +I36 +sVemulated +p6572 +I32 +sVentrenched +p6573 +I32 +sVwidens +p6574 +I32 +sVsnowy +p6575 +I32 +sVcrown +p6576 +I36 +sVbecoming +p6577 +I32 +sVconverse +p6578 +I4 +sVceded +p6579 +I32 +sVastonishes +p6580 +I32 +sVfeinstein +p6581 +I4 +sVgarages +p6582 +I32 +sVtruk +p6583 +I8 +sVneedles +p6584 +I32 +sVelderly +p6585 +I32 +sVboon +p6586 +I32 +sVcharlene +p6587 +I2 +sVtrue +p6588 +I34 +sVstablilizers +p6589 +I32 +sVabsent +p6590 +I32 +sVthrow +p6591 +I32 +sVresponding +p6592 +I34 +sVanti-hypertensive +p6593 +I32 +sVemil +p6594 +I4 +sVentertainers +p6595 +I32 +sVcrows +p6596 +I32 +sVunthinkable +p6597 +I32 +sVmaximum +p6598 +I32 +sVentails +p6599 +I32 +sVcrystal +p6600 +I32 +sVmti +p6601 +I8 +sVcancers +p6602 +I32 +sVanew +p6603 +I32 +sVvatican +p6604 +I4 +sVmtc +p6605 +I8 +sVinquiring +p6606 +I32 +sVvacationers +p6607 +I32 +sVperks +p6608 +I32 +sVchestnut +p6609 +I32 +sVpromises +p6610 +I32 +sVmedication +p6611 +I32 +sVguesses +p6612 +I32 +sVsox +p6613 +I4 +sVturbo +p6614 +I32 +sVfrederick +p6615 +I14 +sVwarring +p6616 +I4 +sVmuscular +p6617 +I32 +sVevidence +p6618 +I34 +sVmanure +p6619 +I32 +sVsmall-parcel +p6620 +I32 +sVexpertise +p6621 +I32 +sVpromised +p6622 +I32 +sVescan +p6623 +I4 +sVallegheny +p6624 +I14 +sVenlist +p6625 +I32 +sVmold +p6626 +I32 +sVarida +p6627 +I12 +sVphysical +p6628 +I32 +sVspecially +p6629 +I32 +sVwell-advised +p6630 +I32 +sVmomentum +p6631 +I32 +sVdying +p6632 +I32 +sVignited +p6633 +I32 +sVnewsstands +p6634 +I32 +sVredwood +p6635 +I4 +sVstake +p6636 +I36 +sVhandmade +p6637 +I32 +sVtopped +p6638 +I32 +sVreality +p6639 +I32 +sVnegotiators +p6640 +I32 +sVre-elected +p6641 +I32 +sVsuburban +p6642 +I32 +sVinterested +p6643 +I32 +sVholding +p6644 +I108 +sVtest +p6645 +I36 +sVunwilling +p6646 +I32 +sVshrink +p6647 +I32 +sVkureishi +p6648 +I4 +sVscored +p6649 +I32 +sVmentor +p6650 +I4 +sVbellevue +p6651 +I12 +sVbrothers +p6652 +I36 +sVtheatrical +p6653 +I32 +sVmid-march +p6654 +I32 +sVfiasco +p6655 +I36 +sVconvincing +p6656 +I32 +sVpolite +p6657 +I32 +sVharvestable +p6658 +I32 +sVmusty +p6659 +I32 +sVscorer +p6660 +I32 +sVscores +p6661 +I38 +sVtroupe +p6662 +I36 +sVacted +p6663 +I32 +sVdirectors-and-officers +p6664 +I32 +sVomega +p6665 +I4 +sVskinny +p6666 +I32 +sVshiraz +p6667 +I4 +sVradioactivity +p6668 +I32 +sVregime +p6669 +I32 +sVpreeminence +p6670 +I32 +sVbestowed +p6671 +I32 +sVexpansionist +p6672 +I32 +sVreasoning +p6673 +I32 +sVdomination +p6674 +I64 +sVtogether +p6675 +I34 +sVbeds +p6676 +I32 +sVloyal +p6677 +I32 +sVvideocassette +p6678 +I32 +sVrainier +p6679 +I6 +sVreception +p6680 +I32 +sVgenrad +p6681 +I4 +sVn.j. +p6682 +I4 +sVcenturies-old +p6683 +I32 +sVgrimm +p6684 +I12 +sVlineup +p6685 +I32 +sVprecedent +p6686 +I32 +sVpaced +p6687 +I34 +sVgovernment-sponsored +p6688 +I34 +sVoutspoken +p6689 +I32 +sVimpulse +p6690 +I32 +sVyasuhiro +p6691 +I4 +sVdiplomacy +p6692 +I32 +sVdance +p6693 +I44 +sVoccurrence +p6694 +I32 +sVindicating +p6695 +I32 +sVours +p6696 +I32 +sVfabricated +p6697 +I32 +sVm&m/mars +p6698 +I4 +sVcandlelight +p6699 +I32 +sVbig-time +p6700 +I32 +sVcnvx +p6701 +I4 +sVsupplement +p6702 +I32 +sVvaulted +p6703 +I32 +sVirritants +p6704 +I32 +sVgrateful +p6705 +I32 +sVbattle +p6706 +I36 +sVp.m. +p6707 +I32 +sVlazard +p6708 +I4 +sVsuperpower +p6709 +I32 +sVdevoted +p6710 +I32 +sVcontributing +p6711 +I34 +sVcertainly +p6712 +I34 +sVfactories +p6713 +I36 +sVj.j. +p6714 +I6 +sVzone +p6715 +I32 +sVmidler +p6716 +I4 +sVmdc +p6717 +I4 +sValderman +p6718 +I4 +sVflash +p6719 +I32 +sVgigs +p6720 +I32 +sVprotege +p6721 +I32 +sVeight-month-old +p6722 +I32 +sVcompensate +p6723 +I32 +sVpermanently +p6724 +I32 +sVflak +p6725 +I32 +sVrhythm +p6726 +I32 +sVruffle-front +p6727 +I32 +sVdartmouth +p6728 +I4 +sVdisapproved +p6729 +I32 +sVsaharan +p6730 +I4 +sVdonned +p6731 +I32 +sVsouthwest +p6732 +I14 +sVdivision +p6733 +I100 +sVprotective +p6734 +I32 +sVhugel +p6735 +I12 +sVgrill +p6736 +I32 +sVfree-energy +p6737 +I32 +sVblase +p6738 +I32 +sVpublicized +p6739 +I32 +sVparable +p6740 +I32 +sVseemingly +p6741 +I36 +sVbaird +p6742 +I12 +sVliability +p6743 +I32 +sVautomobiles +p6744 +I32 +sVvegas +p6745 +I4 +sVanonymous +p6746 +I32 +sVentries +p6747 +I32 +sVtrouble +p6748 +I36 +sVblast +p6749 +I32 +sVill-timed +p6750 +I32 +sVdebates +p6751 +I32 +sVaggressively +p6752 +I32 +sVperceived +p6753 +I32 +sVrespiratory +p6754 +I36 +sVflammable +p6755 +I32 +sVdark-haired +p6756 +I36 +sVpresented +p6757 +I32 +sValtering +p6758 +I32 +sVturns +p6759 +I40 +sVfragile +p6760 +I32 +sVfirst-year +p6761 +I32 +sVgun +p6762 +I32 +sVearmarked +p6763 +I32 +sVp +p6764 +I8 +sVcar-rental +p6765 +I32 +sVevades +p6766 +I32 +sVmendham +p6767 +I4 +sVgut +p6768 +I32 +sVguy +p6769 +I32 +sVdisqualify +p6770 +I32 +sVde-germanize +p6771 +I32 +sVjurisdictional +p6772 +I32 +sVinflammations +p6773 +I32 +sVgoverning +p6774 +I36 +sVupper +p6775 +I44 +sVrevolution +p6776 +I36 +sVcost-control +p6777 +I32 +sVregret +p6778 +I32 +sValfb +p6779 +I4 +sVcapriccio +p6780 +I4 +sVregained +p6781 +I32 +sVobstructing +p6782 +I32 +sVdiscover +p6783 +I32 +sVaffiliation +p6784 +I32 +sVthinker +p6785 +I32 +sVcost +p6786 +I32 +sVdelight +p6787 +I32 +sVpaydown +p6788 +I32 +sVmid-level +p6789 +I32 +sVforging +p6790 +I32 +sVmeanings +p6791 +I4 +sVhelpless +p6792 +I32 +sVanti-jazz +p6793 +I8 +sVrough +p6794 +I32 +sVmemorably +p6795 +I32 +sVcargo +p6796 +I96 +sVpurchasers +p6797 +I34 +sVshareholder-rights +p6798 +I32 +sVappear +p6799 +I32 +sVbarbie +p6800 +I4 +sVeconomist +p6801 +I40 +sVassistance +p6802 +I100 +sVshares +p6803 +I46 +sVuniform +p6804 +I32 +sVwolfe +p6805 +I4 +sVtommaso +p6806 +I8 +sVbse +p6807 +I4 +sVnon-financial +p6808 +I32 +sVshared +p6809 +I32 +sVappeal +p6810 +I36 +sVconsolidations +p6811 +I32 +sVsatisfy +p6812 +I32 +sVsupporting +p6813 +I32 +sVforeign-debt +p6814 +I32 +sVpredicting +p6815 +I32 +sVexplosion +p6816 +I36 +sVcos. +p6817 +I4 +sVdepleting +p6818 +I32 +sVfiltration-systems +p6819 +I32 +sVlefty +p6820 +I4 +sVmellifluous +p6821 +I32 +sVpause +p6822 +I32 +sVfractious +p6823 +I32 +sVthree-point +p6824 +I32 +sVnoir +p6825 +I32 +sVrubicam +p6826 +I4 +sVteaches +p6827 +I32 +sVappears +p6828 +I36 +sVchange +p6829 +I36 +sVsending +p6830 +I36 +sVkingwood +p6831 +I8 +sVcondoms +p6832 +I32 +sVticketed +p6833 +I32 +sVekg +p6834 +I4 +sVeke +p6835 +I32 +sVsaig +p6836 +I8 +sVnavistar +p6837 +I4 +sVloss-sharing +p6838 +I32 +sVbaby-boom +p6839 +I32 +sVdetonate +p6840 +I32 +sVtrial +p6841 +I36 +sVsubstituted +p6842 +I32 +sVfranklin +p6843 +I12 +sVkemp +p6844 +I4 +sVusually +p6845 +I38 +sVstereos +p6846 +I32 +sVmontreal +p6847 +I12 +sVfar-ranging +p6848 +I32 +sVfbs +p6849 +I8 +sVitaliana +p6850 +I4 +sVnfl +p6851 +I12 +sVretired +p6852 +I34 +sVill-informed +p6853 +I32 +sVhiking +p6854 +I32 +sVextra +p6855 +I32 +sVlapsed +p6856 +I32 +sVchamorro +p6857 +I12 +sVlending +p6858 +I32 +sVmarked +p6859 +I32 +sVbullock +p6860 +I4 +sVfbc +p6861 +I8 +sVsincerely +p6862 +I32 +sVrosenfeld +p6863 +I4 +sVstings +p6864 +I32 +sVplutonium-producing +p6865 +I32 +sVsufferers +p6866 +I32 +sVmemorable +p6867 +I32 +sVatrocious +p6868 +I32 +sVfbi +p6869 +I4 +sVrarely +p6870 +I34 +sVmobil +p6871 +I4 +sVmarket +p6872 +I110 +sVcyanamid +p6873 +I4 +sVprolong +p6874 +I32 +sVenrile +p6875 +I4 +sVprove +p6876 +I34 +sVsubvert +p6877 +I32 +sVsuper +p6878 +I4 +sValbn +p6879 +I8 +sVt.pwf +p6880 +I4 +sVpre-payment +p6881 +I32 +sVfairfield +p6882 +I12 +sVrenominated +p6883 +I32 +sVlive +p6884 +I38 +sVjam +p6885 +I4 +sVwonderfully +p6886 +I32 +sVshaken +p6887 +I32 +sVkeen +p6888 +I32 +sVjoints +p6889 +I32 +sVangels +p6890 +I36 +sVischemia +p6891 +I32 +sVmarginally +p6892 +I32 +sVcommissioner +p6893 +I38 +sVpals +p6894 +I32 +sVcie. +p6895 +I6 +sVfattening +p6896 +I32 +sVtowers +p6897 +I32 +sVenvelope +p6898 +I32 +sVstate-funded +p6899 +I32 +sVpinpoint +p6900 +I32 +sVfoxboro +p6901 +I8 +sVreunify +p6902 +I32 +sVcomputer-aided +p6903 +I32 +sVafflicted +p6904 +I32 +sVboycott +p6905 +I32 +sVflourished +p6906 +I32 +sVbeaver +p6907 +I4 +sVamerican-made +p6908 +I4 +sVsingle-a-minus/a-2 +p6909 +I64 +sVgraphic +p6910 +I6 +sVslogan +p6911 +I32 +sVibm +p6912 +I14 +sVabner +p6913 +I4 +sVcar +p6914 +I106 +sVcap +p6915 +I36 +sVcaw +p6916 +I4 +sVcat +p6917 +I36 +sVdecker +p6918 +I4 +sVhardest +p6919 +I2 +sVincidents +p6920 +I32 +sVcan +p6921 +I116 +sVco-workers +p6922 +I32 +sVcal +p6923 +I4 +sVniagara +p6924 +I14 +sVcaa +p6925 +I4 +sVtrans +p6926 +I4 +sVpmsc +p6927 +I4 +sVribs +p6928 +I32 +sVmild-mannered +p6929 +I32 +sVbreeds +p6930 +I32 +sVpreface +p6931 +I32 +sVheart +p6932 +I36 +sVdedicated +p6933 +I32 +sVcitizens +p6934 +I110 +sVhears +p6935 +I32 +sVheitzeberg +p6936 +I4 +sVrecalled +p6937 +I32 +sVexpanding +p6938 +I96 +sVsubsidies +p6939 +I44 +sVtravenol +p6940 +I4 +sVcarroll +p6941 +I8 +sVp&l +p6942 +I4 +sVsake +p6943 +I32 +sVtopic +p6944 +I36 +sVheard +p6945 +I44 +sVfortunes +p6946 +I32 +sVgalen +p6947 +I4 +sVrenomination +p6948 +I36 +sVexclude +p6949 +I32 +sVhandle +p6950 +I32 +sVspc +p6951 +I4 +sVclothing +p6952 +I32 +sVoccur +p6953 +I32 +sVslips +p6954 +I32 +sVrestitution +p6955 +I32 +sVpublic-broadcasting +p6956 +I32 +sVbicentennial +p6957 +I32 +sVproductive +p6958 +I32 +sVbankrupt +p6959 +I32 +sVfortunately +p6960 +I2 +sVdiscussion +p6961 +I32 +sVbonds +p6962 +I110 +sVunwritten +p6963 +I32 +sVcliche +p6964 +I32 +sVhoffmann +p6965 +I4 +sVfreezes +p6966 +I32 +sVwrite +p6967 +I36 +sVreps. +p6968 +I6 +sVhamburgers +p6969 +I32 +sVmultibillion-dollar +p6970 +I32 +sVintellectually +p6971 +I32 +sVnonstop +p6972 +I32 +sVeconomy +p6973 +I100 +sVhindsight +p6974 +I32 +sVarmies +p6975 +I32 +sVpqb +p6976 +I4 +sVpeerless +p6977 +I4 +sVescalate +p6978 +I4 +sVsacrifice +p6979 +I4 +sVsouthern +p6980 +I46 +sVproduce +p6981 +I36 +sVpave +p6982 +I32 +sVprohibition +p6983 +I32 +sVgoradok +p6984 +I4 +sVidaho +p6985 +I4 +sVdrastic +p6986 +I32 +sVendgame +p6987 +I32 +sVnomination +p6988 +I40 +sVcompatibility +p6989 +I32 +sVlifting +p6990 +I34 +sVgillespie +p6991 +I12 +sVeurodollars +p6992 +I8 +sVinscrutable +p6993 +I32 +sVremember +p6994 +I34 +sVbid-rigging +p6995 +I32 +sVwhenever +p6996 +I34 +sVprevost +p6997 +I4 +sVmdr +p6998 +I4 +sVfutures +p6999 +I46 +sVirwin +p7000 +I4 +sVbenny +p7001 +I4 +sVsymphony +p7002 +I4 +sVmarshal +p7003 +I32 +sVordinance +p7004 +I32 +sVaccelerated +p7005 +I32 +sVmalongo +p7006 +I4 +sVkurt +p7007 +I4 +sVdethrone +p7008 +I32 +sVleft-leaning +p7009 +I32 +sVfoldessy +p7010 +I8 +sVmichel +p7011 +I6 +sVtypical +p7012 +I32 +sVtagged +p7013 +I32 +sVserving +p7014 +I32 +sg76 +I14 +sVglobe +p7015 +I36 +sVcarting +p7016 +I32 +sVindeed +p7017 +I42 +sVcolt +p7018 +I6 +sVdisplayed +p7019 +I32 +sVconsulting +p7020 +I32 +sVkirchner +p7021 +I4 +sVwakefield +p7022 +I4 +sVaiding +p7023 +I34 +sVended +p7024 +I36 +sVgenteel +p7025 +I32 +sVdisparities +p7026 +I32 +sVratified +p7027 +I32 +sVstatistical +p7028 +I38 +sVaffirms +p7029 +I4 +sVcitizenship +p7030 +I32 +sVpre-tax +p7031 +I36 +sVcold +p7032 +I32 +sVstill +p7033 +I42 +sVbirds +p7034 +I32 +sVethic +p7035 +I32 +sVunlucky +p7036 +I32 +sVschwarz +p7037 +I4 +sVacknowledge +p7038 +I32 +sVreacting +p7039 +I32 +sVextract +p7040 +I32 +sVinflicted +p7041 +I32 +sVforms +p7042 +I36 +sVwindow +p7043 +I32 +sVwinnipeg +p7044 +I4 +sVspacious +p7045 +I32 +sVfactual +p7046 +I32 +sVnorway +p7047 +I14 +sVdeandome +p7048 +I4 +sVcorrespondence +p7049 +I32 +sVcrematories +p7050 +I32 +sVnon +p7051 +I32 +sVhalt +p7052 +I36 +sVdrummer-athletes +p7053 +I32 +sVnod +p7054 +I4 +sVsweetened +p7055 +I32 +sVintroduce +p7056 +I36 +sVnoc +p7057 +I8 +sVcol. +p7058 +I14 +sVmotels +p7059 +I32 +sVtransmissions +p7060 +I36 +sVflint +p7061 +I36 +sVatfc +p7062 +I8 +sVtacoma +p7063 +I8 +sVhalf +p7064 +I38 +sVnot +p7065 +I46 +sVtextron +p7066 +I10 +sVnow +p7067 +I46 +sVmid-year +p7068 +I32 +sVhall +p7069 +I36 +sg46 +I42 +sVenacted +p7070 +I32 +sVconcerto +p7071 +I4 +sVargentina +p7072 +I4 +sVshalala +p7073 +I8 +sVfumes +p7074 +I32 +sVjanuary +p7075 +I14 +sVdrop +p7076 +I36 +sVkerr +p7077 +I8 +sVgoat +p7078 +I32 +sVundertreatment +p7079 +I32 +sVstockholm +p7080 +I12 +sVautonomously +p7081 +I32 +sVraiser +p7082 +I32 +sVentirely +p7083 +I32 +sVnaturalization +p7084 +I4 +sVunloaded +p7085 +I32 +sVmarshals +p7086 +I96 +sVel +p7087 +I6 +sVlouisiana-pacific +p7088 +I14 +sVen +p7089 +I36 +sVsignificantly +p7090 +I32 +sVek +p7091 +I12 +sVchallenged +p7092 +I32 +sVed +p7093 +I14 +sVcarving +p7094 +I32 +sVdirecting +p7095 +I34 +sVhildegard +p7096 +I2 +sVec +p7097 +I12 +sVsubways +p7098 +I36 +sVchallenges +p7099 +I32 +sVchallenger +p7100 +I32 +sVfires +p7101 +I64 +sVsupplant +p7102 +I32 +sVyear +p7103 +I46 +sVerratically +p7104 +I4 +sVhappen +p7105 +I32 +sVavoided +p7106 +I36 +sVdresher +p7107 +I12 +sVpills +p7108 +I32 +sVenvoys +p7109 +I32 +sVirons +p7110 +I32 +sVvying +p7111 +I32 +sVshown +p7112 +I32 +sVmedications +p7113 +I32 +sVopened +p7114 +I32 +sVbullish +p7115 +I32 +sVspace +p7116 +I36 +sVoutcry +p7117 +I32 +sVirony +p7118 +I32 +sVimmigrant +p7119 +I32 +sVhastily +p7120 +I32 +sVlooking +p7121 +I34 +sVmich.-based +p7122 +I4 +sVwholeheartedly +p7123 +I32 +sVrational +p7124 +I32 +sVfargo +p7125 +I4 +sVoverlook +p7126 +I32 +sVruinous +p7127 +I32 +sVreceiving +p7128 +I32 +sVviable +p7129 +I32 +sVshows +p7130 +I36 +sVkan. +p7131 +I4 +sVrebuilding +p7132 +I32 +sVe-6a +p7133 +I4 +sVe. +p7134 +I4 +sVmid-1988 +p7135 +I32 +sVdefenses +p7136 +I32 +sVcars +p7137 +I36 +sVmid-1987 +p7138 +I32 +sVaged +p7139 +I32 +sVmid-1980 +p7140 +I32 +sVcoin +p7141 +I32 +sVdiagnostic +p7142 +I32 +sVekofisk +p7143 +I4 +sVdobbs-higginson +p7144 +I4 +sVunwanted +p7145 +I32 +sVrebel +p7146 +I36 +sVcarl +p7147 +I6 +sVtaxed +p7148 +I32 +sVgaffe +p7149 +I32 +sVobligation +p7150 +I96 +sVominous +p7151 +I32 +sVmarine +p7152 +I38 +sVinevitable +p7153 +I32 +sVcard +p7154 +I38 +sVcare +p7155 +I100 +sVtriumphs +p7156 +I4 +sVcycles +p7157 +I32 +sVcouldn +p7158 +I36 +sVtextbook +p7159 +I32 +sVselections +p7160 +I4 +sVairmach +p7161 +I4 +sVtomahawk +p7162 +I4 +sVtransition +p7163 +I32 +sVanti-union +p7164 +I32 +sVunsung +p7165 +I32 +sVbritish +p7166 +I14 +sVhonest +p7167 +I32 +sVarchibald +p7168 +I4 +sVtangled +p7169 +I32 +sVnorth-central +p7170 +I4 +sVinvitation +p7171 +I32 +sVvous +p7172 +I36 +sVnonprofit +p7173 +I32 +sVmaytag +p7174 +I14 +sVtravel-related +p7175 +I32 +sVsmelting +p7176 +I32 +sVblind +p7177 +I32 +sVlow-end +p7178 +I32 +sVbenefited +p7179 +I32 +sVstevens +p7180 +I8 +sVchocolatier +p7181 +I4 +sVomitted +p7182 +I100 +sVchampions +p7183 +I32 +sValix +p7184 +I12 +sVdescribing +p7185 +I34 +sVhipbone +p7186 +I32 +sVyourself +p7187 +I32 +sVexhaust +p7188 +I32 +sVinspected +p7189 +I32 +sVdirectly +p7190 +I40 +sVcomprises +p7191 +I96 +sVimpossible +p7192 +I32 +sVring +p7193 +I44 +sVdrove +p7194 +I32 +sVtomorrow +p7195 +I34 +sVzap +p7196 +I32 +sVsize +p7197 +I32 +sVhelgi +p7198 +I4 +sVtranscribed +p7199 +I32 +sVofficials +p7200 +I110 +sVexists +p7201 +I32 +sVtoken-ring +p7202 +I32 +sVconcentrating +p7203 +I32 +sVcaught +p7204 +I32 +sVbreed +p7205 +I32 +sVcallous +p7206 +I32 +sVweekdays +p7207 +I32 +sVremotely +p7208 +I32 +sVhouseholds +p7209 +I96 +sVfree-lance +p7210 +I32 +sVgrasping +p7211 +I32 +sVtragic +p7212 +I32 +sVallanna +p7213 +I4 +sVdesmond +p7214 +I6 +sVhodel +p7215 +I12 +sVpayout +p7216 +I44 +sVfriend +p7217 +I32 +sVphysicists +p7218 +I32 +sVcourtier +p7219 +I32 +sVnutrition +p7220 +I32 +sVmoorman +p7221 +I8 +sVsophistication +p7222 +I32 +sVmostly +p7223 +I38 +sVthat +p7224 +I126 +sVpittsburgh +p7225 +I12 +sVbrains +p7226 +I32 +sVtaxation +p7227 +I32 +sVeliminates +p7228 +I32 +sVasides +p7229 +I4 +sVjane +p7230 +I4 +sVsumitomo-clan +p7231 +I4 +sVinmates +p7232 +I32 +sVn.c.-based +p7233 +I4 +sVtehran +p7234 +I6 +sVeliminated +p7235 +I32 +sVpeck +p7236 +I12 +sVamiable +p7237 +I32 +sVthan +p7238 +I100 +sVsemantics +p7239 +I36 +sVprofessionals +p7240 +I32 +sVtelevision +p7241 +I102 +sVunderwritten +p7242 +I32 +sVrugged +p7243 +I32 +sVreestablishing +p7244 +I32 +sVaccordance +p7245 +I32 +sVrope-like +p7246 +I32 +sVsusan +p7247 +I6 +sVhome-shopping +p7248 +I32 +sVtransferred +p7249 +I32 +sVoptimism +p7250 +I32 +sVhessians +p7251 +I4 +sVmonopolies +p7252 +I32 +sVweinger +p7253 +I12 +sVhigh-income +p7254 +I32 +sVlaunching +p7255 +I32 +sVfruits +p7256 +I32 +sVhappy +p7257 +I32 +sVrespectability +p7258 +I32 +sVlunches +p7259 +I32 +sVwagoneer +p7260 +I4 +sVm2 +p7261 +I4 +sVhairline +p7262 +I32 +sVdocumentation +p7263 +I32 +sVcontentious +p7264 +I32 +sVinvestors +p7265 +I46 +sVremained +p7266 +I32 +sVcraig +p7267 +I12 +sVcorrection +p7268 +I32 +sVpremier +p7269 +I36 +sVproblem-free +p7270 +I32 +sVeditors +p7271 +I32 +sVinvalidated +p7272 +I32 +sVsuddenness +p7273 +I32 +sVdata-communications +p7274 +I32 +sVthorp +p7275 +I12 +sVconfair +p7276 +I12 +sVdistorted +p7277 +I32 +sVanger +p7278 +I36 +sVappraisal +p7279 +I36 +sVinsatiable +p7280 +I32 +sVrecover +p7281 +I32 +sVupbeat +p7282 +I32 +sVpublicity +p7283 +I96 +sVunrest +p7284 +I32 +sVliberalization +p7285 +I32 +sVform +p7286 +I44 +sVveteran +p7287 +I32 +sVmanufacturers +p7288 +I110 +sVraikes +p7289 +I12 +sVsuperhot +p7290 +I32 +sVterrific +p7291 +I32 +sVequipment +p7292 +I36 +sVmr. +p7293 +I14 +sVhats +p7294 +I32 +sVtextiles +p7295 +I40 +sVdeux +p7296 +I4 +sVonline +p7297 +I4 +sVobjective +p7298 +I32 +sVbelow-cost +p7299 +I32 +sVsix-cylinder +p7300 +I32 +sVregencys +p7301 +I4 +sVdread +p7302 +I32 +sVtopping +p7303 +I32 +sVbiden +p7304 +I12 +sVattractiveness +p7305 +I32 +sVprice +p7306 +I110 +sVneatly +p7307 +I32 +sVhometown +p7308 +I32 +sVgencorp +p7309 +I14 +sVevaporate +p7310 +I32 +sVeastdil +p7311 +I4 +sVretaliate +p7312 +I32 +sVordering +p7313 +I32 +sVimportantly +p7314 +I32 +sVexpertly +p7315 +I32 +sVrationale +p7316 +I32 +sVamerica +p7317 +I12 +sVbroker-adviser +p7318 +I32 +sVdumez +p7319 +I6 +sVvirologist +p7320 +I32 +sVsauteed +p7321 +I32 +sVlines-western +p7322 +I4 +sVforever +p7323 +I32 +sVsprinting +p7324 +I32 +sVscathing +p7325 +I32 +sVfailure +p7326 +I36 +sVdream +p7327 +I36 +sVattempting +p7328 +I32 +sVsteady +p7329 +I32 +sVklopfenstein +p7330 +I4 +sVhighlight +p7331 +I32 +sVlafarge +p7332 +I14 +sVmrn +p7333 +I4 +sVaerosol +p7334 +I32 +sVa-6e +p7335 +I4 +sVmrk +p7336 +I8 +sVinfringement +p7337 +I32 +sVprofessional +p7338 +I38 +sVritterbusch +p7339 +I4 +sVabraham +p7340 +I14 +sVtypically +p7341 +I34 +sVfiling +p7342 +I38 +sVunderestimates +p7343 +I32 +sVvehicle-leasing +p7344 +I40 +sVunfilled +p7345 +I32 +sVriling +p7346 +I32 +sVgerman +p7347 +I14 +sVwrongful-discharge +p7348 +I32 +sVdiscovered +p7349 +I32 +sVpalmetto +p7350 +I4 +sVconcurs +p7351 +I32 +sVresurrecting +p7352 +I32 +sVteamed +p7353 +I32 +sVjozef +p7354 +I4 +sVhock +p7355 +I4 +sVmaine +p7356 +I4 +sVfifth +p7357 +I38 +sVground +p7358 +I32 +sVupgrade +p7359 +I36 +sVratio +p7360 +I32 +sVentities +p7361 +I32 +sVtitle +p7362 +I32 +sVdownturns +p7363 +I32 +sVmitzi +p7364 +I4 +sVembittered +p7365 +I32 +sVlansing +p7366 +I12 +sVonly +p7367 +I38 +sVgeochemistry +p7368 +I32 +sVjoll +p7369 +I4 +sVpollsters +p7370 +I32 +sVthompson +p7371 +I4 +sVrowan +p7372 +I4 +sVincinerator +p7373 +I32 +sVthird-party +p7374 +I32 +sVinterstate +p7375 +I46 +sVtelevisions +p7376 +I32 +sVminzer +p7377 +I12 +sVyelena +p7378 +I4 +sVsamuel +p7379 +I14 +sVtruly +p7380 +I32 +sVborscht +p7381 +I4 +sVbaghdad +p7382 +I4 +sVcannot +p7383 +I32 +sVregaining +p7384 +I32 +sVkike +p7385 +I32 +sVkika +p7386 +I8 +sVcelebrate +p7387 +I32 +sVbuilds +p7388 +I32 +sVlowest-cost +p7389 +I32 +sVsoviet-turkish +p7390 +I4 +sVpre-graham +p7391 +I32 +sVsuspects +p7392 +I32 +sVwell-capitalized +p7393 +I32 +sVseldom +p7394 +I34 +sVnews-service +p7395 +I32 +sVout-of-state +p7396 +I36 +sVreorganized +p7397 +I96 +sVn.d. +p7398 +I4 +sVpremark +p7399 +I14 +sVlosers +p7400 +I32 +sVdisgruntled +p7401 +I32 +sVprevents +p7402 +I32 +sVkeyes +p7403 +I12 +sVilliterate +p7404 +I32 +sVamanda +p7405 +I4 +sVhusband +p7406 +I32 +sVsalomon +p7407 +I14 +sVconcert +p7408 +I36 +sVsucralose +p7409 +I34 +sVburst +p7410 +I32 +sVa-340 +p7411 +I4 +sVbellwether +p7412 +I96 +sVfiefdom +p7413 +I32 +sVnicholson +p7414 +I4 +sVfanned +p7415 +I32 +sVelected +p7416 +I100 +sVnamely +p7417 +I2 +sVactively +p7418 +I32 +sVsmasher +p7419 +I36 +sVflatly +p7420 +I32 +sVsport +p7421 +I32 +sVmom-and-pop +p7422 +I32 +sVreputed +p7423 +I32 +sVconcern +p7424 +I38 +sg139 +I12 +sVquadrex +p7425 +I4 +sVisraeli +p7426 +I6 +sVsiconolfi +p7427 +I4 +sVcorroboration +p7428 +I32 +sVeuphoria +p7429 +I32 +sVfascinated +p7430 +I32 +sVtexcel +p7431 +I10 +sVjustifies +p7432 +I32 +sVeluded +p7433 +I32 +sVjtl +p7434 +I4 +sVopen-air +p7435 +I32 +sVcomplexion +p7436 +I32 +sVfree-trade +p7437 +I32 +sVambj +p7438 +I8 +sVbetween +p7439 +I34 +sVimport +p7440 +I32 +sVjustified +p7441 +I32 +sVdeveloper +p7442 +I32 +sVredskin +p7443 +I4 +sVwestbound +p7444 +I32 +sVschuster +p7445 +I4 +sVnotice +p7446 +I36 +sVu.s.-backed +p7447 +I4 +sVboning +p7448 +I32 +sVantics +p7449 +I32 +sVgenetic +p7450 +I36 +sVunleashing +p7451 +I32 +sVquondam +p7452 +I32 +sVblame +p7453 +I34 +sVind +p7454 +I4 +sVarmenian +p7455 +I4 +sVfree-standing +p7456 +I32 +sVhurts +p7457 +I32 +sVanalyzed +p7458 +I32 +sVarticle +p7459 +I32 +sVbaytown +p7460 +I4 +sVimpromptu +p7461 +I32 +sVbrooklyn +p7462 +I4 +sVmoney-transfer +p7463 +I32 +sVprat +p7464 +I4 +sVresubmit +p7465 +I32 +sVgwf +p7466 +I8 +sVinstallation +p7467 +I32 +sVtalented +p7468 +I32 +sVmona +p7469 +I4 +sVbypwi +p7470 +I4 +sVballpark +p7471 +I32 +sVself-interest +p7472 +I32 +sVshindig +p7473 +I32 +sVenabling +p7474 +I34 +sVmont +p7475 +I4 +sVw.r. +p7476 +I2 +sVcomex +p7477 +I12 +sVtsuyoshi +p7478 +I4 +sVfined +p7479 +I32 +sVreluctantly +p7480 +I32 +sVwheels +p7481 +I32 +sVswissair +p7482 +I4 +sVcompetent +p7483 +I32 +sVcomes +p7484 +I36 +sVnearby +p7485 +I32 +sVoriginating +p7486 +I32 +sVdisagreement +p7487 +I32 +sVheron +p7488 +I6 +sVmadness +p7489 +I32 +sVcharacterization +p7490 +I32 +sVfarmer +p7491 +I36 +sVjeans +p7492 +I34 +sVforeign-relations +p7493 +I32 +sVinexplicable +p7494 +I32 +sVr-word +p7495 +I4 +sVinexplicably +p7496 +I32 +sVlooms +p7497 +I36 +sVingenious +p7498 +I32 +sVlearning +p7499 +I36 +sVmoreover +p7500 +I42 +sVfruitful +p7501 +I32 +sVt.dhc +p7502 +I4 +sVuchida +p7503 +I4 +sVendotronics +p7504 +I14 +sVmgm/ua +p7505 +I4 +sVpedro +p7506 +I4 +sVstate-of-the-art +p7507 +I32 +sVcarew +p7508 +I8 +sVcares +p7509 +I36 +sVkits +p7510 +I32 +sVmeeting-date +p7511 +I32 +sVrebuild +p7512 +I32 +sVporsche +p7513 +I2 +sVinformed +p7514 +I34 +sVcarey +p7515 +I4 +sVwall-to-wall +p7516 +I32 +sVtropical +p7517 +I32 +sVadventurers +p7518 +I32 +sVblenders +p7519 +I32 +sVpunished +p7520 +I32 +sVemigres +p7521 +I32 +sVoutweighed +p7522 +I32 +sVrebuilt +p7523 +I32 +sVcommenting +p7524 +I32 +sVsystems +p7525 +I44 +sVmarty +p7526 +I6 +sVtournament +p7527 +I32 +sVdiscontinuing +p7528 +I32 +sVelvis +p7529 +I4 +sVdiffered +p7530 +I32 +sVhomely +p7531 +I2 +sVstarring +p7532 +I32 +sVpso +p7533 +I8 +sVempathy +p7534 +I32 +sVexternal +p7535 +I32 +sVstems +p7536 +I32 +sVdesignates +p7537 +I32 +sVsuspected +p7538 +I32 +sVdeflator +p7539 +I32 +sVcantor +p7540 +I4 +sVhorse-racing +p7541 +I32 +sVinformation-age +p7542 +I32 +sVbowie +p7543 +I4 +sVcigarette-tax +p7544 +I32 +sVfinancial-service +p7545 +I32 +sVdeveloping +p7546 +I32 +sVthese +p7547 +I46 +sVabdicating +p7548 +I32 +sVexpropriated +p7549 +I32 +sVtrick +p7550 +I32 +sVrobberies +p7551 +I32 +sVtrico +p7552 +I4 +sVeditorial +p7553 +I36 +sVargonaut +p7554 +I4 +sVedging +p7555 +I32 +sVlandslide +p7556 +I32 +sVmarts +p7557 +I32 +sVexercisable +p7558 +I32 +sVshape-memory +p7559 +I32 +sVdatabases +p7560 +I32 +sVthunberg +p7561 +I4 +sVwayne-gossard +p7562 +I8 +sVheng +p7563 +I8 +sVsoil +p7564 +I32 +sVmetric +p7565 +I32 +sVhealth-care +p7566 +I32 +sVluftwaffe +p7567 +I4 +sVdbase +p7568 +I32 +sVcanceled +p7569 +I32 +sVgringo +p7570 +I32 +sVbias +p7571 +I32 +sVembrace +p7572 +I32 +sVkhoo +p7573 +I4 +sVheels +p7574 +I36 +sVcable-television +p7575 +I32 +sVwell-qualified +p7576 +I32 +sVhelium +p7577 +I32 +sVfloating +p7578 +I32 +sVworry +p7579 +I36 +sVfulfilled +p7580 +I32 +sVquarter-to-quarter +p7581 +I32 +sVdevelop +p7582 +I32 +sVhandled +p7583 +I32 +sVresidence +p7584 +I4 +sVetc +p7585 +I32 +sVinquire +p7586 +I64 +sVmedia +p7587 +I36 +sVe-flats +p7588 +I4 +sVclean-coal +p7589 +I32 +sVcoke +p7590 +I4 +sVceo +p7591 +I4 +sVinquiry +p7592 +I36 +sVangered +p7593 +I32 +sVpclb +p7594 +I8 +sVone-for-one +p7595 +I32 +sVdocument +p7596 +I32 +sVfrazier +p7597 +I4 +sVsystemic +p7598 +I32 +sVnoble +p7599 +I14 +sVfinish +p7600 +I32 +sVcenturies +p7601 +I32 +sVclosest +p7602 +I32 +sVaccommodated +p7603 +I32 +sVbuccaneers +p7604 +I32 +sVfoal +p7605 +I32 +sVworksheet +p7606 +I32 +sVsiegel +p7607 +I12 +sVawarding +p7608 +I32 +sVfruit +p7609 +I36 +sVinvestigates +p7610 +I4 +sVfavorites +p7611 +I32 +sVconquered +p7612 +I32 +sVsilversmiths +p7613 +I32 +sVcuracao-registered +p7614 +I4 +sVpassing +p7615 +I32 +sVcomplained +p7616 +I32 +sVhimont +p7617 +I14 +sVwestin +p7618 +I6 +sVtheater +p7619 +I36 +sVdotted +p7620 +I32 +sVkhoo-related +p7621 +I4 +sVframework +p7622 +I32 +sVcharges +p7623 +I102 +sVlimiteds +p7624 +I32 +sVbrill +p7625 +I4 +sVhyper-reactivity +p7626 +I32 +sVconstitutional +p7627 +I32 +sVinvites +p7628 +I32 +sVauthoritative +p7629 +I32 +sVsevere +p7630 +I32 +sVf.g. +p7631 +I4 +sVcci +p7632 +I12 +sVcongressmen +p7633 +I32 +sValleviate +p7634 +I32 +sVcce +p7635 +I12 +sVlaboratories +p7636 +I36 +sVmagnavox +p7637 +I6 +sVeuroyen +p7638 +I4 +sVcharged +p7639 +I36 +sVtaxi +p7640 +I32 +sVwound-healing +p7641 +I32 +sVchoreography +p7642 +I32 +sVnondurable +p7643 +I40 +sVpermissible +p7644 +I32 +sVcattivera +p7645 +I4 +sVclings +p7646 +I32 +sVarmour +p7647 +I4 +sVdancers +p7648 +I32 +sVneon +p7649 +I32 +sVci +p7650 +I8 +sVvaluable +p7651 +I32 +sVanticipates +p7652 +I32 +sVinflammatory +p7653 +I32 +sVstorming +p7654 +I32 +sVounces +p7655 +I32 +sVtouch +p7656 +I36 +sVspeed +p7657 +I32 +sVdeath +p7658 +I38 +sVeurop +p7659 +I12 +sVu.s.-canadian +p7660 +I4 +sVsheldon +p7661 +I12 +sVforward-looking +p7662 +I32 +sVphaseout +p7663 +I32 +sVbalfour +p7664 +I4 +sVwet +p7665 +I32 +sVimprovement +p7666 +I32 +sVlender +p7667 +I36 +sVallude +p7668 +I32 +sVtreatment +p7669 +I32 +sVre-announced +p7670 +I32 +sVcomplements +p7671 +I32 +sVrepublic +p7672 +I46 +sVstruck +p7673 +I32 +sVinstructions +p7674 +I32 +sVdisproportionate +p7675 +I32 +sVleinberger +p7676 +I12 +sVreal +p7677 +I46 +sVpropped +p7678 +I32 +sVconsumption +p7679 +I98 +sVnielsen +p7680 +I14 +sVamo +p7681 +I12 +sVdesperately +p7682 +I32 +sVread +p7683 +I44 +sVmilllion +p7684 +I32 +sVamc +p7685 +I14 +sVrolf +p7686 +I4 +sVearle +p7687 +I4 +sVamd +p7688 +I4 +sVpsd +p7689 +I8 +sVamf +p7690 +I4 +sVearly +p7691 +I106 +sVearnest +p7692 +I32 +sVbartlesville +p7693 +I8 +sVlistening +p7694 +I32 +sVramshackle +p7695 +I32 +sVusing +p7696 +I42 +sVamr +p7697 +I14 +sVlady +p7698 +I36 +sVdemonstrations +p7699 +I32 +sVswaps +p7700 +I32 +sVruled +p7701 +I32 +sVwhittier +p7702 +I4 +sVproponent +p7703 +I32 +sVcompanywide +p7704 +I32 +sVfortune +p7705 +I36 +sVheightened +p7706 +I32 +sVpounds +p7707 +I32 +sVsuppliers +p7708 +I96 +sVboston-based +p7709 +I4 +sVmiracle +p7710 +I32 +sVannually +p7711 +I34 +sVbarbella +p7712 +I8 +sVbenefit +p7713 +I32 +sVantigovernment +p7714 +I32 +sVingratiate +p7715 +I32 +sVt +p7716 +I12 +sVoccasions +p7717 +I32 +sVoutput +p7718 +I46 +sVdownward +p7719 +I32 +sVpublic-liaison +p7720 +I32 +sVendorsed +p7721 +I32 +sVgovmt +p7722 +I12 +sVexposed +p7723 +I32 +sVsentimentally +p7724 +I32 +sVmcgraw-hill +p7725 +I6 +sVsecret-payments +p7726 +I32 +sVremembers +p7727 +I32 +sVchronology +p7728 +I36 +sVprivatization +p7729 +I32 +sVeddie +p7730 +I6 +sVzealously +p7731 +I32 +sVpolicyholders +p7732 +I32 +sVhastings +p7733 +I2 +sVduration +p7734 +I32 +sVormrod +p7735 +I4 +sVbigger +p7736 +I32 +sVcq +p7737 +I8 +sVcsfb +p7738 +I4 +sVviral +p7739 +I32 +sVpassions +p7740 +I32 +sVmacintyre +p7741 +I4 +sVperverse +p7742 +I32 +sVinsolvency +p7743 +I32 +sVnazi +p7744 +I4 +sVrecorded +p7745 +I32 +sVrankles +p7746 +I32 +sVconservative +p7747 +I36 +sVdealership +p7748 +I32 +sVdeficit +p7749 +I44 +sVweek-old +p7750 +I32 +sVdies +p7751 +I32 +sVrecorder +p7752 +I32 +sVflourishing +p7753 +I36 +sVhustle +p7754 +I32 +sVbarris +p7755 +I8 +sVarabia +p7756 +I4 +sVoutage +p7757 +I32 +sVassembly +p7758 +I96 +sVassad +p7759 +I4 +sg93 +I110 +sVsixth +p7760 +I38 +sVequivalent +p7761 +I96 +sVkolber +p7762 +I8 +sVstrained +p7763 +I32 +sVbalked +p7764 +I32 +sVtuition +p7765 +I32 +sVcredits +p7766 +I32 +sVtdy +p7767 +I12 +sVunterberg +p7768 +I4 +sVstarship +p7769 +I4 +sVinnocence +p7770 +I32 +sVassemble +p7771 +I36 +sVgilts +p7772 +I32 +sVrigorous +p7773 +I32 +sVexciting +p7774 +I32 +sVvrdolyak +p7775 +I12 +sVasai +p7776 +I8 +sVcommunications-based +p7777 +I32 +sVunderpayment +p7778 +I32 +sVcomparison +p7779 +I32 +sVsupervises +p7780 +I32 +sVcentral +p7781 +I44 +sVala. +p7782 +I4 +sVpiety +p7783 +I8 +sVtrekked +p7784 +I32 +sVsri +p7785 +I4 +sVhiatus +p7786 +I32 +sVschuman +p7787 +I4 +sVboesky +p7788 +I12 +sVchop +p7789 +I8 +sVboldly +p7790 +I32 +sVjourney +p7791 +I32 +sVsrv +p7792 +I8 +sVgreatly +p7793 +I32 +sVtestimony +p7794 +I38 +sVintent +p7795 +I32 +sVballerina-like +p7796 +I32 +sVdulles +p7797 +I4 +sVaids-treatment +p7798 +I4 +sVprocessor +p7799 +I32 +sVexported +p7800 +I32 +sVvi +p7801 +I4 +sVheavy +p7802 +I96 +sVoutlook +p7803 +I36 +sVmouthpiece +p7804 +I32 +sVprotests +p7805 +I32 +sVlong-lived +p7806 +I32 +sVinclusion +p7807 +I32 +sVlemgruber +p7808 +I12 +sVmodell +p7809 +I12 +sVastronomically +p7810 +I32 +sVmorin +p7811 +I4 +sVdazzling +p7812 +I32 +sVvariable +p7813 +I32 +sVclose-knit +p7814 +I32 +sVinvolvement +p7815 +I36 +sVshipbuilding +p7816 +I36 +sVheated +p7817 +I32 +sVoperator +p7818 +I32 +sVwatchdog +p7819 +I36 +sVshrinking +p7820 +I32 +sVyour +p7821 +I42 +sVuninvited +p7822 +I32 +sVintervention +p7823 +I32 +sVtaxpapers +p7824 +I32 +sVforwarded +p7825 +I32 +sVprepare +p7826 +I32 +sVarea +p7827 +I36 +sVaren +p7828 +I100 +sVassumed +p7829 +I96 +sVthorns +p7830 +I4 +sVminn. +p7831 +I4 +sVhertz +p7832 +I6 +sVintermodal +p7833 +I4 +sVlos +p7834 +I46 +sVcats +p7835 +I36 +sVsib +p7836 +I4 +sVlow +p7837 +I46 +sVlot +p7838 +I32 +sVlou +p7839 +I4 +sVpoliteness +p7840 +I32 +sVteamwork +p7841 +I36 +sVhartman +p7842 +I6 +sVfastest-growing +p7843 +I32 +sVassumes +p7844 +I32 +sVfaulted +p7845 +I32 +sVjones +p7846 +I12 +sVrecalculation +p7847 +I32 +sVrjr +p7848 +I14 +sVpetty +p7849 +I32 +sVsmuggling +p7850 +I32 +sVdelayed +p7851 +I32 +sVarchbishop +p7852 +I4 +sVrjf +p7853 +I8 +sVcuriously +p7854 +I32 +sVmanipulative +p7855 +I32 +sVrecouped +p7856 +I32 +sVsematech +p7857 +I4 +sVtwo-thirds +p7858 +I32 +sVgenetski +p7859 +I12 +sVtrying +p7860 +I34 +sVcopied +p7861 +I32 +sVwhirring +p7862 +I32 +sVoutskirts +p7863 +I32 +sVtoned +p7864 +I32 +sVhire +p7865 +I32 +sVfraud +p7866 +I36 +sVlight-filled +p7867 +I32 +sVcirculation +p7868 +I32 +sVstanford +p7869 +I12 +sVdefault +p7870 +I32 +sVbreak-even +p7871 +I32 +sVreceptive +p7872 +I32 +sVcorporately +p7873 +I32 +sVappliance +p7874 +I36 +sVdisbanding +p7875 +I32 +sVpetrochemicals +p7876 +I32 +sVsadness +p7877 +I32 +sVmiguel +p7878 +I4 +sVhigh-volume +p7879 +I32 +sVdraftsman +p7880 +I32 +sVtones +p7881 +I32 +sVdurenberger +p7882 +I4 +sVoverstylized +p7883 +I32 +sVdefine +p7884 +I32 +sVbuilders +p7885 +I44 +sVpopularize +p7886 +I32 +sVcohorts +p7887 +I32 +sVwrestlers +p7888 +I32 +sVillnesses +p7889 +I32 +sVnaysayers +p7890 +I32 +sVcampbelltown +p7891 +I4 +sVundertake +p7892 +I32 +sVaxxx +p7893 +I4 +sVthriving +p7894 +I32 +sVarabs +p7895 +I4 +sVdescribe +p7896 +I32 +sVmoved +p7897 +I32 +sVsales +p7898 +I110 +sVquandary +p7899 +I32 +sVaftershocks +p7900 +I32 +sVeight-member +p7901 +I32 +sVair-cargo +p7902 +I32 +sVreliability +p7903 +I32 +sVnero +p7904 +I6 +sVknut +p7905 +I2 +sVa-1-plus +p7906 +I4 +sVmover +p7907 +I32 +sVmoves +p7908 +I36 +sVhospitals +p7909 +I96 +sVtijuana-san +p7910 +I4 +sVcough +p7911 +I32 +sVunwelcome +p7912 +I32 +sVlubove +p7913 +I12 +sVon-time +p7914 +I32 +sVadministered +p7915 +I32 +sVstorage +p7916 +I32 +sVfacilitated +p7917 +I32 +sVmillion-dollar-a-year +p7918 +I32 +sVintercontinental +p7919 +I32 +sVvalid +p7920 +I32 +sVeduardo +p7921 +I4 +sVresearch-and-development +p7922 +I32 +sVgambling +p7923 +I38 +sVyou +p7924 +I38 +sVforcing +p7925 +I32 +sVpoor +p7926 +I38 +sVsuites +p7927 +I4 +sVineligible +p7928 +I32 +sVfly-drive-sleep +p7929 +I32 +sVarab-israeli +p7930 +I4 +sVexpropriation +p7931 +I32 +sVairplanes +p7932 +I36 +sVpeat +p7933 +I36 +sVadvest +p7934 +I6 +sVendeavors +p7935 +I32 +sVcarpenter +p7936 +I12 +sVcapital-spending +p7937 +I32 +sVcomputerized +p7938 +I32 +sVoverreach +p7939 +I32 +sVmassachusetts +p7940 +I4 +sVcoverage +p7941 +I36 +sVahc +p7942 +I4 +sVchopin +p7943 +I4 +sVtendencies +p7944 +I32 +sVoverturned +p7945 +I32 +sVpool +p7946 +I32 +sVhambrecht +p7947 +I4 +sVbuilding +p7948 +I38 +sVpost-teledyne +p7949 +I2 +sVcoal-mining +p7950 +I32 +sVinevitability +p7951 +I32 +sVfleets +p7952 +I32 +sVfoolproof +p7953 +I32 +sVegyptian-born +p7954 +I4 +sVmoonlight +p7955 +I4 +sVmerchant-banking +p7956 +I32 +sVrepay +p7957 +I32 +sVstockpile +p7958 +I32 +sVrestored +p7959 +I32 +sVdoubted +p7960 +I32 +sVdealer-manager +p7961 +I32 +sVchauffeur-driven +p7962 +I32 +sVvelta +p7963 +I4 +sVoverseas +p7964 +I102 +sVmacdougal +p7965 +I8 +sVblue-chip +p7966 +I32 +sVsecond-guessing +p7967 +I32 +sVgiorgio +p7968 +I4 +sVoutlining +p7969 +I32 +sVsurrounded +p7970 +I32 +sVexhibitions +p7971 +I32 +sVpointing +p7972 +I34 +sVbreadth +p7973 +I32 +sVgroundwork +p7974 +I36 +sVoccidential +p7975 +I8 +sVglenview +p7976 +I12 +sVheavy-water +p7977 +I32 +sVceased +p7978 +I32 +sVthoughtful +p7979 +I8 +sVlow-light +p7980 +I32 +sVviability +p7981 +I32 +sVmessy +p7982 +I32 +sVinflating +p7983 +I32 +sVreligious +p7984 +I32 +sVmonty +p7985 +I4 +sVcarpet +p7986 +I32 +sVdreadful +p7987 +I32 +sVreferring +p7988 +I40 +sVauckland +p7989 +I4 +sVpledged +p7990 +I32 +sVwhoever +p7991 +I2 +sVhiring +p7992 +I40 +sVfoster +p7993 +I44 +sVrefute +p7994 +I32 +sVsolicit +p7995 +I4 +sVadversely +p7996 +I32 +sVdominated +p7997 +I44 +sVnodes +p7998 +I32 +sVpledges +p7999 +I32 +sVpatently +p8000 +I32 +sVbouncers +p8001 +I34 +sVconfidential +p8002 +I34 +sVdivisions +p8003 +I32 +sVvoicing +p8004 +I32 +sVgreenback +p8005 +I32 +sVhorror +p8006 +I32 +sVparadise +p8007 +I4 +sVbombarded +p8008 +I32 +sVhodges +p8009 +I4 +sVsouls +p8010 +I32 +sVgown +p8011 +I32 +sVmatriculated +p8012 +I32 +sVbalancing +p8013 +I32 +sVwrangler +p8014 +I4 +sVdecide +p8015 +I32 +sVfrankenstein +p8016 +I4 +sVausterity +p8017 +I32 +sVrehearing +p8018 +I32 +sVsplits +p8019 +I32 +sVlaura +p8020 +I4 +sVheaven +p8021 +I32 +sVatomization +p8022 +I32 +sVvu +p8023 +I32 +sVlouis +p8024 +I14 +sValeman +p8025 +I12 +sVprohibitions +p8026 +I32 +sVcircuit +p8027 +I40 +sVmanages +p8028 +I32 +sVbrasilia +p8029 +I4 +sVbench +p8030 +I32 +sVbristol-myers +p8031 +I4 +sVprofessionsals +p8032 +I32 +sVmeteoric +p8033 +I32 +sVcookies +p8034 +I32 +sVfence +p8035 +I32 +sVeconometric-forecasting +p8036 +I32 +sVstreeters +p8037 +I4 +sVroulac +p8038 +I8 +sVstreets +p8039 +I32 +sVincensed +p8040 +I32 +sVnearing +p8041 +I32 +sVdarman +p8042 +I12 +sVmckeon +p8043 +I8 +sVsavage +p8044 +I44 +sVhays +p8045 +I2 +sVenvisions +p8046 +I32 +sVinert +p8047 +I32 +sVcommentaries +p8048 +I32 +sVtravel-rebates +p8049 +I32 +sVnano +p8050 +I4 +sVinvesting +p8051 +I32 +sVdirt +p8052 +I32 +sVinduce +p8053 +I32 +sVemotions +p8054 +I32 +sVwitnesses +p8055 +I32 +sVapologized +p8056 +I32 +sVdelmas +p8057 +I14 +sVpolk +p8058 +I4 +sVfractional +p8059 +I32 +sVcertificates +p8060 +I96 +sVhighest-volume +p8061 +I32 +sVlearned +p8062 +I32 +sVwor-fm +p8063 +I4 +sVdeborah +p8064 +I2 +sVraton +p8065 +I4 +sVmultinational +p8066 +I32 +sVturmoil +p8067 +I32 +sVstockyards +p8068 +I4 +sViran +p8069 +I6 +sVrecruits +p8070 +I32 +sVboutique +p8071 +I34 +sVresponded +p8072 +I32 +sVmodify +p8073 +I32 +sVvenice +p8074 +I4 +sVanswers +p8075 +I32 +sVbeige +p8076 +I32 +sVaudacious +p8077 +I32 +sVhubs +p8078 +I32 +sVtracks +p8079 +I32 +sVgael +p8080 +I4 +sVgramm-rudman +p8081 +I4 +sVmelt-through +p8082 +I32 +sVexcess +p8083 +I34 +sVvandenburg +p8084 +I4 +sVpraises +p8085 +I32 +sVstrong +p8086 +I46 +sVconsumer-oriented +p8087 +I32 +sVfiance +p8088 +I32 +sVclny +p8089 +I4 +sVarena +p8090 +I32 +sVtraumas +p8091 +I32 +sVbond-trading +p8092 +I32 +sVcreeps +p8093 +I32 +sVcolored +p8094 +I32 +sVahead +p8095 +I40 +sVoutgrowth +p8096 +I32 +sVinspired +p8097 +I32 +sVlosses +p8098 +I100 +sVjohnnie +p8099 +I4 +sVunproved +p8100 +I32 +sVpeaking +p8101 +I32 +sVsoldier +p8102 +I32 +sVamount +p8103 +I32 +sVbestowal +p8104 +I32 +sVadvertising +p8105 +I110 +sVfancier +p8106 +I32 +sVcathy +p8107 +I4 +sVsuccessors +p8108 +I32 +sVinspires +p8109 +I32 +sVsounding +p8110 +I32 +sVjra +p8111 +I4 +sVmediator +p8112 +I32 +sVpanamanian +p8113 +I4 +sVmarginal +p8114 +I32 +sVconcessionary +p8115 +I32 +sVcosmetic +p8116 +I32 +sVthatcher +p8117 +I4 +sVtendered +p8118 +I32 +sVlikable +p8119 +I32 +sVaimed +p8120 +I32 +sVtrained +p8121 +I34 +sVtoys +p8122 +I36 +sVgunmen +p8123 +I32 +sVactress +p8124 +I36 +sVincome-producing +p8125 +I32 +sVmicro-marketing +p8126 +I32 +sVattendant +p8127 +I32 +sVrecurrence +p8128 +I32 +sVconventional +p8129 +I32 +sVearliest +p8130 +I32 +sVflaws +p8131 +I32 +sVtakes +p8132 +I44 +sVanswered +p8133 +I32 +sVrevelation +p8134 +I32 +sVone-day +p8135 +I36 +sVcontains +p8136 +I32 +sVnabih +p8137 +I4 +sVstrauss +p8138 +I4 +sVoutperform +p8139 +I32 +sVoecd +p8140 +I12 +sVpraised +p8141 +I32 +sVhmos +p8142 +I4 +sVheroic +p8143 +I32 +sVmcclelland +p8144 +I4 +sVtalismans +p8145 +I32 +sVtaken +p8146 +I102 +sVburlington +p8147 +I4 +sVoil-field +p8148 +I32 +sVinjury +p8149 +I32 +sVassessor +p8150 +I4 +sVauthorization +p8151 +I32 +sVtoronto-dominion +p8152 +I10 +sVlinden +p8153 +I4 +sVlowering +p8154 +I34 +sVrun-and-gun +p8155 +I32 +sVerode +p8156 +I32 +sVfast-food +p8157 +I32 +sVstylistic +p8158 +I32 +sVjr. +p8159 +I4 +sVregrettable +p8160 +I32 +sVthree-lane +p8161 +I32 +sVsurprisingly +p8162 +I32 +sVinstrumental +p8163 +I32 +sVexcuse +p8164 +I32 +sVgarza +p8165 +I4 +sVbroke +p8166 +I32 +sVunderwriter +p8167 +I32 +sVokla.-based +p8168 +I4 +sVmounted +p8169 +I32 +sVproducing +p8170 +I32 +sVsuffered +p8171 +I32 +sVhelped +p8172 +I34 +sVmonopoles +p8173 +I34 +sVhicksville +p8174 +I8 +sVreallocation +p8175 +I32 +sVoffender +p8176 +I32 +sVrichardson-vicks +p8177 +I4 +sVpollack +p8178 +I12 +sVcoalition +p8179 +I32 +sVwork-practice +p8180 +I32 +sVoffended +p8181 +I32 +sVnine +p8182 +I38 +sVbudgets +p8183 +I32 +sVhassenfeld +p8184 +I8 +sVmo +p8185 +I4 +sVhistory +p8186 +I36 +sVhhs +p8187 +I6 +sVtranscend +p8188 +I32 +sVvivaldi +p8189 +I4 +sVpersists +p8190 +I32 +sVrua +p8191 +I4 +sVneanderthals +p8192 +I4 +sVboo-boos +p8193 +I32 +sVbatschari +p8194 +I12 +sVvw +p8195 +I8 +sVpublicist +p8196 +I32 +sVterrible +p8197 +I32 +sVpushed +p8198 +I96 +sVbook-to-bill +p8199 +I32 +sVcows +p8200 +I32 +sVphrase +p8201 +I32 +sVamericas +p8202 +I4 +sVspecies +p8203 +I32 +sVf. +p8204 +I4 +sVfirmly +p8205 +I32 +sVravitch +p8206 +I4 +sVenglish-language +p8207 +I4 +sVplayful +p8208 +I32 +sVprocessors +p8209 +I32 +sVct. +p8210 +I4 +sVstymie +p8211 +I32 +sVprivate-ownership +p8212 +I32 +sVchops +p8213 +I32 +sVcomplication +p8214 +I32 +sVledger +p8215 +I32 +sVstayed +p8216 +I32 +sVsurpassed +p8217 +I32 +sVconsumer-group +p8218 +I32 +sVmenus +p8219 +I32 +sVforesees +p8220 +I32 +sVreject +p8221 +I36 +sVbahia +p8222 +I4 +sVgreenslet +p8223 +I12 +sVportray +p8224 +I32 +sVtried +p8225 +I96 +sVcommunicating +p8226 +I32 +sVdaisy +p8227 +I4 +sVderived +p8228 +I32 +sVsneak +p8229 +I32 +sVtexas-based +p8230 +I4 +sVunderpaid +p8231 +I32 +sVtries +p8232 +I32 +sVterrorist +p8233 +I32 +sVbatterymarch +p8234 +I6 +sVfe +p8235 +I4 +sVmalmstrom +p8236 +I4 +sVsyria +p8237 +I4 +sVinvasion +p8238 +I32 +sVderives +p8239 +I32 +sVcompulsory +p8240 +I32 +sVco-authored +p8241 +I32 +sVa +p8242 +I126 +sVplanet +p8243 +I32 +sVworkstation +p8244 +I32 +sVcriticize +p8245 +I32 +sVpreferential +p8246 +I32 +sVrelocating +p8247 +I34 +sVspectra +p8248 +I4 +sVovernight +p8249 +I36 +sVanytime +p8250 +I32 +sVweapon +p8251 +I32 +sVbashing +p8252 +I32 +sVbamberger +p8253 +I12 +sVnegligible +p8254 +I32 +sVtelephones +p8255 +I32 +sVdeterioration +p8256 +I32 +sVstricharchuk +p8257 +I4 +sVbanks +p8258 +I110 +sVsolidly +p8259 +I32 +sVegg +p8260 +I32 +sVyuppie +p8261 +I36 +sVrayner +p8262 +I8 +sVhovering +p8263 +I32 +sVskagit/hanford +p8264 +I4 +sVhelp +p8265 +I36 +sVtreasurys +p8266 +I10 +sVhierarchy +p8267 +I32 +sVchadli +p8268 +I4 +sVsoon +p8269 +I98 +sVmestizo +p8270 +I32 +sVheld +p8271 +I44 +sVthermal +p8272 +I32 +sVpasok +p8273 +I4 +sVcommittee +p8274 +I38 +sVcommitted +p8275 +I32 +sVhelm +p8276 +I32 +sVhell +p8277 +I36 +sVkinetic +p8278 +I32 +sVoblivious +p8279 +I32 +sVfischer +p8280 +I4 +sVlimelight +p8281 +I32 +sVromance +p8282 +I34 +sVdiscloses +p8283 +I32 +sVtaxpayer +p8284 +I32 +sVoverhead +p8285 +I32 +sVwishful +p8286 +I32 +sVrazzmatazz +p8287 +I32 +sVsolving +p8288 +I32 +sVreluctance +p8289 +I32 +sVactually +p8290 +I38 +sVabsence +p8291 +I32 +sVirvington-on-hudson +p8292 +I2 +sVdisclosed +p8293 +I36 +sVoriental +p8294 +I4 +sVradical +p8295 +I32 +sVfounders +p8296 +I32 +sVpeanuts +p8297 +I32 +sVfines +p8298 +I32 +sVfool +p8299 +I36 +sVspear-throwing +p8300 +I32 +sVevening +p8301 +I36 +sVcurtis +p8302 +I12 +sVfood +p8303 +I46 +sVcen +p8304 +I8 +sVdemographics +p8305 +I32 +sValliant +p8306 +I4 +sVpettee +p8307 +I12 +sVanticipated +p8308 +I32 +sVformations +p8309 +I32 +sVover-represented +p8310 +I32 +sVcommodore +p8311 +I4 +sVsweeping +p8312 +I32 +sVlinking +p8313 +I32 +sVtrustworthiness +p8314 +I32 +sVflemming +p8315 +I4 +sVrebelling +p8316 +I32 +sVwell-known +p8317 +I32 +sVthree-man +p8318 +I32 +sVimprisoned +p8319 +I32 +sVfully +p8320 +I34 +sVintervene +p8321 +I32 +sVsemiannual +p8322 +I32 +sVpowell +p8323 +I4 +sVcapability +p8324 +I32 +sVdisdaining +p8325 +I32 +sVstopped +p8326 +I32 +sVpredators +p8327 +I32 +sVradial +p8328 +I32 +sVoscars +p8329 +I4 +sVfairy +p8330 +I36 +sVsingle-store +p8331 +I32 +sVobligated +p8332 +I32 +sVnonbinding +p8333 +I32 +sVreferred +p8334 +I32 +sVbarrels +p8335 +I32 +sVequicor-equitable +p8336 +I4 +sVtaft +p8337 +I14 +sVneil +p8338 +I6 +sVinvoked +p8339 +I32 +sVeditor-in-chief +p8340 +I32 +sVreconsideration +p8341 +I32 +sVjaws +p8342 +I32 +sVhealthvest +p8343 +I8 +sVblank +p8344 +I4 +sVpositioned +p8345 +I32 +sVphi +p8346 +I4 +sVwacky +p8347 +I32 +sVinterferred +p8348 +I32 +sVbickering +p8349 +I32 +sVpunitive +p8350 +I36 +sVmitsuko +p8351 +I4 +sVtodd +p8352 +I10 +sVbalk +p8353 +I32 +sVinspections +p8354 +I32 +sVbeyond +p8355 +I34 +sVevent +p8356 +I32 +sVwallenberg +p8357 +I12 +sVdrunks +p8358 +I2 +sVgamse +p8359 +I4 +sVmagnet +p8360 +I32 +sVaccelerates +p8361 +I32 +sVdominates +p8362 +I32 +sVpraise +p8363 +I32 +sVthird-largest +p8364 +I32 +sVe.f. +p8365 +I6 +sVrobert +p8366 +I14 +sVsince +p8367 +I110 +sVtemporary +p8368 +I32 +sVtestify +p8369 +I32 +sVdouglas +p8370 +I12 +sVtrusts +p8371 +I32 +sVwolverine +p8372 +I4 +sVhayden +p8373 +I4 +sVcomputerizing +p8374 +I32 +sVsafety +p8375 +I36 +sVjolla +p8376 +I4 +sVdeposed +p8377 +I32 +sVissue +p8378 +I36 +sVearthquake-free +p8379 +I32 +sVpul +p8380 +I4 +sVtarkanian +p8381 +I6 +sVu-shaped +p8382 +I4 +sVbass +p8383 +I12 +sVhoused +p8384 +I32 +sVast +p8385 +I4 +sVfavored +p8386 +I36 +sVkreider +p8387 +I4 +sVitek +p8388 +I4 +sVdung +p8389 +I4 +sVabalone-lover +p8390 +I32 +sVpub +p8391 +I4 +sVbreckinridge +p8392 +I2 +sVlabs +p8393 +I4 +sVhouses +p8394 +I32 +sVreason +p8395 +I36 +sVbase +p8396 +I36 +sVbrightest +p8397 +I32 +sVdire +p8398 +I32 +sVmorella +p8399 +I4 +sVask +p8400 +I34 +sVmatthews +p8401 +I12 +sVeaster-egg +p8402 +I4 +sVhapless +p8403 +I32 +sVturnout +p8404 +I34 +sVreimpose +p8405 +I36 +sVcurtailed +p8406 +I32 +sVstep-up +p8407 +I32 +sVrevolutionary +p8408 +I32 +sVunresolved +p8409 +I32 +sVhigh-gloss +p8410 +I32 +sVlaunch +p8411 +I32 +sVbroad-based +p8412 +I32 +sVperceptible +p8413 +I32 +sVscript +p8414 +I32 +sVpersuading +p8415 +I32 +sVbrazenly +p8416 +I32 +sVapawamis +p8417 +I4 +sVsaatchi +p8418 +I6 +sVterribly +p8419 +I32 +sVamerican +p8420 +I14 +sVexpecting +p8421 +I32 +sVbusinessmen +p8422 +I34 +sVautomobile +p8423 +I32 +sVheartbeat +p8424 +I32 +sVproduct-liability +p8425 +I32 +sVdis +p8426 +I8 +sVmobex +p8427 +I12 +sVinterviews +p8428 +I32 +sVcut-and-dried +p8429 +I32 +sVpartnerships +p8430 +I36 +sVfarrakhan +p8431 +I4 +sVsingleton +p8432 +I12 +sVcoasts +p8433 +I32 +sVantibody +p8434 +I36 +sVnorand +p8435 +I4 +sVpresumptions +p8436 +I32 +sVschubert +p8437 +I4 +sVandreas +p8438 +I4 +sVreflected +p8439 +I32 +sVmarckesano +p8440 +I12 +sVelder +p8441 +I36 +sVdutch-auction-rate +p8442 +I4 +sVdominating +p8443 +I32 +sVoscar-winning +p8444 +I4 +sVveiled +p8445 +I32 +sVmiss +p8446 +I38 +sVmaple +p8447 +I32 +sVvilla +p8448 +I4 +sVarbitration +p8449 +I32 +sVhobbled +p8450 +I32 +sVhorse +p8451 +I32 +sVno-win +p8452 +I32 +sVguaranteeing +p8453 +I32 +sVst. +p8454 +I12 +sVkidder +p8455 +I14 +sVairborne +p8456 +I36 +sVbroccoli +p8457 +I32 +sVbelongs +p8458 +I32 +sVstation +p8459 +I36 +sVidentity +p8460 +I32 +sVhindered +p8461 +I32 +sVsoprano +p8462 +I32 +sVscheme +p8463 +I36 +sVbechtel +p8464 +I4 +sVgibraltar +p8465 +I4 +sVshifted +p8466 +I32 +sVselling +p8467 +I42 +sVstorm +p8468 +I36 +sVbehind +p8469 +I34 +sVbowen +p8470 +I12 +sVncr +p8471 +I4 +sVjamie +p8472 +I2 +sVtfb +p8473 +I8 +sVbroadcastmail +p8474 +I32 +sVjordan +p8475 +I12 +sVsignaling +p8476 +I34 +sVauthors +p8477 +I32 +sVtaxable +p8478 +I32 +sVdiscounted +p8479 +I32 +sVimposing +p8480 +I36 +sVsteaks +p8481 +I32 +sVon-site +p8482 +I34 +sVsoviet-backed +p8483 +I4 +sVgrocery +p8484 +I32 +sVhundred +p8485 +I32 +sVstb +p8486 +I8 +sVtishman +p8487 +I4 +sVstate-owned +p8488 +I32 +sVhalves +p8489 +I32 +sVanticipate +p8490 +I32 +sVacknowledgement +p8491 +I32 +sVticket-purchase +p8492 +I32 +sVstk +p8493 +I4 +sVbride +p8494 +I36 +sValluding +p8495 +I32 +sVgreg +p8496 +I4 +sVstore +p8497 +I36 +sVshotgun +p8498 +I32 +sVdelfzijl +p8499 +I4 +sVburrowing +p8500 +I32 +sVtoward +p8501 +I36 +sVousted +p8502 +I32 +sVenthusiasm +p8503 +I36 +sVprocedural +p8504 +I32 +sVkarr +p8505 +I8 +sVcharlotte +p8506 +I4 +sVwithered +p8507 +I32 +sVcholeric +p8508 +I32 +sVontario-based +p8509 +I4 +sVious +p8510 +I4 +sVurgently +p8511 +I32 +sVconstructors +p8512 +I12 +sVoverstate +p8513 +I36 +sVlentivirus +p8514 +I4 +sVaffirmative +p8515 +I32 +sVsubstantial +p8516 +I32 +sVcomrades +p8517 +I32 +sVconvertible-debt +p8518 +I32 +sVsegue +p8519 +I32 +sVconcentration +p8520 +I32 +sVskiing +p8521 +I32 +sVorgans +p8522 +I32 +sVvulnerable +p8523 +I32 +sVshowcased +p8524 +I32 +sVratings +p8525 +I36 +sVgeranium +p8526 +I32 +sVjour +p8527 +I32 +sVchaotic +p8528 +I32 +sVevasion +p8529 +I32 +sVdinar +p8530 +I32 +sVcherokee +p8531 +I4 +sVspeculative +p8532 +I32 +sVcave +p8533 +I4 +sVscotland +p8534 +I4 +sVofficers +p8535 +I100 +sVcamouflage +p8536 +I32 +sVswallowing +p8537 +I32 +sVlip +p8538 +I32 +sVuseless +p8539 +I36 +sVmx +p8540 +I4 +sVibew +p8541 +I4 +sVunconstrained +p8542 +I32 +sVrhodes +p8543 +I4 +sVkab +p8544 +I8 +sVaired +p8545 +I32 +sVexperienced +p8546 +I32 +sVhires +p8547 +I32 +sVinference +p8548 +I32 +sVafghanistan +p8549 +I4 +sVapproves +p8550 +I44 +sVtsuei +p8551 +I8 +sVquota +p8552 +I32 +sVmacy +p8553 +I12 +sVrhi +p8554 +I4 +sVplunder +p8555 +I32 +sVhired +p8556 +I32 +sVsponsored +p8557 +I32 +sVasian-based +p8558 +I4 +sVeaten +p8559 +I32 +sVposition +p8560 +I96 +sValpha +p8561 +I4 +sVkay +p8562 +I4 +sVmack +p8563 +I12 +sVapproved +p8564 +I36 +sVaberrations +p8565 +I32 +sVsalary +p8566 +I44 +sVraving +p8567 +I32 +sVdisinflation +p8568 +I32 +sVchronicle +p8569 +I32 +sVmobile +p8570 +I32 +sVarising +p8571 +I32 +sVclear +p8572 +I44 +sVcalling +p8573 +I34 +sVcarry-forward +p8574 +I32 +sVtreasurer +p8575 +I36 +sVdivestiture +p8576 +I32 +sVoptical +p8577 +I4 +sVelectrons +p8578 +I32 +sVhealth-insurance +p8579 +I32 +sVclean +p8580 +I36 +sVa.a. +p8581 +I4 +sVlaroche +p8582 +I8 +sVlatest +p8583 +I44 +sVblend +p8584 +I32 +sVtalmudic +p8585 +I4 +sVperseverance +p8586 +I32 +sVcrackpot +p8587 +I32 +sVbud +p8588 +I32 +sVphenomenon +p8589 +I32 +sVstunned +p8590 +I32 +sVblindly +p8591 +I32 +sVcelebrities +p8592 +I32 +sVmeticulously +p8593 +I32 +sVannuities +p8594 +I32 +sVmelt +p8595 +I32 +sVvote-buying +p8596 +I32 +sVcohens +p8597 +I4 +sVarming +p8598 +I34 +sVtranslation +p8599 +I32 +sVstorer +p8600 +I4 +sVcompletion +p8601 +I34 +sVpalestinians +p8602 +I4 +sVnorthern +p8603 +I46 +sVduncan +p8604 +I4 +sVjustice +p8605 +I46 +sVpre-approved +p8606 +I32 +sVless +p8607 +I38 +sVassertion +p8608 +I32 +sVcline +p8609 +I8 +sVmerger-defense +p8610 +I32 +sVflights +p8611 +I36 +sVrandy +p8612 +I4 +sVcolby +p8613 +I4 +sVsurveyed +p8614 +I96 +sVpretty +p8615 +I32 +sVsuspect +p8616 +I32 +sVharmed +p8617 +I32 +sVrotterdam +p8618 +I4 +sVveress +p8619 +I4 +sVensconced +p8620 +I32 +sVreap +p8621 +I32 +sVwoodside +p8622 +I4 +sVall-seeing +p8623 +I32 +sVdominant +p8624 +I32 +sVmeanwhile +p8625 +I46 +sVwagner +p8626 +I12 +sVretorts +p8627 +I32 +sVoutlast +p8628 +I32 +sVfinancing +p8629 +I44 +sVtrees +p8630 +I32 +sVfamous +p8631 +I32 +sVfeels +p8632 +I32 +sVgrew +p8633 +I40 +sVspecial-interest-group +p8634 +I32 +sVhesston +p8635 +I14 +sVcompeting +p8636 +I42 +sVdoctorate +p8637 +I32 +sVduring +p8638 +I110 +sVsoft-drink +p8639 +I96 +sVintensify +p8640 +I32 +sValexander +p8641 +I4 +sVwheezes +p8642 +I32 +sVcatches +p8643 +I34 +sVleft-wing +p8644 +I32 +sVoxy +p8645 +I8 +sVsacrificed +p8646 +I32 +sVdiamond +p8647 +I14 +sVperformers +p8648 +I32 +sVretaliation +p8649 +I96 +sVoppenheimer +p8650 +I12 +sVsacrifices +p8651 +I32 +sVdtc +p8652 +I12 +sVthwarts +p8653 +I32 +sVinterim +p8654 +I36 +sVwheat +p8655 +I34 +sVldcs +p8656 +I4 +sVwithdrawal +p8657 +I44 +sVswitzerland +p8658 +I14 +sVx +p8659 +I12 +sVforster +p8660 +I12 +sVpre-reform +p8661 +I32 +sVouster +p8662 +I32 +sVlesa +p8663 +I4 +sVscuttle +p8664 +I32 +sVseventeen +p8665 +I2 +sVsto +p8666 +I4 +sVmaurice +p8667 +I6 +sVthrowing +p8668 +I32 +sVunpublished +p8669 +I32 +sVstreptokinase +p8670 +I32 +sVplausibly +p8671 +I32 +sVkilos +p8672 +I32 +sVplausible +p8673 +I32 +sVculture +p8674 +I36 +sVhoroscopes +p8675 +I32 +sVbethlehem +p8676 +I12 +sVplummeted +p8677 +I32 +sVprotecting +p8678 +I32 +sVclose +p8679 +I44 +sVscandinavian +p8680 +I4 +sVbaldness +p8681 +I32 +sVdwarf +p8682 +I32 +sVmckay +p8683 +I12 +sVchicago-area +p8684 +I4 +sVglue +p8685 +I32 +sVprobable +p8686 +I32 +sVcolonialists +p8687 +I32 +sVtranstechnology +p8688 +I14 +sVpictures +p8689 +I36 +sVfamiliarity +p8690 +I32 +sVicn-financed +p8691 +I4 +sVtolls +p8692 +I4 +sVengen +p8693 +I4 +sVplush +p8694 +I32 +sVwoo +p8695 +I32 +sVwon +p8696 +I108 +sVwachtell +p8697 +I4 +sVunluckiest +p8698 +I32 +sVprobably +p8699 +I96 +sVmatsushita +p8700 +I4 +sVconditions +p8701 +I32 +sVraburn +p8702 +I4 +sVrisks +p8703 +I36 +sVnasturtium +p8704 +I32 +sVahonoora +p8705 +I4 +sVcircumventing +p8706 +I32 +sVnotoriously +p8707 +I32 +sVmissing +p8708 +I40 +sVstallion +p8709 +I32 +sVarentsen +p8710 +I8 +sVraves +p8711 +I32 +sVfrenzied +p8712 +I32 +sVdistinguish +p8713 +I32 +sVrustler +p8714 +I4 +sVchengbei +p8715 +I4 +sVb-1b +p8716 +I4 +sVabruptly +p8717 +I96 +sVboth +p8718 +I46 +sVsouthmark +p8719 +I14 +sVsecrets +p8720 +I32 +sVprepubescent +p8721 +I32 +sVsecond-largest +p8722 +I32 +sVfootball-field +p8723 +I32 +sVminorities +p8724 +I32 +sVsensitive +p8725 +I32 +sVgrille +p8726 +I32 +sVanti-inflation +p8727 +I32 +sVarbitrage-trading +p8728 +I32 +sVpanitz +p8729 +I12 +sVforgotten +p8730 +I36 +sVn.y.-based +p8731 +I4 +sVrisky +p8732 +I36 +sVrodgers +p8733 +I8 +sVexperimental +p8734 +I32 +sVmickey +p8735 +I4 +sVliked +p8736 +I32 +sVwork-study +p8737 +I32 +sVheaded +p8738 +I96 +sVbattery +p8739 +I32 +sVeldorado +p8740 +I6 +sVhewn +p8741 +I32 +sVlammermoor +p8742 +I4 +sVmanners +p8743 +I32 +sVwhatever +p8744 +I38 +sVrefaat +p8745 +I4 +sVcontras +p8746 +I4 +sVunfolded +p8747 +I32 +sVspotting +p8748 +I32 +sVlikes +p8749 +I32 +sVvessel +p8750 +I32 +sVgrenfell +p8751 +I4 +sVmathematically +p8752 +I32 +sVmission +p8753 +I38 +sVonus +p8754 +I32 +sVdescribed +p8755 +I32 +sVadjoins +p8756 +I32 +sVstamp +p8757 +I32 +sVdamp +p8758 +I32 +sVimperils +p8759 +I8 +sVhertzberg +p8760 +I4 +sVdescribes +p8761 +I32 +sVdamn +p8762 +I32 +sVmaintenance +p8763 +I32 +sVcollected +p8764 +I32 +sVpreventable +p8765 +I32 +sVterritory +p8766 +I32 +sVoutput-based +p8767 +I32 +sVempty +p8768 +I32 +sg151 +I14 +sVbudgeted +p8769 +I32 +sVbox +p8770 +I96 +sVdialogue +p8771 +I32 +sVlived +p8772 +I32 +sVpartly +p8773 +I34 +sVpacks +p8774 +I32 +sVliven +p8775 +I32 +sVcrack +p8776 +I32 +sVhbo +p8777 +I6 +sVtwelve-meter +p8778 +I2 +sVanthony +p8779 +I6 +sVdelco +p8780 +I4 +sVmajority-owned +p8781 +I32 +sVdetermination +p8782 +I32 +sVcompromised +p8783 +I32 +sVbidding +p8784 +I36 +sVleapfrogged +p8785 +I32 +sVsuicide +p8786 +I32 +sVfollowerfish +p8787 +I32 +sVmanuverings +p8788 +I32 +sVsecond-quarter +p8789 +I32 +sVtwo-by-four +p8790 +I32 +sVredemption +p8791 +I44 +sVpact +p8792 +I44 +sVaaron +p8793 +I4 +sVlook +p8794 +I38 +sVsocialist +p8795 +I36 +sVbattling +p8796 +I32 +sVgovernor +p8797 +I32 +sVpace +p8798 +I36 +sVwhile +p8799 +I46 +sVmainframe +p8800 +I32 +sVcrager +p8801 +I8 +sVought +p8802 +I32 +sVfernao +p8803 +I4 +sVendanger +p8804 +I32 +sVfleet +p8805 +I36 +sVtranscripts +p8806 +I32 +sVmost-active +p8807 +I32 +sVmitchell +p8808 +I12 +sVguide +p8809 +I36 +sVropk +p8810 +I4 +sVpack +p8811 +I32 +sVjpi +p8812 +I8 +sVhoak +p8813 +I8 +sVjpm +p8814 +I4 +sVjoned +p8815 +I32 +sVvoters +p8816 +I34 +sVwherever +p8817 +I32 +sVoverlooked +p8818 +I32 +sVtelevision-type +p8819 +I32 +sVreads +p8820 +I32 +sVloosened +p8821 +I32 +sVready +p8822 +I36 +sVsimian +p8823 +I32 +sVtransparently +p8824 +I32 +sVfairer +p8825 +I32 +sVhyperbole +p8826 +I32 +sVexploitation +p8827 +I32 +sVsingle-engine +p8828 +I32 +sVclerical +p8829 +I32 +sVshaw +p8830 +I12 +sValarm +p8831 +I36 +sVgrant +p8832 +I46 +sVlacy +p8833 +I38 +sVbelong +p8834 +I32 +sVfull-financing +p8835 +I32 +sVport +p8836 +I32 +sValbani +p8837 +I12 +sVunpromising +p8838 +I32 +sVpetzinger +p8839 +I4 +sVtalbots +p8840 +I4 +sVgrand +p8841 +I36 +sVrisk-taking +p8842 +I32 +sVestes +p8843 +I8 +sVgestures +p8844 +I32 +sVcomposition +p8845 +I32 +sVconflict +p8846 +I32 +sVchautauqua +p8847 +I4 +sVnail-painting +p8848 +I32 +sVused +p8849 +I44 +sVlawyers +p8850 +I46 +sVzoltan +p8851 +I4 +sVoptic +p8852 +I32 +sVlie +p8853 +I32 +sVbonus +p8854 +I32 +sVsharky +p8855 +I32 +sVblair +p8856 +I12 +sVoverweight +p8857 +I32 +sVhopelessly +p8858 +I32 +sVcensure +p8859 +I34 +sVdims +p8860 +I4 +sVuses +p8861 +I32 +sVcleaning +p8862 +I32 +sVhaunting +p8863 +I32 +sVwrongful +p8864 +I32 +sVassortment +p8865 +I32 +sVbrussels +p8866 +I12 +sVarturo +p8867 +I4 +sVolenick +p8868 +I4 +sVgiacomo +p8869 +I4 +sVgsu +p8870 +I8 +sVolder +p8871 +I32 +sVanxious +p8872 +I32 +sVpoland +p8873 +I6 +sVcruz +p8874 +I12 +sVkotlowitz +p8875 +I4 +sVobviously +p8876 +I36 +sVsports +p8877 +I36 +sVaccrediting +p8878 +I36 +sVroyalty +p8879 +I4 +sVchronicles +p8880 +I32 +sVauditor +p8881 +I40 +sVcharing +p8882 +I4 +sVconsistency +p8883 +I32 +sVclears +p8884 +I12 +sVcedar +p8885 +I8 +sVfive-point +p8886 +I32 +sVbog +p8887 +I32 +sVappalled +p8888 +I32 +sVgrossly +p8889 +I32 +sVweakest +p8890 +I32 +sVcoup +p8891 +I36 +sVempowered +p8892 +I32 +sVexploits +p8893 +I32 +sVbearer +p8894 +I32 +sVjudgments +p8895 +I32 +sVh.c. +p8896 +I6 +sVsettlements +p8897 +I36 +sVlivestock +p8898 +I2 +sVtechnicians +p8899 +I2 +sVreviewed +p8900 +I32 +sVdevastatingly +p8901 +I32 +sVbelgium +p8902 +I6 +sVdistanced +p8903 +I32 +sVelect +p8904 +I32 +sVtaiwan +p8905 +I4 +sVseidler +p8906 +I4 +sVconfidentiality +p8907 +I32 +sVmiddlemen +p8908 +I32 +sVwell-financed +p8909 +I32 +sVretirement +p8910 +I36 +sVkingpin +p8911 +I32 +sVover-the-counter +p8912 +I32 +sVinformal +p8913 +I32 +sVguaranteed +p8914 +I36 +sVexercising +p8915 +I32 +sVshortcut +p8916 +I32 +sVarmin +p8917 +I4 +sVstock-market +p8918 +I36 +sVquestioned +p8919 +I32 +sVspecial-operations +p8920 +I32 +sVdecontamination +p8921 +I32 +sVguarantees +p8922 +I32 +sVremaining +p8923 +I32 +sVsprinted +p8924 +I32 +sVripples +p8925 +I32 +sVmarch +p8926 +I46 +sVstein +p8927 +I12 +sVreplicate +p8928 +I32 +sVevaluate +p8929 +I32 +sVshowing +p8930 +I32 +sVseven-nation +p8931 +I32 +sVgenetically +p8932 +I32 +sVgame +p8933 +I36 +sVflamingo +p8934 +I4 +sVdearly +p8935 +I32 +sVabrogate +p8936 +I32 +sVemma +p8937 +I4 +sVreits +p8938 +I4 +sVdollar-stocks +p8939 +I4 +sVvino +p8940 +I32 +sVdrum-shaped +p8941 +I32 +sVpainted +p8942 +I32 +sVoutright +p8943 +I32 +sVbanjo +p8944 +I32 +sVannoucements +p8945 +I32 +sVexcluding +p8946 +I42 +sVcocoa +p8947 +I38 +sVinterestingly +p8948 +I2 +sVtoyota +p8949 +I8 +sVbranford +p8950 +I4 +sVstrife +p8951 +I32 +sVchairs +p8952 +I32 +sVbbc +p8953 +I4 +sVprovoking +p8954 +I32 +sVdonna +p8955 +I4 +sVloucks +p8956 +I8 +sVpopular +p8957 +I36 +sVsoftness +p8958 +I32 +sVcoldwell +p8959 +I4 +sVcontadora +p8960 +I4 +sVmathematical +p8961 +I32 +sVsketch +p8962 +I32 +sVjamail +p8963 +I12 +sVparade +p8964 +I32 +sVbrakes +p8965 +I32 +sVwell-connected +p8966 +I32 +sVcreation +p8967 +I32 +sVsome +p8968 +I110 +sVpierre +p8969 +I12 +sVmhc +p8970 +I12 +sVdoublespeak +p8971 +I32 +sVone-way +p8972 +I32 +sVtrends +p8973 +I36 +sVeconomic +p8974 +I108 +sVwheeling-pittsburgh +p8975 +I2 +sVhispanics +p8976 +I4 +sVfanfare +p8977 +I32 +sVmscc +p8978 +I4 +sVlesuer +p8979 +I8 +sVboulevard +p8980 +I6 +sVdelivered +p8981 +I32 +sVqatar +p8982 +I4 +sVanti-khomeini +p8983 +I32 +sVcolumbia-based +p8984 +I4 +sVsalaried +p8985 +I32 +sVw.c. +p8986 +I4 +sVexceeding +p8987 +I32 +sVappalachia +p8988 +I4 +sVdebra +p8989 +I4 +sVfundamentalist +p8990 +I32 +sVprovidence +p8991 +I12 +sVcivilization +p8992 +I36 +sVroommate +p8993 +I32 +sVslash +p8994 +I32 +sVgoldman +p8995 +I14 +sVtrouble-free +p8996 +I32 +sVtransplant +p8997 +I32 +sVkai +p8998 +I4 +sVminimal +p8999 +I32 +sVsympathetic +p9000 +I32 +sVrhr +p9001 +I8 +sVrun +p9002 +I36 +sVprocessini +p9003 +I4 +sVtabor +p9004 +I12 +sVrub +p9005 +I36 +sVhypocritical +p9006 +I32 +sVfirst-time +p9007 +I32 +sVprocessing +p9008 +I32 +sVcge +p9009 +I4 +sVundergone +p9010 +I32 +sVrebates +p9011 +I32 +sVstep +p9012 +I32 +sVassists +p9013 +I32 +sVstew +p9014 +I4 +sVlasts +p9015 +I32 +sVat&t +p9016 +I14 +sVpanhandle +p9017 +I2 +sVmid-1960s +p9018 +I32 +sVabroad +p9019 +I36 +sVrut +p9020 +I4 +sVtroops +p9021 +I32 +sVshine +p9022 +I32 +sVfaith +p9023 +I32 +sVtrumpet-filled +p9024 +I32 +sVgangster-filled +p9025 +I32 +sVconcretely +p9026 +I32 +sVmcgraw +p9027 +I4 +sVafternoons +p9028 +I32 +sVmid-1990s +p9029 +I32 +sVsurrender +p9030 +I32 +sVsecurties +p9031 +I4 +sVlieberman +p9032 +I8 +sVtrucking +p9033 +I32 +sVhinge +p9034 +I32 +sVperk +p9035 +I32 +sVpains +p9036 +I32 +sVtananbaum +p9037 +I12 +sVinexperienced +p9038 +I32 +sVshimbun +p9039 +I4 +sVexperiences +p9040 +I32 +sVpullouts +p9041 +I32 +sVclassics +p9042 +I32 +sVshiny +p9043 +I32 +sVangry +p9044 +I32 +sVblock +p9045 +I44 +sVida +p9046 +I4 +sVdisclosure +p9047 +I38 +sVkohlberg +p9048 +I4 +sVwithin +p9049 +I34 +sVnonsense +p9050 +I32 +sVrolla +p9051 +I4 +sVwellsford +p9052 +I4 +sVrockets +p9053 +I32 +sVamerada +p9054 +I4 +sVbureaucratically +p9055 +I32 +sVpentagon +p9056 +I14 +sVrolls +p9057 +I4 +sVsmells +p9058 +I32 +sVknifepoint +p9059 +I4 +sVbehaving +p9060 +I32 +sVsoothe +p9061 +I32 +sVstatistics +p9062 +I44 +sVclassical +p9063 +I32 +sVrenewal +p9064 +I32 +sVdismal +p9065 +I32 +sVplots +p9066 +I32 +sVplacing +p9067 +I32 +sValtmann +p9068 +I4 +sVaccountability +p9069 +I32 +sVvisas +p9070 +I96 +sVsoared +p9071 +I36 +sVheritage +p9072 +I38 +sVphoto-processing +p9073 +I32 +sVcalumny +p9074 +I32 +sVsinai +p9075 +I4 +sVopossms +p9076 +I4 +sVmanufacture +p9077 +I32 +sVwithholding +p9078 +I32 +sVthree-member +p9079 +I32 +sVgoverns +p9080 +I32 +sVup-and-coming +p9081 +I32 +sVcollapsed +p9082 +I32 +sVfrost +p9083 +I32 +sVspecialty +p9084 +I96 +sVbolsters +p9085 +I32 +sVreiterated +p9086 +I32 +sVcalgary +p9087 +I12 +sVlarry +p9088 +I14 +sVreed +p9089 +I12 +sVauthority +p9090 +I36 +sVtragically +p9091 +I32 +sVscope +p9092 +I32 +sVrussian +p9093 +I4 +sVdisproportionately +p9094 +I32 +sVex-cia +p9095 +I32 +sVinvestment-banking +p9096 +I32 +sVdull +p9097 +I36 +sVmineral +p9098 +I32 +sVfda +p9099 +I6 +sVpaternalistic +p9100 +I32 +sVjayne +p9101 +I2 +sVskull +p9102 +I4 +sVcircuits +p9103 +I32 +sVchromed +p9104 +I32 +sVvacancies +p9105 +I32 +sVuti +p9106 +I4 +sVsifting +p9107 +I32 +sVfdn +p9108 +I4 +sVnestle +p9109 +I2 +sVfds +p9110 +I8 +sVcautiously +p9111 +I32 +sVkuhn +p9112 +I2 +sVperformances +p9113 +I34 +sVembattled +p9114 +I32 +sVutx +p9115 +I8 +sVsimilar +p9116 +I32 +sVport-o-potty +p9117 +I4 +sVlovers +p9118 +I36 +sVbotlek +p9119 +I4 +sVr-revised +p9120 +I16 +sVjones-irwin +p9121 +I4 +sVpopularity +p9122 +I32 +sVordered +p9123 +I32 +sVadults +p9124 +I32 +sVmindful +p9125 +I32 +sVinterventions +p9126 +I32 +sVginnie +p9127 +I14 +sVsnapping +p9128 +I32 +sVflush +p9129 +I32 +sVaccessibility +p9130 +I32 +sVmetals +p9131 +I36 +sVtrimming +p9132 +I32 +sVreopening +p9133 +I36 +sVmetall +p9134 +I6 +sVhigher-ranking +p9135 +I32 +sVestrangement +p9136 +I32 +sVsensibly +p9137 +I32 +sVapropos +p9138 +I2 +sVmutuals +p9139 +I32 +sVcarmen +p9140 +I4 +sVcrary +p9141 +I12 +sVrecalculated +p9142 +I32 +sVcotton +p9143 +I44 +sVliberalize +p9144 +I32 +sVturbine +p9145 +I32 +sVancestors +p9146 +I32 +sVnag +p9147 +I32 +sVnad +p9148 +I4 +sVamounts +p9149 +I32 +sVdashed +p9150 +I32 +sVtito +p9151 +I4 +sVfine-tuned +p9152 +I32 +sVfears +p9153 +I32 +sVarmenians +p9154 +I4 +sVnon-whites +p9155 +I32 +sVfeedlots +p9156 +I32 +sVapplication +p9157 +I32 +sVpoliticians +p9158 +I34 +sVforgn +p9159 +I12 +sVelectrical +p9160 +I100 +sVtransport +p9161 +I36 +sVnat +p9162 +I4 +sVgrind +p9163 +I32 +sVdepartment +p9164 +I44 +sVdynes +p9165 +I8 +sVlonsdale +p9166 +I4 +sVdardi +p9167 +I4 +sVpadding +p9168 +I32 +sVsmiles +p9169 +I32 +sVdraw +p9170 +I32 +sVfidelity-monarch +p9171 +I4 +sVtelevision-newsroom +p9172 +I4 +sVreportedly +p9173 +I32 +sVludcke +p9174 +I8 +sVwillcox +p9175 +I8 +sVwohl +p9176 +I12 +sVkansas +p9177 +I4 +sVawry +p9178 +I32 +sVtriumph +p9179 +I32 +sVvisits +p9180 +I32 +sVregulations +p9181 +I32 +sVdrag +p9182 +I32 +sVsmiled +p9183 +I32 +sVdram +p9184 +I4 +sVreservation +p9185 +I32 +sVheroine +p9186 +I32 +sVstructure +p9187 +I32 +sVcashing +p9188 +I32 +sVhanover +p9189 +I4 +sVurged +p9190 +I32 +sVindependently +p9191 +I32 +sVcoincided +p9192 +I32 +sVpractically +p9193 +I32 +sVzooming +p9194 +I32 +sVtubes +p9195 +I32 +sVrequired +p9196 +I32 +sVsvb +p9197 +I4 +sVvisual +p9198 +I32 +sVbleached +p9199 +I32 +sVdepth +p9200 +I32 +sVdowning +p9201 +I32 +sVwooden +p9202 +I32 +sVo-daiko +p9203 +I32 +sVrequires +p9204 +I32 +sVleveraged +p9205 +I32 +sVevenly +p9206 +I32 +sVgd +p9207 +I4 +sVstones +p9208 +I4 +sVkatz +p9209 +I4 +sVgt +p9210 +I12 +sVspecialization +p9211 +I32 +sVgr +p9212 +I4 +sVt-1000s +p9213 +I4 +sVmores +p9214 +I32 +sVcabinet-level +p9215 +I32 +sVcruise-missile +p9216 +I32 +sVtadeusz +p9217 +I8 +sVgy +p9218 +I8 +sVreplow +p9219 +I32 +sVoct. +p9220 +I6 +sVsecurities-services +p9221 +I32 +sVge +p9222 +I14 +sVproposition +p9223 +I32 +sVidolized +p9224 +I32 +sVairliners +p9225 +I32 +sVgo +p9226 +I36 +sVbarbecue +p9227 +I38 +sVgm +p9228 +I14 +sVpaccar +p9229 +I6 +sVcovertible +p9230 +I4 +sVbottom-line +p9231 +I32 +sVnutrasweet +p9232 +I14 +sVexcludes +p9233 +I32 +sVbirthplace +p9234 +I32 +sVhovered +p9235 +I32 +sVfence-sitting +p9236 +I32 +sVbeneficiaries +p9237 +I32 +sVaria +p9238 +I32 +sVstave +p9239 +I32 +sVspeakerphone +p9240 +I32 +sVarid +p9241 +I32 +sVsuits +p9242 +I38 +sVattired +p9243 +I32 +sVoffice-automation +p9244 +I64 +sVnippon +p9245 +I14 +sVdoes +p9246 +I98 +sVunruffled +p9247 +I32 +sVepitaph +p9248 +I32 +sVexcluded +p9249 +I32 +sVky.-based +p9250 +I4 +sVbrowns +p9251 +I4 +sVimagery +p9252 +I32 +sVrtn +p9253 +I12 +sVcolman +p9254 +I4 +sVmoribund +p9255 +I32 +sVrebounding +p9256 +I32 +sVportfolios +p9257 +I32 +sVstirring +p9258 +I32 +sVwave +p9259 +I32 +sVsqueaked +p9260 +I32 +sVrotational +p9261 +I32 +sVwash. +p9262 +I4 +sVnichols +p9263 +I4 +sVunderscore +p9264 +I32 +sVtruffle +p9265 +I32 +sVtelling +p9266 +I32 +sVg. +p9267 +I4 +sVworsened +p9268 +I32 +sVabductors +p9269 +I32 +sVdinsmore +p9270 +I4 +sVnon-food +p9271 +I32 +sVstiff +p9272 +I32 +sVmeant +p9273 +I36 +sVpositions +p9274 +I44 +sVmichael +p9275 +I14 +sVwatered +p9276 +I32 +sVmocatta +p9277 +I4 +sVassignments +p9278 +I32 +sVregisters +p9279 +I32 +sVverdict +p9280 +I32 +sVred-blood-cell +p9281 +I32 +sVstewart +p9282 +I12 +sVresigns +p9283 +I40 +sVshish +p9284 +I2 +sVinspection +p9285 +I40 +sVenforce +p9286 +I32 +sVsuppress +p9287 +I32 +sVtop-notch +p9288 +I32 +sVboat-and-motor +p9289 +I32 +sVbloomingdale +p9290 +I4 +sVpaunches +p9291 +I32 +sVbooty +p9292 +I32 +sVcarter +p9293 +I12 +sVarbitragers +p9294 +I34 +sVpunishing +p9295 +I32 +sVabortion +p9296 +I32 +sVcds +p9297 +I4 +sVblitz +p9298 +I32 +sVthinly +p9299 +I32 +sVboots +p9300 +I36 +sVdecreed +p9301 +I32 +sVjump +p9302 +I36 +sVhose +p9303 +I32 +sVgraying +p9304 +I32 +sVzy +p9305 +I4 +sVpicked +p9306 +I32 +sVnotwithstanding +p9307 +I32 +sVfabrication +p9308 +I32 +sVcartel +p9309 +I32 +sVhonors +p9310 +I32 +sVarbitrager +p9311 +I36 +sVa-discounted +p9312 +I64 +sVmccullagh +p9313 +I4 +sVplays +p9314 +I32 +sVevokes +p9315 +I32 +sVpaintings +p9316 +I32 +sVbroadman +p9317 +I4 +sVcolonel +p9318 +I32 +sVmolders +p9319 +I6 +sVexacerbate +p9320 +I32 +sVvalet +p9321 +I32 +sVgen. +p9322 +I14 +sVexperiment +p9323 +I32 +sVvolatile +p9324 +I32 +sVreferees +p9325 +I32 +sVself-defeating +p9326 +I32 +sVcollins +p9327 +I4 +sVpersisted +p9328 +I32 +sVnicholas +p9329 +I4 +sVmarketer +p9330 +I32 +sVabela +p9331 +I12 +sVbrunei +p9332 +I14 +sVfocuses +p9333 +I32 +sVbecor +p9334 +I12 +sVfilings +p9335 +I36 +sVstance +p9336 +I36 +sVupsetting +p9337 +I32 +sVflournoy +p9338 +I4 +sVwaller +p9339 +I4 +sVcommercial +p9340 +I46 +sValfa-laval +p9341 +I6 +sVfollowing +p9342 +I42 +sVlarge-screen +p9343 +I32 +sVramsey +p9344 +I4 +sVfocused +p9345 +I32 +sVaffidavits +p9346 +I32 +sVcheck-kiting +p9347 +I32 +sVenterprising +p9348 +I4 +sVdelinquent +p9349 +I4 +sVsequestered +p9350 +I32 +sVconvert +p9351 +I32 +sVkhoo-shearson +p9352 +I4 +sVcopyright +p9353 +I32 +sVkissinger +p9354 +I4 +sVchant +p9355 +I4 +sVveered +p9356 +I32 +sVentailed +p9357 +I32 +sVnew-hire +p9358 +I32 +sVstock-cash +p9359 +I32 +sVproducts +p9360 +I100 +sVoverproduced +p9361 +I32 +sVvolga +p9362 +I4 +sVchang +p9363 +I4 +sVgene +p9364 +I12 +sVcommendable +p9365 +I32 +sVpatents +p9366 +I32 +sVgena +p9367 +I4 +sVexamining +p9368 +I32 +sVraoul +p9369 +I4 +sVstabilization +p9370 +I36 +sVaddresses +p9371 +I32 +sVclark +p9372 +I12 +sVdanger +p9373 +I32 +sVclare +p9374 +I4 +sVwin +p9375 +I40 +sVjuries +p9376 +I32 +sVmanage +p9377 +I32 +sVlitigators +p9378 +I32 +sVcrazy +p9379 +I38 +sVclout +p9380 +I32 +sVparanoia +p9381 +I32 +sVaustria +p9382 +I4 +sVsurpluses +p9383 +I32 +sVanomalies +p9384 +I32 +sVbuildup +p9385 +I32 +sVtruckloads +p9386 +I32 +sVdestabilize +p9387 +I32 +sVsinging +p9388 +I36 +sVcloud +p9389 +I32 +sVstrapped +p9390 +I32 +sVspace-based +p9391 +I32 +sVbarrios +p9392 +I4 +sVromeo +p9393 +I4 +sVremains +p9394 +I100 +sVcarrington +p9395 +I4 +sVchild-care +p9396 +I40 +sVhudson +p9397 +I12 +sVcray +p9398 +I4 +sVadequacy +p9399 +I32 +sVpredict +p9400 +I32 +sVcamera +p9401 +I32 +sVcounties +p9402 +I32 +sVsubsidized +p9403 +I32 +sVvehicle +p9404 +I32 +sVagreeable +p9405 +I32 +sVnoisy +p9406 +I32 +sVasahi +p9407 +I2 +sVtruck-trailer +p9408 +I32 +sVhydro +p9409 +I4 +sVdenigrating +p9410 +I32 +sVformally +p9411 +I32 +sVnickeling +p9412 +I32 +sVstarted +p9413 +I32 +sVbecomes +p9414 +I36 +sVtestified +p9415 +I32 +sVrationing +p9416 +I32 +sVmissile +p9417 +I108 +sVlovastatin +p9418 +I34 +sVisraelis +p9419 +I4 +sVangolans +p9420 +I4 +sVmitsubishi +p9421 +I4 +sVpocahontas +p9422 +I4 +sVappointed +p9423 +I32 +sVstarter +p9424 +I36 +sVstafford +p9425 +I8 +sVb.v. +p9426 +I4 +sVfundamentalism +p9427 +I32 +sVedelman +p9428 +I12 +sVarched +p9429 +I32 +sVannouncing +p9430 +I32 +sVsanctions +p9431 +I100 +sVricans +p9432 +I4 +sVride +p9433 +I36 +sVaveraged +p9434 +I32 +sVdmgif +p9435 +I8 +sVrecession +p9436 +I32 +sVchevelles +p9437 +I4 +sVcrossed +p9438 +I32 +sVperma +p9439 +I4 +sVservants +p9440 +I32 +sVmeet +p9441 +I36 +sVdrops +p9442 +I4 +sVaverages +p9443 +I34 +sVcertainty +p9444 +I32 +sVnoncaloric +p9445 +I32 +sVbattered +p9446 +I32 +sVcontrol +p9447 +I44 +sVhip +p9448 +I36 +sVhides +p9449 +I32 +sVlinks +p9450 +I32 +sVmoney-losing +p9451 +I32 +sVintroduces +p9452 +I32 +sVamhowitz +p9453 +I8 +sVcounterpoint +p9454 +I32 +sVfranyo +p9455 +I4 +sVimaging +p9456 +I32 +sVwielders +p9457 +I32 +sVpulling +p9458 +I32 +sVserviceable +p9459 +I32 +sVsought +p9460 +I44 +sVhit +p9461 +I44 +sVskirt +p9462 +I32 +sVkennett +p9463 +I4 +sVfearsome +p9464 +I32 +sVreveres +p9465 +I32 +sVstemmed +p9466 +I32 +sVbarringer +p9467 +I4 +sVattraction +p9468 +I32 +sVcelestre +p9469 +I8 +sVsteel-fabrication +p9470 +I32 +sVdefective +p9471 +I32 +sVsword +p9472 +I32 +sVambivalence +p9473 +I32 +sVchevrolet +p9474 +I12 +sVviratek +p9475 +I4 +sVsandra +p9476 +I4 +sVarrangement +p9477 +I32 +sVlocated +p9478 +I32 +sVsentiments +p9479 +I32 +sVcurrently-available +p9480 +I32 +sVrevitalize +p9481 +I36 +sVtoadstool +p9482 +I32 +sVferdinand +p9483 +I4 +sVprime-time +p9484 +I32 +sVmonolithic +p9485 +I4 +sVcrafty +p9486 +I32 +sVfare +p9487 +I32 +sVnipny +p9488 +I4 +sVshugart +p9489 +I4 +sVstalked +p9490 +I32 +sVfarm +p9491 +I46 +sVhoskins +p9492 +I12 +sVrestrict +p9493 +I32 +sVronald +p9494 +I6 +sVostensible +p9495 +I32 +sVfatigue +p9496 +I32 +sVfetched +p9497 +I32 +sVdiscard +p9498 +I32 +sVchiam +p9499 +I4 +sVfpa +p9500 +I8 +sVciticorp-issued +p9501 +I4 +sVflashier +p9502 +I32 +sVrepackage +p9503 +I32 +sVformulated +p9504 +I32 +sVwgn +p9505 +I4 +sValexanders +p9506 +I4 +sVadvocated +p9507 +I32 +sVgrousing +p9508 +I32 +sVfixed-income +p9509 +I2 +sVindemnifying +p9510 +I32 +sVphoto-identification +p9511 +I32 +sVcapsule +p9512 +I32 +sVmicrophones +p9513 +I64 +sVbetter-conceived +p9514 +I32 +sVoctavia +p9515 +I4 +sVdoorbells +p9516 +I32 +sVspain +p9517 +I4 +sVagenda +p9518 +I32 +sVtilt +p9519 +I32 +sVf-20 +p9520 +I4 +sVbkne +p9521 +I8 +sVexecutives +p9522 +I102 +sVduzan +p9523 +I8 +sVlongest +p9524 +I32 +sVbathing +p9525 +I32 +sVepidemiologist +p9526 +I32 +sVfresno +p9527 +I4 +sVattain +p9528 +I32 +sVambition +p9529 +I32 +sVbasement +p9530 +I32 +sVwaterflood +p9531 +I32 +sVrebellious +p9532 +I32 +sVbenedetti +p9533 +I4 +sVsperm +p9534 +I32 +sVcombinations +p9535 +I32 +sVless-developed +p9536 +I32 +sVrendered +p9537 +I32 +sVincluding +p9538 +I34 +sVstimulating +p9539 +I32 +sVresignations +p9540 +I32 +sVcruise +p9541 +I36 +sVmentioned +p9542 +I32 +sVconverting +p9543 +I32 +sVvilify +p9544 +I32 +sVnewsweek +p9545 +I6 +sVbox-office +p9546 +I32 +sVstrikingly +p9547 +I32 +sVouter +p9548 +I32 +sVdubofsky +p9549 +I4 +sVbig-college +p9550 +I32 +sVguerrilla +p9551 +I32 +sVbrook +p9552 +I4 +sVpura +p9553 +I4 +sVhousewife +p9554 +I32 +sVconsumer-goods +p9555 +I2 +sVfreedman +p9556 +I12 +sVmelloan +p9557 +I4 +sVvancouver +p9558 +I12 +sVwrite-offs +p9559 +I32 +sVmolten +p9560 +I32 +sVmurdock +p9561 +I12 +sVexcoriating +p9562 +I32 +sVdebt-backed +p9563 +I32 +sVorgolini +p9564 +I4 +sVwells +p9565 +I44 +sVauto +p9566 +I102 +sVpolygraph +p9567 +I32 +sVcamino +p9568 +I4 +sVrelentless +p9569 +I32 +sVpins +p9570 +I4 +sVfixed-cost +p9571 +I32 +sVbillions +p9572 +I32 +sVhands +p9573 +I32 +sVfront +p9574 +I36 +sVacidic +p9575 +I32 +sVhandy +p9576 +I40 +sVdiscontinue +p9577 +I32 +sVday-care +p9578 +I34 +sVmasters +p9579 +I36 +sVpersuasion +p9580 +I4 +sVgrumbling +p9581 +I32 +sVchronic +p9582 +I32 +sVswamping +p9583 +I32 +sVuniversity +p9584 +I36 +sVrevolted +p9585 +I32 +sVwrite-down +p9586 +I32 +sVslide +p9587 +I36 +sVmagnitude +p9588 +I32 +sVovercharged +p9589 +I32 +sVdrug-delivery +p9590 +I32 +sVgemayel +p9591 +I4 +sVcrossing +p9592 +I32 +sVcamden +p9593 +I2 +sVbacha +p9594 +I12 +sVjob-hopping +p9595 +I32 +sVcalny +p9596 +I14 +sVlegions +p9597 +I32 +sVupward +p9598 +I32 +sVbaxter +p9599 +I14 +sVunwind +p9600 +I32 +sVshowering +p9601 +I32 +sVilluminate +p9602 +I32 +sVgreyerz +p9603 +I4 +sVrecruiter +p9604 +I32 +sVchunk +p9605 +I32 +sVlund +p9606 +I4 +sVills +p9607 +I32 +sVcity-sponsored +p9608 +I32 +sVconstitute +p9609 +I32 +sVseesaw +p9610 +I4 +sVdesigner +p9611 +I32 +sVsands +p9612 +I4 +sVmeasure +p9613 +I36 +sVseparating +p9614 +I32 +sVflourishes +p9615 +I32 +sVmargins +p9616 +I36 +sVbloodletting +p9617 +I32 +sVstimulants +p9618 +I32 +sVspecial +p9619 +I46 +sVm.j. +p9620 +I6 +sVsecretly +p9621 +I32 +sVoffsetting +p9622 +I34 +sVinvestigative +p9623 +I32 +sVentertainment +p9624 +I36 +sVafoot +p9625 +I32 +sVconfess +p9626 +I32 +sVricupero +p9627 +I4 +sVcriminally +p9628 +I32 +sVmaffei +p9629 +I4 +sVmere +p9630 +I32 +sVdemos +p9631 +I8 +sVcritics +p9632 +I34 +sVactivist +p9633 +I32 +sVarmon +p9634 +I4 +sVwondrous +p9635 +I32 +sVlibor +p9636 +I4 +sVclearing +p9637 +I36 +sVapcar +p9638 +I8 +sVcause +p9639 +I32 +sVachievements +p9640 +I32 +sVangolan +p9641 +I6 +sVumbrella +p9642 +I32 +sVpolonsky +p9643 +I4 +sVbig-bucks +p9644 +I32 +sVtully +p9645 +I4 +sVeco +p9646 +I4 +sVrecommendations +p9647 +I32 +sVdelegates +p9648 +I36 +sVundo +p9649 +I32 +sVdarkly +p9650 +I32 +sVwinston-salem +p9651 +I4 +sVhype +p9652 +I32 +sVcompletely +p9653 +I32 +sVluders +p9654 +I12 +sVconservatives +p9655 +I36 +sVsneer +p9656 +I32 +sVridge +p9657 +I4 +sVdelegated +p9658 +I32 +sVacker +p9659 +I12 +sVfallout +p9660 +I32 +sVprincess +p9661 +I4 +sVresumed +p9662 +I32 +sVfarmland +p9663 +I32 +sVbarksdale +p9664 +I4 +sVhostile +p9665 +I40 +sVfueled +p9666 +I36 +sVpeelings +p9667 +I32 +sVdetermining +p9668 +I32 +sVroute +p9669 +I36 +sVflorida +p9670 +I12 +sVmac +p9671 +I4 +sVtimes +p9672 +I46 +sVcounterpart +p9673 +I96 +sVantonio-based +p9674 +I4 +sVkeel +p9675 +I36 +sVrepulsed +p9676 +I32 +sVbrides +p9677 +I32 +sVmisses +p9678 +I32 +sVhumphrey +p9679 +I4 +sVaustin +p9680 +I6 +sVlancet +p9681 +I4 +sVd-ram +p9682 +I4 +sVmad +p9683 +I4 +sVprospective +p9684 +I32 +sVmoot +p9685 +I32 +sVepileptics +p9686 +I32 +sVevans +p9687 +I4 +sVsucceeds +p9688 +I96 +sVzero-sum +p9689 +I32 +sVbeseechingly +p9690 +I32 +sVpowerful +p9691 +I32 +sVredefine +p9692 +I32 +sVthrombolytic +p9693 +I32 +sVintrospective +p9694 +I32 +sVimproving +p9695 +I32 +sVcofide +p9696 +I12 +sVphil +p9697 +I4 +sVtancredo +p9698 +I4 +sVnakagama +p9699 +I4 +sVwis. +p9700 +I4 +sVquality +p9701 +I36 +sVingested +p9702 +I32 +sVhiding +p9703 +I32 +sVsubpeonas +p9704 +I32 +sVstamina +p9705 +I32 +sVclearinghouse +p9706 +I32 +sVmanagement +p9707 +I110 +sVrebs +p9708 +I4 +sVcourt-sanctioned +p9709 +I32 +sVbears +p9710 +I36 +sVfilthy +p9711 +I4 +sVdurable +p9712 +I40 +sVtoyoo +p9713 +I4 +sVsuperannuation +p9714 +I4 +sVdivestments +p9715 +I32 +sVadopted +p9716 +I40 +sVhair-trigger +p9717 +I32 +sVwalder +p9718 +I8 +sVattach +p9719 +I32 +sVattack +p9720 +I40 +sVparry +p9721 +I8 +sVgainful +p9722 +I32 +sVdeclines +p9723 +I36 +sVgoings-on +p9724 +I32 +sVconfectionery +p9725 +I32 +sVperfectly +p9726 +I32 +sVfinal +p9727 +I34 +sVbeare +p9728 +I8 +sVcontract-suspension +p9729 +I32 +sVdisagreeable +p9730 +I32 +sVredesignation +p9731 +I32 +sVbirch +p9732 +I8 +sVcecola +p9733 +I8 +sVoutboard +p9734 +I42 +sVrowlands +p9735 +I4 +sVexactly +p9736 +I32 +sVinstinct +p9737 +I32 +sVpiloted +p9738 +I32 +sVlists +p9739 +I32 +sVveterans +p9740 +I36 +sVtues. +p9741 +I8 +sVsachem +p9742 +I4 +sVchemicals +p9743 +I40 +sVsupplemented +p9744 +I32 +sVatpwi +p9745 +I4 +sVmanipulation +p9746 +I96 +sVgrooves +p9747 +I32 +sVme-too +p9748 +I32 +sVoverwhelming +p9749 +I32 +sVherself +p9750 +I32 +sVcyl +p9751 +I8 +sVvncp +p9752 +I8 +sVreneged +p9753 +I32 +sVbel +p9754 +I4 +sVmanning +p9755 +I8 +sVpretax +p9756 +I32 +sVcoast +p9757 +I44 +sVcooperman +p9758 +I12 +sVrosenthal +p9759 +I4 +sVsubmitted +p9760 +I32 +sVclaim +p9761 +I32 +sVmoroccans +p9762 +I4 +sVanaheim +p9763 +I12 +sVdefense +p9764 +I108 +sVponnelle +p9765 +I12 +sVspurt +p9766 +I32 +sVproviding +p9767 +I36 +sVbev +p9768 +I4 +sVdistinguished +p9769 +I32 +sVbet +p9770 +I32 +sVborden +p9771 +I14 +sVbagged +p9772 +I32 +sVenforced +p9773 +I32 +sVbilateral +p9774 +I32 +sVcommrcl +p9775 +I8 +sVthwarted +p9776 +I32 +sVammunition +p9777 +I32 +sVjulian +p9778 +I2 +sVunchanged +p9779 +I40 +sVcarrots +p9780 +I32 +sVfollow-through +p9781 +I32 +sVasics +p9782 +I4 +sVbarakat +p9783 +I4 +sVpemberton +p9784 +I4 +sVsandoz +p9785 +I4 +sVenforces +p9786 +I32 +sVportrait +p9787 +I32 +sVneed +p9788 +I32 +sVmanitoba +p9789 +I4 +sVconstrained +p9790 +I32 +sVborder +p9791 +I36 +sVgrudgingly +p9792 +I32 +sVsings +p9793 +I32 +sVitt +p9794 +I6 +sVheaped +p9795 +I32 +sVsprinkles +p9796 +I32 +sVgermain +p9797 +I4 +sVdrucker +p9798 +I4 +sVpursued +p9799 +I32 +sVpetroleumish +p9800 +I32 +sVable +p9801 +I32 +sVthorny +p9802 +I32 +sVbattles +p9803 +I32 +sVinstance +p9804 +I32 +sVrelatives +p9805 +I32 +sVissuing +p9806 +I32 +sVpivotal +p9807 +I36 +sVlocals +p9808 +I36 +sVtactic +p9809 +I32 +sVbus +p9810 +I32 +sVmiddle-income +p9811 +I32 +sVdetector +p9812 +I32 +sVdc-9 +p9813 +I8 +sVsitcoms +p9814 +I32 +sVlecturer +p9815 +I32 +sVcharmer +p9816 +I32 +sVfuels +p9817 +I32 +sVasthmatics +p9818 +I32 +sVfloundered +p9819 +I32 +sVfibreboard +p9820 +I6 +sVdeploy +p9821 +I32 +sVdisgorge +p9822 +I32 +sVsometimes-flimsy +p9823 +I32 +sVexpires +p9824 +I32 +sVcamper +p9825 +I32 +sVplugging +p9826 +I32 +sVresplendent +p9827 +I32 +sVintentions +p9828 +I32 +sVmontana +p9829 +I4 +sVconnected +p9830 +I32 +sVdemise +p9831 +I32 +sVbrother-in-law +p9832 +I32 +sVmechanically +p9833 +I32 +sVawe +p9834 +I32 +sVexpired +p9835 +I32 +sVgallery +p9836 +I36 +sVpyf +p9837 +I8 +sVstereo +p9838 +I32 +sVwilcox +p9839 +I4 +sVconversations +p9840 +I32 +sVinsured +p9841 +I32 +sVupset +p9842 +I32 +sVbreeze +p9843 +I4 +sVastonishing +p9844 +I32 +sVscrambled +p9845 +I32 +sVlowered +p9846 +I96 +sVsnapshot +p9847 +I32 +sVgesture +p9848 +I32 +sVheartbeats +p9849 +I32 +sVholstein +p9850 +I4 +sVbusinessman +p9851 +I32 +sVtransamerica +p9852 +I4 +sVskunk +p9853 +I32 +sVfriction +p9854 +I32 +sVaffair +p9855 +I36 +sVemerging +p9856 +I32 +sVparker +p9857 +I4 +sVsplintering +p9858 +I32 +sVreprehensible +p9859 +I32 +sVviolation +p9860 +I32 +sVairlift +p9861 +I36 +sVmg. +p9862 +I32 +sVunfathomable +p9863 +I32 +sVaspidistra +p9864 +I32 +sVslvn +p9865 +I8 +sVlikens +p9866 +I32 +sVparked +p9867 +I32 +sVsoldiers +p9868 +I32 +sVhigh-level +p9869 +I32 +sVshield +p9870 +I36 +sVatcor +p9871 +I12 +sVpartners +p9872 +I36 +sVenvy +p9873 +I32 +sVediting +p9874 +I32 +sVbased +p9875 +I46 +sVschwartz +p9876 +I4 +sVtire +p9877 +I46 +sVearned +p9878 +I36 +sVminiseries +p9879 +I32 +sVvarig +p9880 +I4 +sVwinner +p9881 +I32 +sVmillennia +p9882 +I32 +sVdebt-ridden +p9883 +I32 +sVemployes +p9884 +I32 +sVemployer +p9885 +I34 +sVbrighter +p9886 +I36 +sVarabian +p9887 +I4 +sVstoughton +p9888 +I8 +sVreorganizing +p9889 +I32 +sVinherited +p9890 +I32 +sVemployee +p9891 +I32 +sVemployed +p9892 +I32 +sVachieve +p9893 +I32 +sVdodge +p9894 +I40 +sVsharper +p9895 +I32 +sVepilepsy +p9896 +I36 +sVlynn +p9897 +I12 +sVmichigan +p9898 +I14 +sVbroderbund +p9899 +I4 +sVoverall +p9900 +I34 +sVmaritime +p9901 +I36 +sVcopyrights +p9902 +I32 +sVjoint +p9903 +I44 +sVlear-siegler +p9904 +I4 +sVb-1 +p9905 +I12 +sVlegitimate +p9906 +I36 +sVjoins +p9907 +I32 +sVdownturn +p9908 +I32 +sVbuyer +p9909 +I34 +sVwurtman +p9910 +I12 +sVyears +p9911 +I102 +sVprocedures +p9912 +I32 +sVmarvels +p9913 +I32 +sVarmtek +p9914 +I4 +sVgray +p9915 +I46 +sVprocesses +p9916 +I32 +sVevident +p9917 +I32 +sVtobacco +p9918 +I44 +sVstructuring +p9919 +I32 +sVshy +p9920 +I32 +sVtuned +p9921 +I32 +sVprocessed +p9922 +I32 +sVgran +p9923 +I4 +sVlevin +p9924 +I14 +sVtunes +p9925 +I32 +sVrecoup +p9926 +I32 +sVgrab +p9927 +I32 +sVshl +p9928 +I10 +sVterrace +p9929 +I4 +sVspotted +p9930 +I32 +sVgerm-warfare +p9931 +I32 +sVnon-japanese +p9932 +I32 +sVaccuses +p9933 +I32 +sVskywest +p9934 +I14 +sVanyhow +p9935 +I32 +sVpitch +p9936 +I32 +sVhumans +p9937 +I32 +sVtax-related +p9938 +I32 +sVdoom-and-gloom +p9939 +I32 +sVoperates +p9940 +I96 +sVspinoff +p9941 +I36 +sVreinforce +p9942 +I32 +sVaccused +p9943 +I32 +sVyugoslavia +p9944 +I4 +sVusefulness +p9945 +I32 +sVdesperate +p9946 +I32 +sVmassacre +p9947 +I36 +sVoperated +p9948 +I32 +sVmarwick +p9949 +I4 +sVpeterson +p9950 +I4 +sVburenga +p9951 +I8 +sVluv +p9952 +I8 +sVharvested +p9953 +I32 +sVhume +p9954 +I4 +sVnightmare +p9955 +I36 +sVchapstick +p9956 +I4 +sVtend +p9957 +I32 +sVpresides +p9958 +I32 +sVmcauliffe +p9959 +I8 +sVwritten +p9960 +I34 +sVsurmises +p9961 +I32 +sVcorrectly +p9962 +I32 +sVallotted +p9963 +I32 +sVspare +p9964 +I32 +sVneither +p9965 +I34 +sVpopulism +p9966 +I32 +sVsabotage +p9967 +I32 +sVoutsiders +p9968 +I32 +sVaron +p9969 +I10 +sVseattle-based +p9970 +I4 +sVnutritious +p9971 +I32 +sVken +p9972 +I4 +sVcomparable +p9973 +I32 +sVsole +p9974 +I32 +sVsorely +p9975 +I32 +sVimportance +p9976 +I32 +sVg.f. +p9977 +I2 +sVscreamers +p9978 +I32 +sVkicking +p9979 +I32 +sVbeaubien +p9980 +I4 +sVentiche +p9981 +I4 +sVkey +p9982 +I44 +sVsquads +p9983 +I32 +sVpolice +p9984 +I38 +sVprecious +p9985 +I42 +sVdistribution +p9986 +I36 +sVthumb +p9987 +I32 +sVundetermined +p9988 +I32 +sVoutbursts +p9989 +I32 +sVhits +p9990 +I32 +sVabove-average +p9991 +I32 +sVmeritless +p9992 +I32 +sVlimits +p9993 +I36 +sVcareer +p9994 +I36 +sVattached +p9995 +I32 +sVaqua +p9996 +I36 +sVminds +p9997 +I32 +sVmystic +p9998 +I32 +sVadmit +p9999 +I36 +sVarrington +p10000 +I12 +sVa.m. +p10001 +I32 +sVplutonium +p10002 +I32 +sVwestburne +p10003 +I14 +sVfry +p10004 +I12 +sVdevises +p10005 +I32 +sVjersey +p10006 +I4 +sVpih +p10007 +I4 +sVfatality +p10008 +I32 +sVbudgetary +p10009 +I32 +sVtuesday +p10010 +I4 +sVvaccines +p10011 +I32 +sVmemories +p10012 +I36 +sVinvisible +p10013 +I36 +sVpreparedness +p10014 +I8 +sVpenchant +p10015 +I32 +sVmaximize +p10016 +I32 +sVmalfitano +p10017 +I12 +sVdebt-negotiating +p10018 +I32 +sVerased +p10019 +I4 +sVquit +p10020 +I36 +sVkallshian +p10021 +I4 +sVindustrials +p10022 +I44 +sVcentocor +p10023 +I4 +sVaddition +p10024 +I32 +sVdiscrimination +p10025 +I32 +sVsara +p10026 +I8 +sVcovertly +p10027 +I32 +sVcent +p10028 +I32 +sVint +p10029 +I4 +sVliberals +p10030 +I32 +sVslowly +p10031 +I40 +sVtreat +p10032 +I32 +sVmirrors +p10033 +I36 +sVpoet +p10034 +I32 +sVencapsulating +p10035 +I32 +sVtroopers +p10036 +I32 +sVbricker +p10037 +I8 +sVco-creator +p10038 +I32 +sVwaves +p10039 +I32 +sVshoulders +p10040 +I32 +sVsenses +p10041 +I32 +sVcontrolled +p10042 +I96 +sVforeign-aid +p10043 +I32 +sVretrospective +p10044 +I4 +sVleague +p10045 +I36 +sVwell-paid +p10046 +I32 +sVotc +p10047 +I12 +sVinformative +p10048 +I32 +sVintelligent +p10049 +I32 +sVspanier +p10050 +I8 +sVguerrillas +p10051 +I32 +sVconsequential +p10052 +I32 +sVcontroller +p10053 +I32 +sVshortfall +p10054 +I32 +sVinterleukin-1 +p10055 +I32 +sVabortions +p10056 +I36 +sVoversize +p10057 +I32 +sVkicks +p10058 +I32 +sVsmoking +p10059 +I32 +sVins +p10060 +I4 +sVdistributions +p10061 +I32 +sVquotation +p10062 +I32 +sVmarmon +p10063 +I4 +sVdebtor +p10064 +I32 +sVnovel +p10065 +I32 +sVinertial +p10066 +I32 +sVriddles +p10067 +I32 +sVsubpoenas +p10068 +I32 +sVsibling +p10069 +I32 +sVintimidate +p10070 +I32 +sVfitzgerald +p10071 +I4 +sVharder +p10072 +I32 +sVinn +p10073 +I4 +sVnatchez +p10074 +I4 +sVemotional +p10075 +I32 +sVharden +p10076 +I36 +sVunderclass +p10077 +I32 +sVeagleton +p10078 +I12 +sVlimbo +p10079 +I32 +sVowns +p10080 +I96 +sVrestless +p10081 +I32 +sVaccuser +p10082 +I32 +sVketchum +p10083 +I12 +sVexamines +p10084 +I32 +sVexaminer +p10085 +I32 +sVbiologists +p10086 +I32 +sVsimons +p10087 +I8 +sVfonda +p10088 +I4 +sVbigwig +p10089 +I32 +sVcoating +p10090 +I32 +sVtwo-month +p10091 +I32 +sVharassed +p10092 +I32 +sVfondy +p10093 +I8 +sVexamined +p10094 +I32 +sVswinging +p10095 +I32 +sVbucks +p10096 +I32 +sVwkr +p10097 +I8 +sVwreck +p10098 +I32 +sVfinance +p10099 +I38 +sVcapture +p10100 +I32 +sVchula +p10101 +I6 +sVmysteriously +p10102 +I32 +sVrockwool +p10103 +I4 +sVrecipients +p10104 +I32 +sVmidpriced +p10105 +I32 +sVgeneric +p10106 +I38 +sVpit +p10107 +I32 +sVbegan +p10108 +I100 +sVjaneiro +p10109 +I4 +sVcampus +p10110 +I36 +sVunimaginable +p10111 +I32 +sVimpulses +p10112 +I32 +sVtweedledum +p10113 +I4 +sVparts +p10114 +I100 +sVspeaker +p10115 +I36 +sVnorthwest +p10116 +I4 +sVincumbent +p10117 +I32 +sVunderground +p10118 +I32 +sVparty +p10119 +I36 +sVfanatics +p10120 +I32 +sVtapped +p10121 +I32 +sVforeign-made +p10122 +I32 +sVfide +p10123 +I32 +sVtrouble-shooter +p10124 +I32 +sVtruitt +p10125 +I4 +sVfraternity +p10126 +I32 +sViscs +p10127 +I4 +sVmisstated +p10128 +I32 +sVrightfully +p10129 +I32 +sVabsorb +p10130 +I32 +sVappearances +p10131 +I32 +sVcanadians +p10132 +I4 +sVeffect +p10133 +I36 +sVmarket-share +p10134 +I32 +sVnightly +p10135 +I36 +sVkolb +p10136 +I8 +sVexperimenter +p10137 +I32 +sVdiscouraged +p10138 +I32 +sVfierce +p10139 +I32 +sVfrequently +p10140 +I32 +sVspree +p10141 +I32 +sVendearing +p10142 +I32 +sVmordechai +p10143 +I4 +sVtransaction +p10144 +I36 +sVreflection +p10145 +I32 +sVlunch +p10146 +I32 +sVi +p10147 +I14 +sVgrabbing +p10148 +I32 +sg51 +I34 +sVwell +p10149 +I38 +sVnebulous +p10150 +I32 +sVrife +p10151 +I32 +sVamends +p10152 +I32 +sVprediction +p10153 +I32 +sVherald +p10154 +I4 +sVdeadly +p10155 +I32 +sVhousing-industry +p10156 +I32 +sVrisk-free +p10157 +I32 +sVdeterrent +p10158 +I32 +sVsix-week +p10159 +I32 +sVcupertino +p10160 +I4 +sVrestore +p10161 +I32 +sVdail +p10162 +I4 +sVmaquila +p10163 +I34 +sVunderdog +p10164 +I32 +sVtellez +p10165 +I4 +sVattractively +p10166 +I32 +sVdiscord +p10167 +I32 +sVincreasingly +p10168 +I38 +sVoak +p10169 +I4 +sVaccurate +p10170 +I32 +sVmistaken +p10171 +I32 +sVdose +p10172 +I32 +sVsources +p10173 +I46 +sVregulates +p10174 +I32 +sVdistant +p10175 +I32 +sVscholarly +p10176 +I32 +sVbaltimore-based +p10177 +I6 +sVoverhauling +p10178 +I32 +sVsafety-equipment +p10179 +I32 +sVskill +p10180 +I32 +sVw-4 +p10181 +I4 +sVcoordination +p10182 +I32 +sVmysterious +p10183 +I32 +sVtalcs +p10184 +I32 +sVdelftaland +p10185 +I4 +sVrun-down +p10186 +I32 +sVmanzi +p10187 +I8 +sVdeploys +p10188 +I32 +sVlarge-scale +p10189 +I32 +sVelephants +p10190 +I32 +sVdeposits +p10191 +I32 +sVextends +p10192 +I44 +sVrunners +p10193 +I32 +sVfearon +p10194 +I4 +sVriverside +p10195 +I4 +sVpossess +p10196 +I32 +sVballoons +p10197 +I40 +sVindignation +p10198 +I32 +sVkick +p10199 +I32 +sVclouded +p10200 +I32 +sVhome-equity +p10201 +I34 +sVspar +p10202 +I4 +sVromanticized +p10203 +I32 +sVquick-delivery +p10204 +I8 +sVdefinitive +p10205 +I34 +sVample +p10206 +I32 +sVdisappearance +p10207 +I32 +sVdevised +p10208 +I32 +sVmidwestern +p10209 +I32 +sVutah +p10210 +I14 +sVcrushed +p10211 +I32 +sVpropelled +p10212 +I32 +sVfats +p10213 +I2 +sVonce-thriving +p10214 +I32 +sVhistoric +p10215 +I32 +sVcontingents +p10216 +I32 +sVburden +p10217 +I32 +sVbottoms +p10218 +I32 +sVpropeller +p10219 +I32 +sVracially +p10220 +I32 +sVamply +p10221 +I32 +sVoverwhelms +p10222 +I32 +sVminneapolis-based +p10223 +I4 +sVprominent +p10224 +I32 +sVstrategic-arms +p10225 +I32 +sVloss +p10226 +I46 +sVlincoln +p10227 +I14 +sVnecessary +p10228 +I32 +sVrenegade +p10229 +I32 +sVlost +p10230 +I36 +sVcollomb +p10231 +I12 +sVexploiting +p10232 +I2 +sVstevenson +p10233 +I4 +sVfernando +p10234 +I4 +sVglassmaker +p10235 +I32 +sVfrancisco-based +p10236 +I4 +sVcontrollers +p10237 +I32 +sVroth +p10238 +I12 +sVpayments +p10239 +I36 +sVcanda +p10240 +I12 +sVlose +p10241 +I32 +sVcando +p10242 +I4 +sVdivest +p10243 +I32 +sVmemory-chip +p10244 +I32 +sVrefugees +p10245 +I32 +sVpage +p10246 +I32 +sVbacklog +p10247 +I36 +sVlends +p10248 +I32 +sVgilliam +p10249 +I4 +sVsea-otter +p10250 +I32 +sVshed +p10251 +I32 +sVarbitrage +p10252 +I36 +sVmaligned +p10253 +I32 +sVtrammell +p10254 +I4 +sVdifficult-to-collect +p10255 +I32 +sVeurobond +p10256 +I4 +sVrepositories +p10257 +I32 +sVbelonged +p10258 +I32 +sVvillage +p10259 +I32 +sVlibrary +p10260 +I4 +sVmotive +p10261 +I32 +sVhomo +p10262 +I4 +sVimplored +p10263 +I32 +sVcleveland +p10264 +I12 +sVhome +p10265 +I46 +sVpeter +p10266 +I14 +sVleery +p10267 +I32 +sVhesitant +p10268 +I32 +sVpunishments +p10269 +I32 +sVmoderates +p10270 +I40 +sVcompetitor +p10271 +I32 +sVkyotaru +p10272 +I12 +sVtoyoy +p10273 +I4 +sVdemonstrates +p10274 +I32 +sVobjected +p10275 +I32 +sVkalmus +p10276 +I12 +sVoverlap +p10277 +I32 +sVnihon +p10278 +I4 +sVsponsoring +p10279 +I32 +sVcoloratura +p10280 +I32 +sVwendy +p10281 +I14 +sVsweepstakes +p10282 +I32 +sVswartz +p10283 +I4 +sVfanny +p10284 +I4 +sVwarranties +p10285 +I32 +sVlimitations +p10286 +I32 +sVzealand-based +p10287 +I4 +sVcoated +p10288 +I32 +sVinaccurate +p10289 +I32 +sVflexi-van +p10290 +I4 +sVco-produced +p10291 +I32 +sVreal-world +p10292 +I32 +sVjournal +p10293 +I36 +sVa-% +p10294 +I32 +sVmonetary +p10295 +I110 +sVexpansion +p10296 +I32 +sVdefense-oriented +p10297 +I32 +sVdiver +p10298 +I36 +sVcoates +p10299 +I8 +sVprohibited +p10300 +I32 +sVbundle +p10301 +I32 +sVschoolyard +p10302 +I32 +sVoffset +p10303 +I40 +sVa-1 +p10304 +I4 +sVstate-of-emergency +p10305 +I32 +sVa-2 +p10306 +I4 +sVcropping +p10307 +I32 +sVrefuge +p10308 +I36 +sVtomihiro +p10309 +I4 +sVwallow +p10310 +I32 +sValbright +p10311 +I4 +sVstaked +p10312 +I32 +sVfreedom +p10313 +I36 +sVnonverbal +p10314 +I32 +sVprojectiles +p10315 +I32 +sVrecognized +p10316 +I32 +sVnightclub +p10317 +I32 +sVcompatible +p10318 +I32 +sVrodeo +p10319 +I36 +sVdominion +p10320 +I14 +sVjugglers +p10321 +I32 +sVjawboning +p10322 +I32 +sVrecognizes +p10323 +I32 +sVpersuaded +p10324 +I32 +sVdeathbed +p10325 +I32 +sVstakes +p10326 +I36 +sVequally +p10327 +I34 +sVcontending +p10328 +I32 +sVbabyboomers +p10329 +I32 +sVvortmann +p10330 +I8 +sVglenn +p10331 +I4 +sVpreviously +p10332 +I34 +sVwashington +p10333 +I14 +sVarticulate +p10334 +I32 +sVterence +p10335 +I4 +sVmushrooms +p10336 +I36 +sVbookish +p10337 +I32 +sVh. +p10338 +I6 +sVsubsidizing +p10339 +I32 +sVartists +p10340 +I36 +sVcapable +p10341 +I32 +sVsbc +p10342 +I4 +sVmanaging +p10343 +I32 +sVpointless +p10344 +I32 +sVutility +p10345 +I36 +sVdoubtless +p10346 +I32 +sVweepy +p10347 +I32 +sVmississippi +p10348 +I6 +sVnetworking +p10349 +I36 +sVadditional +p10350 +I110 +sVwhom +p10351 +I32 +sVmuseum +p10352 +I36 +sVdaniels +p10353 +I4 +sVrelegated +p10354 +I32 +sVnewmark +p10355 +I14 +sVfrightening +p10356 +I32 +sVnoticed +p10357 +I32 +sVresentment +p10358 +I32 +sVaccountant +p10359 +I32 +sVprofit-spreads +p10360 +I32 +sVinnes +p10361 +I8 +sVinner +p10362 +I32 +sVnotices +p10363 +I32 +sVdivulging +p10364 +I32 +sVrecruited +p10365 +I32 +sVhobor +p10366 +I12 +sVmylan +p10367 +I14 +sVreceipt +p10368 +I32 +sVnorth +p10369 +I44 +sVassociation-college +p10370 +I4 +sVsour-cream +p10371 +I32 +sVhazardous +p10372 +I32 +sVagrees +p10373 +I44 +sVstirred +p10374 +I32 +sVht +p10375 +I4 +sVescrow +p10376 +I32 +sVdesignated +p10377 +I32 +sVneutral +p10378 +I32 +sVhi +p10379 +I4 +sVservice-company +p10380 +I32 +sVgoals +p10381 +I96 +sVcourts +p10382 +I102 +sVthreaten +p10383 +I32 +sVtechnician +p10384 +I32 +sVhighest +p10385 +I32 +sVeat +p10386 +I36 +sg47 +I46 +sVhiked +p10387 +I32 +sVonce-incurable +p10388 +I32 +sVvigor +p10389 +I32 +sVunion-busting +p10390 +I32 +sVcells +p10391 +I32 +sVunreasonable +p10392 +I32 +sVbradstreet +p10393 +I4 +sVsigned +p10394 +I96 +sVbrusqueness +p10395 +I32 +sVaccommodative +p10396 +I32 +sVprojecting +p10397 +I32 +sVstories +p10398 +I32 +sVshowgirl +p10399 +I32 +sVpumped +p10400 +I32 +sVjunji +p10401 +I4 +sVpiece +p10402 +I32 +sVmind-set +p10403 +I32 +sVdisplay +p10404 +I32 +sVbroader-based +p10405 +I32 +sVbatchelder +p10406 +I12 +sVmechanics +p10407 +I32 +sVmarketplace +p10408 +I32 +sVbakes +p10409 +I4 +sVsanders +p10410 +I4 +sVdevise +p10411 +I36 +sVmaury +p10412 +I4 +sVuniversal +p10413 +I38 +sVmackin +p10414 +I4 +sVkisses +p10415 +I32 +sVgenerating +p10416 +I32 +sVcrusade +p10417 +I32 +sVlasted +p10418 +I32 +sVtwist +p10419 +I32 +sVfull-year +p10420 +I38 +sVsavage-western +p10421 +I4 +sVeducation +p10422 +I46 +sVeric +p10423 +I4 +sVtake-home +p10424 +I32 +sVmauro +p10425 +I4 +sVdiego +p10426 +I4 +sVfunctions +p10427 +I32 +sVagip +p10428 +I4 +sVrumors +p10429 +I32 +sValgeria +p10430 +I12 +sVingredients +p10431 +I32 +sVacli +p10432 +I14 +sVclass-action +p10433 +I32 +sVoffensive +p10434 +I32 +sVpolicy-making +p10435 +I32 +sVpopularizing +p10436 +I32 +sVfinch +p10437 +I4 +sVfledgling +p10438 +I32 +sVdisappearing +p10439 +I32 +sVba-3 +p10440 +I4 +sVjamming +p10441 +I32 +sVdropout +p10442 +I32 +sVmonitors +p10443 +I32 +sVgonzalez +p10444 +I4 +sVfodder +p10445 +I32 +sVtransferring +p10446 +I32 +sVstar +p10447 +I36 +sVnearer +p10448 +I32 +sVecstatic +p10449 +I32 +sVliving +p10450 +I32 +sVbolling +p10451 +I4 +sVthereafter +p10452 +I34 +sVdelfim +p10453 +I4 +sVinescapable +p10454 +I32 +sVstay +p10455 +I36 +sVfelv +p10456 +I4 +sVdeficit-reduction +p10457 +I32 +sVbackstage +p10458 +I32 +sVpathways +p10459 +I32 +sVadditionally +p10460 +I2 +sVgoldfeder +p10461 +I12 +sVstan +p10462 +I4 +sVbly +p10463 +I12 +sVsqueezing +p10464 +I32 +sVelse +p10465 +I32 +sVfriends +p10466 +I38 +sVcurbed +p10467 +I4 +sVserial +p10468 +I32 +sVnasa +p10469 +I2 +sVbcl +p10470 +I8 +sVcrybabies +p10471 +I32 +sVgarnishing +p10472 +I32 +sVtrash-collection +p10473 +I32 +sVsamsung +p10474 +I4 +sVpools +p10475 +I32 +sVprodigious +p10476 +I32 +sVsubscribe +p10477 +I32 +sVpersistent +p10478 +I32 +sVnightwatch +p10479 +I4 +sVortega +p10480 +I4 +sVportion +p10481 +I32 +sVextras +p10482 +I4 +sVbcy +p10483 +I4 +sVdiagnosis +p10484 +I32 +sVlives +p10485 +I34 +sVbcv +p10486 +I8 +sVbcw +p10487 +I8 +sVfrankfurt +p10488 +I12 +sVretirees +p10489 +I32 +sVsimpson +p10490 +I12 +sVdisruptive +p10491 +I32 +sVaided +p10492 +I36 +sVhoechst +p10493 +I4 +sVpardon +p10494 +I32 +sVsweetening +p10495 +I32 +sVaiden +p10496 +I2 +sVfour-year +p10497 +I32 +sVdynamic +p10498 +I32 +sVnato +p10499 +I4 +sVobstruction +p10500 +I36 +sVstraws +p10501 +I32 +sVfredric +p10502 +I6 +sVasian +p10503 +I4 +sVaides +p10504 +I38 +sVlsi +p10505 +I12 +sVundersecretary +p10506 +I32 +sVminuscule +p10507 +I32 +sVunlimited +p10508 +I32 +sVstage-dominating +p10509 +I32 +sVwhose +p10510 +I36 +sVfronts +p10511 +I32 +sVtobin +p10512 +I4 +sVbuddy +p10513 +I32 +sVmarcos +p10514 +I12 +sVbayh +p10515 +I4 +sVturner +p10516 +I14 +sVsegments +p10517 +I32 +sVdisability +p10518 +I32 +sVseriously +p10519 +I32 +sVpainters +p10520 +I32 +sVcyclosporine-a +p10521 +I32 +sVunionized +p10522 +I32 +sVhca +p10523 +I12 +sVrestriction +p10524 +I32 +sVswap +p10525 +I44 +sVdeals-curbing +p10526 +I32 +sVrecycle +p10527 +I32 +sVteaching +p10528 +I32 +sVsorry +p10529 +I32 +sVbulkier +p10530 +I32 +sVsway +p10531 +I32 +sVsaver +p10532 +I32 +sVfists +p10533 +I32 +sVpeasant-style +p10534 +I32 +sVupdated +p10535 +I32 +sVcomparatively +p10536 +I32 +sVintermingling +p10537 +I32 +sVrescue +p10538 +I32 +sVchaplains +p10539 +I32 +sVvoid +p10540 +I32 +sVdutch +p10541 +I4 +sVmisunderstanding +p10542 +I32 +sVkaiserslautern +p10543 +I12 +sVhomes +p10544 +I100 +sVoverdrafts +p10545 +I32 +sVgeorgia +p10546 +I6 +sVasia/ +p10547 +I4 +sVupdates +p10548 +I32 +sVperipheral +p10549 +I32 +sVreforms +p10550 +I32 +sVconception +p10551 +I32 +sVlow-budget +p10552 +I32 +sVlow-key +p10553 +I32 +sVvast +p10554 +I32 +sVsubscriber-line +p10555 +I32 +sVimmunized +p10556 +I32 +sg144 +I12 +sVupj +p10557 +I8 +sVmcdougall +p10558 +I12 +sVnhy +p10559 +I8 +sVsun-baked +p10560 +I32 +sVskills +p10561 +I32 +sVlaurels +p10562 +I32 +sVrex +p10563 +I4 +sVgrandmotherly +p10564 +I32 +sVcompanies +p10565 +I102 +sVsolution +p10566 +I32 +sVherbert +p10567 +I2 +sVsupermerchant +p10568 +I32 +sVwestamerica +p10569 +I14 +sVextinguishment +p10570 +I32 +sVunrelated +p10571 +I32 +sVaffect +p10572 +I36 +sVcholesterol +p10573 +I36 +sVhard-charging +p10574 +I32 +sVenhance +p10575 +I32 +sVfranchisees +p10576 +I36 +sVfrost-retarding +p10577 +I32 +sVdeplorable +p10578 +I32 +sVheading +p10579 +I32 +sVoccupancy +p10580 +I32 +sVclothes +p10581 +I32 +sVjeff +p10582 +I6 +sVbimonthly +p10583 +I32 +sVforce +p10584 +I36 +sVconcise +p10585 +I32 +sVwarns +p10586 +I32 +sVcapital-rich +p10587 +I32 +sVjapanese +p10588 +I14 +sVbashers +p10589 +I4 +sVacross +p10590 +I36 +sVlikely +p10591 +I36 +sVlehigh +p10592 +I6 +sVjoao +p10593 +I4 +sVafl-cio +p10594 +I4 +sVimplemented +p10595 +I32 +sVwillam +p10596 +I2 +sVeven +p10597 +I46 +sVmaxsavers +p10598 +I12 +sVgalley +p10599 +I4 +sVspouses +p10600 +I32 +sVpreferences +p10601 +I32 +sVprisons +p10602 +I32 +sVcomplexities +p10603 +I32 +sVintegrity +p10604 +I32 +sVtirelessly +p10605 +I32 +sVnec +p10606 +I6 +sVasia +p10607 +I4 +sVspokesman +p10608 +I96 +sVlights +p10609 +I32 +sVexuding +p10610 +I32 +sVdefraud +p10611 +I32 +sVdr. +p10612 +I14 +sVcaesarean-section +p10613 +I4 +sVnew +p10614 +I46 +sVnet +p10615 +I110 +sVpoorly +p10616 +I32 +sVever +p10617 +I34 +sVrecognizance +p10618 +I32 +sVmondschein +p10619 +I12 +sVsnared +p10620 +I32 +sVplunked +p10621 +I32 +sVrelationships +p10622 +I32 +sVniche +p10623 +I36 +sVfoundered +p10624 +I32 +sVbarometer +p10625 +I32 +sVwriteoffs +p10626 +I32 +sVperquisites +p10627 +I32 +sVincentives +p10628 +I32 +sVneves +p10629 +I4 +sVnever +p10630 +I38 +sVdisposable +p10631 +I32 +sVafonso +p10632 +I4 +sVdrew +p10633 +I44 +sVmet +p10634 +I36 +sVinner-city +p10635 +I32 +sVrevoking +p10636 +I32 +sVbyzantine +p10637 +I4 +sVmep +p10638 +I4 +sVvergennes +p10639 +I4 +sVmer +p10640 +I8 +sVactive +p10641 +I32 +sVfla.-based +p10642 +I4 +sVinterpret +p10643 +I32 +sVcontraction +p10644 +I36 +sVdry +p10645 +I36 +sVromans +p10646 +I4 +sVphyllis +p10647 +I8 +sVanimated +p10648 +I32 +sVspokane +p10649 +I12 +sVtapes +p10650 +I32 +sVjams +p10651 +I32 +sVrests +p10652 +I32 +sValchemist +p10653 +I32 +sVeconomics +p10654 +I36 +sVpiercing +p10655 +I32 +sVphyb +p10656 +I8 +sVignoring +p10657 +I32 +sVcredit +p10658 +I46 +sVharass +p10659 +I32 +sVfelonies +p10660 +I32 +sVchrysler +p10661 +I14 +sVpermit +p10662 +I32 +sVcomplicated +p10663 +I32 +sVbuckley +p10664 +I12 +sVsuitable +p10665 +I32 +sVadolescents +p10666 +I32 +sVsectoral +p10667 +I32 +sVdecision-making +p10668 +I32 +sVeyebrows +p10669 +I32 +sVreckoned +p10670 +I32 +sVfantastic +p10671 +I32 +sVintensely +p10672 +I32 +sVbaptista +p10673 +I12 +sVslices +p10674 +I32 +sVrevenue-raising +p10675 +I32 +sVreagan +p10676 +I14 +sVschooling +p10677 +I32 +sVphilipp +p10678 +I4 +sVcounty +p10679 +I38 +sVmarket-auction +p10680 +I32 +sVktcc +p10681 +I8 +sVmoral +p10682 +I40 +sVguests +p10683 +I34 +sVsoybean +p10684 +I34 +sVpoems +p10685 +I32 +sVwelch +p10686 +I8 +sVcostly +p10687 +I34 +sVcounts +p10688 +I96 +sVcircumvent +p10689 +I32 +sVtutelage +p10690 +I32 +sVtertiary +p10691 +I32 +sVaffirming +p10692 +I32 +sVbloodstock +p10693 +I32 +sVdaley +p10694 +I12 +sVdouble-edged +p10695 +I32 +sVarmy +p10696 +I36 +sVrunyon +p10697 +I4 +sVarms +p10698 +I100 +sVleaks +p10699 +I32 +sVtelc +p10700 +I8 +sVlatchkey +p10701 +I32 +sVcall +p10702 +I34 +sVcalm +p10703 +I32 +sVrecommend +p10704 +I32 +sVself-regulatory +p10705 +I32 +sVsurvive +p10706 +I36 +sVnon-petroleum +p10707 +I32 +sVtype +p10708 +I32 +sVtell +p10709 +I36 +sVmasayoshi +p10710 +I4 +sVsix-packs +p10711 +I32 +sVtelephone-utility +p10712 +I32 +sVsupporters +p10713 +I96 +sVlungs +p10714 +I32 +sVwary +p10715 +I40 +sVcomposite +p10716 +I36 +sVoscar +p10717 +I4 +sVschrader +p10718 +I12 +sVmajor-league +p10719 +I32 +sVwars +p10720 +I36 +sVwarp +p10721 +I32 +sVwarn +p10722 +I32 +sVlicense-renewal +p10723 +I32 +sVberlin +p10724 +I4 +sVwarm +p10725 +I32 +sVfrenzy +p10726 +I32 +sVadult +p10727 +I32 +sVfrancisville +p10728 +I8 +sVward +p10729 +I44 +sValigned +p10730 +I32 +sVslowest +p10731 +I32 +sVdebtholders +p10732 +I32 +sVshamrock +p10733 +I14 +sVflora +p10734 +I2 +sVwaterfront +p10735 +I34 +sVroom +p10736 +I36 +sVrights +p10737 +I36 +sVstinko +p10738 +I32 +sVsetup +p10739 +I32 +sVgasoline +p10740 +I98 +sVroof +p10741 +I32 +sVmovies +p10742 +I108 +sVbuckhorn +p10743 +I14 +sVobstacle +p10744 +I32 +sVexceptions +p10745 +I32 +sVheadway +p10746 +I36 +sVhansen +p10747 +I12 +sVdrabness +p10748 +I32 +sVsoar +p10749 +I32 +sVdefer +p10750 +I32 +sVoverextending +p10751 +I32 +sVfresher +p10752 +I32 +sVgive +p10753 +I44 +sVdanvers +p10754 +I4 +sVpunk +p10755 +I32 +sVclimax +p10756 +I32 +sVassent +p10757 +I32 +sVcontented +p10758 +I32 +sVinvolve +p10759 +I32 +sVlavenders +p10760 +I32 +sVfoods +p10761 +I36 +sVwrite-downs +p10762 +I32 +sVthree-hour +p10763 +I32 +sVwalked +p10764 +I32 +sVstanton +p10765 +I4 +sVcursory +p10766 +I32 +sVadvancing +p10767 +I32 +sVmasterly +p10768 +I32 +sVaging +p10769 +I32 +sVautonomy +p10770 +I32 +sVsideline +p10771 +I32 +sVpastel +p10772 +I32 +sVdosages +p10773 +I32 +sVpollard +p10774 +I4 +sVwar-vintage +p10775 +I4 +sVschmedel +p10776 +I8 +sVpedersen +p10777 +I8 +sVgrows +p10778 +I36 +sVglobalization +p10779 +I32 +sVsilent +p10780 +I36 +sVagins +p10781 +I4 +sVkilmer +p10782 +I4 +sVdispense +p10783 +I32 +sVanswer +p10784 +I36 +sVfaulty +p10785 +I32 +sVstroh +p10786 +I4 +sVgordon +p10787 +I6 +sVblacklist +p10788 +I32 +sVwhitehead +p10789 +I12 +sVminority +p10790 +I32 +sVthank-yous +p10791 +I32 +sVreplacing +p10792 +I32 +sVarrearages +p10793 +I32 +sVloyalty +p10794 +I36 +sVegon +p10795 +I4 +sVbrigades +p10796 +I32 +sVborg-warner +p10797 +I14 +sVcuriosity +p10798 +I32 +sVschoolchildren +p10799 +I32 +sVstringers +p10800 +I32 +sVpresident +p10801 +I110 +sVdeutsche +p10802 +I36 +sValmys +p10803 +I12 +sVroyce +p10804 +I4 +sVkarachi +p10805 +I4 +sVpurchase +p10806 +I46 +sVstepchildren +p10807 +I32 +sVattempt +p10808 +I36 +sVanymore +p10809 +I36 +sVthird +p10810 +I38 +sVseelig +p10811 +I12 +sVbaa-1 +p10812 +I4 +sVvfc +p10813 +I8 +sVberkowitz +p10814 +I4 +sVsliced +p10815 +I32 +sVfever +p10816 +I36 +sVshelved +p10817 +I32 +sVmaintain +p10818 +I32 +sVwaited +p10819 +I32 +sVfinancement +p10820 +I4 +sVoperate +p10821 +I32 +sVscintillation +p10822 +I32 +sVjack +p10823 +I14 +sVoperations +p10824 +I102 +sVunfolds +p10825 +I32 +sVlifeless +p10826 +I32 +sVensnare +p10827 +I32 +sVinconclusive +p10828 +I32 +sVmurray +p10829 +I6 +sVhibernation +p10830 +I32 +sVhelene +p10831 +I4 +sVdisaffection +p10832 +I32 +sVresponsive +p10833 +I32 +sVfellas +p10834 +I32 +sVhirshhorn +p10835 +I2 +sVshicoff +p10836 +I4 +sVoverallotment +p10837 +I32 +sVbefore +p10838 +I110 +sVscoring +p10839 +I32 +sVexporters +p10840 +I32 +sVrescheduled +p10841 +I32 +sVpersonal +p10842 +I32 +sVhezbollah +p10843 +I4 +sVdiscredit +p10844 +I32 +sVcrew +p10845 +I32 +sVbetter +p10846 +I34 +sVdamascus +p10847 +I4 +sVyaroslavl +p10848 +I4 +sVdifferently +p10849 +I32 +sVaccusatory +p10850 +I32 +sVpersist +p10851 +I32 +sVcarve +p10852 +I32 +sVweeks +p10853 +I32 +sVsurcharges +p10854 +I32 +sVgaughan +p10855 +I8 +sVovercome +p10856 +I32 +sVrebutted +p10857 +I32 +sVrepairmen +p10858 +I32 +sVdonors +p10859 +I38 +sVdec. +p10860 +I14 +sVdeleting +p10861 +I32 +sVshad +p10862 +I12 +sVcombination +p10863 +I32 +sVunanimous +p10864 +I32 +sVweakness +p10865 +I32 +sVunemployed +p10866 +I32 +sVpersonal-care +p10867 +I32 +sVmisstate +p10868 +I32 +sVfig +p10869 +I32 +sVreversal +p10870 +I36 +sVglazer +p10871 +I12 +sVacademics +p10872 +I32 +sVaccomplishments +p10873 +I32 +sVtherapy +p10874 +I32 +sVbronchial +p10875 +I32 +sVeasley +p10876 +I4 +sVtrout +p10877 +I4 +sVdecorator +p10878 +I32 +sVniches +p10879 +I32 +sVrhetoric +p10880 +I32 +sVpollution-control +p10881 +I32 +sVcoronation +p10882 +I36 +sVmeat +p10883 +I100 +sVreopen +p10884 +I32 +sVmnst +p10885 +I4 +sVarrested +p10886 +I38 +sVekman +p10887 +I12 +sVpakistanis +p10888 +I4 +sVluce +p10889 +I4 +sVventilation +p10890 +I32 +sVvictories +p10891 +I32 +sVmcfarlane +p10892 +I14 +sVbonn +p10893 +I14 +sVmounts +p10894 +I32 +sVacoustic +p10895 +I4 +sVwent +p10896 +I96 +sVside +p10897 +I100 +sVbone +p10898 +I32 +sVbond +p10899 +I42 +sVinserts +p10900 +I32 +sVcalmly +p10901 +I32 +sVovercapacity +p10902 +I32 +sVconstituent +p10903 +I32 +sVspanish +p10904 +I12 +sVprinciples +p10905 +I36 +sVaide +p10906 +I36 +sVantiprotons +p10907 +I32 +sVsuperstitious +p10908 +I32 +sVmilan +p10909 +I6 +sVtaught +p10910 +I32 +sVtrading +p10911 +I46 +sVlubensky +p10912 +I8 +sVclevite +p10913 +I12 +sVnavy +p10914 +I46 +sVaids +p10915 +I38 +sVfirst-class +p10916 +I32 +sVmandated +p10917 +I32 +sVcomedies +p10918 +I32 +sVhospitable +p10919 +I32 +sVcontend +p10920 +I36 +sVdecree +p10921 +I32 +sVhome-dish +p10922 +I32 +sVvelvet +p10923 +I4 +sVkiev +p10924 +I4 +sVsatans +p10925 +I4 +sVvideotape +p10926 +I32 +sVquantify +p10927 +I32 +sVtales +p10928 +I36 +sVdime +p10929 +I12 +sVcrucial +p10930 +I36 +sVlurks +p10931 +I32 +sVmccarthy +p10932 +I12 +sVcontent +p10933 +I32 +sVcops +p10934 +I32 +sVelkes +p10935 +I8 +sVcasinos +p10936 +I44 +sVmultiply +p10937 +I32 +sVopel +p10938 +I6 +sVreader +p10939 +I32 +sVsurprise +p10940 +I32 +sVsluggish +p10941 +I34 +sVryan +p10942 +I4 +sVkiel +p10943 +I4 +sVtruck-assembly +p10944 +I32 +sVtourney +p10945 +I32 +sVquaintly +p10946 +I32 +sVturning +p10947 +I32 +sVlinear +p10948 +I32 +sVresume +p10949 +I36 +sVu.s. +p10950 +I14 +sVbottlenecks +p10951 +I32 +sVrevenge +p10952 +I32 +sVyoungsters +p10953 +I32 +sVdecent +p10954 +I32 +sVrun-up +p10955 +I32 +sVcurtailment +p10956 +I32 +sVchemical-physics +p10957 +I32 +sVstruggle +p10958 +I36 +sVjackman +p10959 +I4 +sVinadequately +p10960 +I32 +sVbrrs +p10961 +I4 +sVtax-rate +p10962 +I32 +sVblinders +p10963 +I32 +sVbloods +p10964 +I32 +sVden.a +p10965 +I8 +sVgarrett +p10966 +I14 +sViss +p10967 +I40 +sVstarts +p10968 +I36 +sVprofessions +p10969 +I32 +sVmessages +p10970 +I32 +sVsteward +p10971 +I32 +sVwithdrawals +p10972 +I32 +sVisn +p10973 +I104 +sVsignature +p10974 +I36 +sVisc +p10975 +I4 +sVmoving +p10976 +I36 +sVloud +p10977 +I32 +sVleanest +p10978 +I32 +sVuser +p10979 +I32 +sVuntutored +p10980 +I32 +sVvittorio +p10981 +I2 +sVfeatures +p10982 +I32 +sVeconomists +p10983 +I46 +sVdwindled +p10984 +I32 +sVhoop +p10985 +I32 +sVfee-for-service +p10986 +I32 +sVreassure +p10987 +I36 +sVthrown +p10988 +I32 +sVmedian +p10989 +I32 +sVfeatured +p10990 +I32 +sVastronautics +p10991 +I4 +sVdownside +p10992 +I32 +sVbrocade +p10993 +I32 +sVarie +p10994 +I4 +sVpayload +p10995 +I32 +sVhood +p10996 +I32 +sVfeb. +p10997 +I14 +sVbrock +p10998 +I14 +sVfeeding +p10999 +I32 +sVbalkanized +p11000 +I4 +sVballyhooed +p11001 +I4 +sVdisciplines +p11002 +I32 +sVclines +p11003 +I12 +sVpsychotic +p11004 +I32 +sVhawks +p11005 +I4 +sVhistorian +p11006 +I34 +sVfarm-credit +p11007 +I32 +sVzeros +p11008 +I32 +sVgourmets +p11009 +I36 +sVhollywood +p11010 +I4 +sVinflow +p11011 +I32 +sVwander +p11012 +I32 +sVsteeley +p11013 +I12 +sVcompunction +p11014 +I32 +sVweddings +p11015 +I32 +sVfiery +p11016 +I32 +sVsegundo +p11017 +I4 +sVdramatized +p11018 +I32 +sVgym +p11019 +I36 +sVvillages +p11020 +I32 +sVdirect +p11021 +I32 +sVdramatizes +p11022 +I32 +sVcomputervision +p11023 +I14 +sVstoic +p11024 +I32 +sVsomewhat +p11025 +I32 +sVhelen +p11026 +I4 +sVhigh-priced +p11027 +I32 +sVcongregated +p11028 +I32 +sVeastman +p11029 +I6 +sVgambler +p11030 +I32 +sVfischbach +p11031 +I6 +sVbegins +p11032 +I44 +sVdistance +p11033 +I32 +sVprinceton +p11034 +I12 +sVsoonest +p11035 +I32 +sVbits +p11036 +I32 +sVdatabase +p11037 +I32 +sVenabled +p11038 +I32 +sVdamage-control +p11039 +I32 +sVaccost +p11040 +I32 +sVfmc +p11041 +I4 +sVpreparation +p11042 +I32 +sVmatter +p11043 +I36 +sVsolomon +p11044 +I12 +sVpersuade +p11045 +I32 +sVsilly +p11046 +I2 +sVfull-service +p11047 +I32 +sVgsx +p11048 +I8 +sVdivisiveness +p11049 +I32 +sVwielded +p11050 +I32 +sVenables +p11051 +I32 +sVbidder +p11052 +I32 +sVflirts +p11053 +I4 +sVsills +p11054 +I4 +sVextracting +p11055 +I32 +sVpersuasive +p11056 +I32 +sVupper-income +p11057 +I32 +sVsteelmaker +p11058 +I40 +sVpalace +p11059 +I36 +sVgaudy +p11060 +I32 +sVrattle +p11061 +I32 +sVstomping +p11062 +I32 +sVmodern +p11063 +I38 +sVmind +p11064 +I32 +sVmining +p11065 +I46 +sVdeprived +p11066 +I32 +sVmoraine +p11067 +I4 +sVformula +p11068 +I32 +sVpantheon +p11069 +I4 +sVseed +p11070 +I32 +sVemphasizing +p11071 +I32 +sVquist +p11072 +I4 +sVseen +p11073 +I36 +sVseem +p11074 +I32 +sVexchange-rate +p11075 +I32 +sVseek +p11076 +I36 +sVtells +p11077 +I36 +sVinefficient +p11078 +I32 +sVreprieve +p11079 +I32 +sVlegg +p11080 +I4 +sVhorde +p11081 +I32 +sVgm-csf +p11082 +I4 +sVasserts +p11083 +I32 +sVr.h. +p11084 +I6 +sVsolid-waste +p11085 +I32 +sVsolids +p11086 +I32 +sVgorki +p11087 +I4 +sVanti-drug +p11088 +I32 +sVedge +p11089 +I32 +sVchess +p11090 +I32 +sVbrraap +p11091 +I32 +sVhoods +p11092 +I32 +sVshare-trading +p11093 +I32 +sVworsening +p11094 +I104 +sVkodo +p11095 +I2 +sVmoscow +p11096 +I14 +sVdavidson +p11097 +I4 +sVchronicler +p11098 +I32 +sVlefler +p11099 +I8 +sVfloating-interest-rate +p11100 +I32 +sVpsychologically +p11101 +I32 +sVreplenished +p11102 +I4 +sVcassettes +p11103 +I32 +sVfastbacs +p11104 +I4 +sVsavvy +p11105 +I32 +sVregular +p11106 +I40 +sVutilize +p11107 +I32 +sVmarie +p11108 +I4 +sVmaria +p11109 +I4 +sVzealand +p11110 +I4 +sVreimbursement +p11111 +I32 +sVassisting +p11112 +I32 +sVdon +p11113 +I46 +sVobservation +p11114 +I32 +sVledgard +p11115 +I4 +sVwein +p11116 +I4 +sVmedical +p11117 +I110 +sVdeliberate +p11118 +I32 +sVm +p11119 +I4 +sVdog +p11120 +I36 +sVbuttery +p11121 +I32 +sVpresident-elect +p11122 +I4 +sVu.s.s.r. +p11123 +I4 +sVcompetitors +p11124 +I34 +sVpoints +p11125 +I32 +sVheckuva +p11126 +I32 +sVprinciple +p11127 +I32 +sVthursday/sunday +p11128 +I4 +sVsubordinate +p11129 +I32 +sVfungi +p11130 +I36 +sVauthoritatively +p11131 +I32 +sVconsumer +p11132 +I46 +sVdow +p11133 +I14 +sVmeaning +p11134 +I32 +sVperspective +p11135 +I36 +sVkimbriel +p11136 +I8 +sVbeaten +p11137 +I32 +sVbendjedid +p11138 +I4 +sVtwo-foot-long +p11139 +I32 +sVlyrics +p11140 +I32 +sVhunger +p11141 +I32 +sVwithstand +p11142 +I32 +sVdouble-a +p11143 +I32 +sVretire +p11144 +I100 +sVyear-ending +p11145 +I32 +sVending +p11146 +I36 +sVcake +p11147 +I4 +sVattempts +p11148 +I34 +sVchartered +p11149 +I36 +sVuneasiness +p11150 +I32 +sVsupplied +p11151 +I32 +sVstepping +p11152 +I32 +sVsneaking +p11153 +I32 +sVnevada +p11154 +I12 +sVfarm-workers +p11155 +I32 +sVjudges +p11156 +I32 +sVnortheast +p11157 +I36 +sVwtbs +p11158 +I6 +sVstardom +p11159 +I32 +sVzagorsk +p11160 +I4 +sVweekends +p11161 +I32 +sVdebts +p11162 +I36 +sVfolded +p11163 +I32 +sVcripple +p11164 +I32 +sVsugar +p11165 +I46 +sVprice-earnings +p11166 +I32 +sVebbing +p11167 +I32 +sVhot-blow +p11168 +I32 +sVscrupulous +p11169 +I32 +sVintegrate +p11170 +I32 +sVfalconbridge +p11171 +I4 +sVhoare +p11172 +I4 +sVforelock +p11173 +I32 +sVchamberlain +p11174 +I12 +sVwearing +p11175 +I32 +sVmonica +p11176 +I4 +sVexports +p11177 +I110 +sVestablishes +p11178 +I32 +sVcompounded +p11179 +I32 +sVcalif.-based +p11180 +I4 +sVconduct +p11181 +I32 +sVstop +p11182 +I46 +sVperceive +p11183 +I32 +sVappetizer +p11184 +I32 +sVreverses +p11185 +I32 +sVmessiest +p11186 +I32 +sVchristopher +p11187 +I4 +sVremnant +p11188 +I32 +sVdyess +p11189 +I4 +sViceberg +p11190 +I32 +sVhome-improvement +p11191 +I32 +sVquarters +p11192 +I32 +sVu.n. +p11193 +I4 +sVcomply +p11194 +I32 +sVcarmichael +p11195 +I4 +sVearn +p11196 +I32 +sVbar +p11197 +I36 +sVtelemann +p11198 +I4 +sVoptimistic +p11199 +I36 +sVfields +p11200 +I44 +sVhigh-yield +p11201 +I34 +sVquash +p11202 +I32 +sVrothschild +p11203 +I8 +sVbax +p11204 +I12 +sVbay +p11205 +I36 +sVtagliabue +p11206 +I4 +sVbag +p11207 +I32 +sVbad +p11208 +I36 +sVbriefed +p11209 +I32 +sVarchitecture +p11210 +I32 +sVbirth-control +p11211 +I32 +sVfavors +p11212 +I36 +sVban +p11213 +I36 +sVcounters +p11214 +I32 +sVenchant +p11215 +I32 +sVbah +p11216 +I2 +sVears +p11217 +I32 +sVethical +p11218 +I32 +sVgerstner +p11219 +I4 +sVdecides +p11220 +I32 +sVlong-misunderstood +p11221 +I32 +sVreference +p11222 +I36 +sVdiminutive +p11223 +I32 +sVcrewmen +p11224 +I32 +sVtesting +p11225 +I96 +sVav-8b +p11226 +I4 +sVdeflation +p11227 +I32 +sVzones +p11228 +I32 +sVshrunken +p11229 +I32 +sVmissile-guidance +p11230 +I32 +sVdecided +p11231 +I36 +sVsuited +p11232 +I32 +sVinterruptions +p11233 +I32 +sVarmageddon +p11234 +I4 +sVinter-city +p11235 +I4 +sVstartups +p11236 +I32 +sVincorporating +p11237 +I32 +sVsubject +p11238 +I38 +sVbrazil +p11239 +I14 +sVone-shot +p11240 +I32 +sVmagnuson-moss +p11241 +I4 +sVsaid +p11242 +I126 +sVexponent +p11243 +I32 +sVsaia +p11244 +I12 +sVkempe +p11245 +I4 +sVscrap +p11246 +I32 +sVdettmar +p11247 +I4 +sVmarpac +p11248 +I4 +sVartificial +p11249 +I32 +sVprince +p11250 +I32 +sVnarrates +p11251 +I32 +sVinterns +p11252 +I32 +sVprotected +p11253 +I32 +sVolympics +p11254 +I6 +sVshultz +p11255 +I14 +sVsimplest +p11256 +I32 +sVfraney +p11257 +I4 +sVsorts +p11258 +I36 +sVtolerance +p11259 +I32 +sVmessianic +p11260 +I32 +sVomb +p11261 +I12 +sVcentigrade +p11262 +I4 +sVvows +p11263 +I40 +sVvaux +p11264 +I4 +sVdisenchantment +p11265 +I32 +sVrestricting +p11266 +I34 +sVphysicist +p11267 +I32 +sVbuford +p11268 +I8 +sVlotion +p11269 +I32 +sVbauer +p11270 +I12 +sVvernon +p11271 +I14 +sVquestioner +p11272 +I32 +sVstalls +p11273 +I8 +sVscaled-back +p11274 +I32 +sVchiba +p11275 +I4 +sVmethodically +p11276 +I32 +sVmodeling +p11277 +I32 +sVpicking +p11278 +I32 +sVwitty +p11279 +I32 +sVxp +p11280 +I6 +sVwindhaven +p11281 +I4 +sVsuggested +p11282 +I32 +sVmaneuvers +p11283 +I32 +sVcounselor +p11284 +I32 +sVprudential +p11285 +I4 +sVparking-lot +p11286 +I32 +sVresistant +p11287 +I32 +sVderegulation +p11288 +I36 +sVmunoz +p11289 +I12 +sVuncertainty +p11290 +I32 +sVfederated +p11291 +I4 +sVagainst +p11292 +I46 +sVfiancee +p11293 +I32 +sVfnd +p11294 +I4 +sVund +p11295 +I32 +sVpeddling +p11296 +I32 +sVwhinney +p11297 +I4 +sVernst +p11298 +I6 +sVcontribution +p11299 +I32 +sVdive +p11300 +I32 +sVconfronted +p11301 +I32 +sVel-sayed +p11302 +I96 +sVuno +p11303 +I4 +sVpresumably +p11304 +I34 +sVkwon +p11305 +I8 +sVardmore +p11306 +I4 +sVappeared +p11307 +I32 +sVrepertory +p11308 +I36 +sVadelman +p11309 +I4 +sVradar-jamming +p11310 +I32 +sVsai +p11311 +I8 +sVincessant +p11312 +I32 +sVofferings +p11313 +I36 +sVinitiative +p11314 +I36 +sVforay +p11315 +I32 +sVlyonnais +p11316 +I4 +sVsprings +p11317 +I36 +sVadministrations +p11318 +I32 +sVresourcefulness +p11319 +I32 +sVether +p11320 +I32 +sVspearheaded +p11321 +I32 +sVrainer +p11322 +I2 +sVfeistritzer +p11323 +I4 +sVriled +p11324 +I32 +sVtargeting +p11325 +I32 +sVputs +p11326 +I32 +sVbasis +p11327 +I32 +sVmansfield +p11328 +I4 +sVresende +p11329 +I4 +sVfutility +p11330 +I32 +sVsubcabinet-level +p11331 +I32 +sVthree +p11332 +I110 +sVtiny +p11333 +I32 +sVcyrus +p11334 +I4 +sVcommission +p11335 +I44 +sVtrigger +p11336 +I32 +sVdetrimental +p11337 +I32 +sVinterest +p11338 +I110 +sVbasic +p11339 +I32 +sVbasil +p11340 +I32 +sVentered +p11341 +I32 +sVtelq +p11342 +I8 +sVtopics +p11343 +I32 +sVidol +p11344 +I32 +sVthrew +p11345 +I32 +sVgerry +p11346 +I8 +sVminimized +p11347 +I32 +sVdeeper +p11348 +I32 +sVmci +p11349 +I14 +sVsag +p11350 +I32 +sVdismiss +p11351 +I32 +sVwoodruff +p11352 +I8 +sVmaneuver +p11353 +I32 +sVmca +p11354 +I6 +sVlocations +p11355 +I32 +sVgenerals +p11356 +I32 +sVtapping +p11357 +I32 +sValley +p11358 +I36 +sVpersonally +p11359 +I32 +sVinflux +p11360 +I32 +sVaviation +p11361 +I36 +sVdownplay +p11362 +I32 +sVregretted +p11363 +I32 +sValready-scheduled +p11364 +I32 +sVomcm +p11365 +I4 +sVunpopular +p11366 +I32 +sVexception +p11367 +I32 +sVhalmi +p11368 +I4 +sVsly +p11369 +I12 +sVaffirm +p11370 +I36 +sVslv +p11371 +I8 +sVoriginate +p11372 +I32 +sVeconomies +p11373 +I32 +sVslr +p11374 +I4 +sVspontaneously +p11375 +I32 +sVmailroom +p11376 +I32 +sVventures +p11377 +I36 +sVnear +p11378 +I36 +sVconspiracy +p11379 +I32 +sVsuppose +p11380 +I32 +sVmotorist +p11381 +I32 +sVwildest +p11382 +I32 +sVmoney-market +p11383 +I4 +sVsle +p11384 +I8 +sVbalance +p11385 +I36 +sVemployees +p11386 +I38 +sVchilling +p11387 +I32 +sVwiesbaden +p11388 +I8 +sVspawn +p11389 +I32 +sVseven +p11390 +I34 +sVcane +p11391 +I36 +sVmetropolitan +p11392 +I44 +sVmexico +p11393 +I14 +sViq +p11394 +I4 +sVcarlson +p11395 +I12 +sVis +p11396 +I110 +sVfoiled +p11397 +I32 +sVit +p11398 +I110 +sVdefeated +p11399 +I32 +sViv +p11400 +I4 +sVii +p11401 +I4 +sVgovernmental +p11402 +I32 +sVroosevelt +p11403 +I4 +sVclemenza +p11404 +I4 +sVmarketeers +p11405 +I32 +sVin +p11406 +I110 +sVcrude-steel +p11407 +I32 +sVic +p11408 +I14 +sVseattle +p11409 +I12 +sVmouse +p11410 +I32 +sVid +p11411 +I4 +sVsever +p11412 +I32 +sVif +p11413 +I46 +sVgrown +p11414 +I32 +sVgrowl +p11415 +I32 +sVwallich +p11416 +I4 +sVbottles +p11417 +I32 +sVbottler +p11418 +I32 +sVnon-refundable +p11419 +I32 +sVlebow +p11420 +I4 +sVentitles +p11421 +I32 +sVpro-forma +p11422 +I32 +sVmake +p11423 +I108 +sVtrendless +p11424 +I36 +sVpolaroid +p11425 +I14 +sVspeculating +p11426 +I32 +sVabshire +p11427 +I4 +sVrepercussions +p11428 +I32 +sVcanny +p11429 +I40 +sVbelly +p11430 +I32 +sVunfortunate +p11431 +I32 +sVvegetable +p11432 +I32 +sVunrated +p11433 +I32 +sVsidelines +p11434 +I32 +sVconfronting +p11435 +I32 +sVprice-depressing +p11436 +I32 +sVvolkswagen +p11437 +I14 +sVgenerale +p11438 +I4 +sVmeets +p11439 +I32 +sVcounterlogic +p11440 +I32 +sVdiscriminatory +p11441 +I32 +sVabolition +p11442 +I32 +sVgovernors +p11443 +I38 +sVunicorp +p11444 +I12 +sVlazarus +p11445 +I4 +sVkip +p11446 +I4 +sVnurtures +p11447 +I32 +sVdiffering +p11448 +I32 +sVtiring +p11449 +I32 +sVtripled +p11450 +I32 +sVrenaissance +p11451 +I36 +sVbramco +p11452 +I4 +sVwarden +p11453 +I32 +sVovert +p11454 +I32 +sVopportunity +p11455 +I32 +sVthoughts +p11456 +I32 +sVkid +p11457 +I32 +sVbutter +p11458 +I32 +sVotters +p11459 +I36 +sVprograms +p11460 +I36 +sVsettled +p11461 +I32 +sVfailing +p11462 +I32 +sVcynr +p11463 +I4 +sVinherit +p11464 +I32 +sVunconcerned +p11465 +I32 +sVchry-plym +p11466 +I8 +sVmaterials +p11467 +I100 +sVresuming +p11468 +I36 +sVqualities +p11469 +I32 +sVrozen +p11470 +I4 +sVanchorman +p11471 +I32 +sVclaims +p11472 +I36 +sVissuers +p11473 +I32 +sVinvestments +p11474 +I44 +sVleft +p11475 +I44 +sVfacto +p11476 +I32 +sVjust +p11477 +I46 +sVyen +p11478 +I32 +sVtax-increase +p11479 +I32 +sVsporting +p11480 +I32 +sVblack-lung +p11481 +I32 +sVunfair +p11482 +I32 +sVmiddletown +p11483 +I8 +sVassigned +p11484 +I34 +sVfighters +p11485 +I32 +sVyear-old +p11486 +I32 +sVidentify +p11487 +I36 +sVhuman +p11488 +I36 +sVanders +p11489 +I4 +sVfacts +p11490 +I36 +sVproceeding +p11491 +I32 +sVyes +p11492 +I34 +sVbiggest-selling +p11493 +I32 +sVyet +p11494 +I34 +sVimpending +p11495 +I32 +sVnicolas +p11496 +I6 +sVmasse +p11497 +I32 +sVbuyers +p11498 +I96 +sVcatalytic +p11499 +I32 +sVcandidate +p11500 +I96 +sVborger +p11501 +I4 +sVdevaluation +p11502 +I32 +sVregarded +p11503 +I32 +sVassassination +p11504 +I32 +sVroyal +p11505 +I4 +sVex-cell-o +p11506 +I4 +sVmcguire +p11507 +I4 +sVjules +p11508 +I4 +sVgrumbled +p11509 +I32 +sVjefferson +p11510 +I8 +sVinefficiencies +p11511 +I32 +sVjustices +p11512 +I40 +sVindisputable +p11513 +I32 +sVexpansive +p11514 +I32 +sVsave +p11515 +I36 +sVcirculatory +p11516 +I32 +sVmirroring +p11517 +I8 +sVzickler +p11518 +I4 +sVdistillates +p11519 +I32 +sVappreciated +p11520 +I32 +sVboasted +p11521 +I32 +sVinvoluntary +p11522 +I32 +sVroadside +p11523 +I32 +sVmcgann +p11524 +I4 +sVangrily +p11525 +I32 +sVrozelle +p11526 +I12 +sVnatan +p11527 +I4 +sVsupervisors +p11528 +I32 +sVdiscreet +p11529 +I32 +sVorthodontic +p11530 +I32 +sVbackground +p11531 +I36 +sVdestroy +p11532 +I32 +sVwojciech +p11533 +I8 +sVfarms +p11534 +I36 +sVmartyred +p11535 +I32 +sVdreams +p11536 +I36 +sVvanity +p11537 +I4 +sVshoulder +p11538 +I32 +sVdignity +p11539 +I32 +sVmayer +p11540 +I4 +sVstandardization +p11541 +I32 +sVjoneses +p11542 +I4 +sVperforming +p11543 +I32 +sVgreener +p11544 +I4 +sVunnecessary +p11545 +I32 +sVswitching +p11546 +I32 +sVsinking-fund +p11547 +I32 +sVcementing +p11548 +I32 +sVconfront +p11549 +I32 +sVbrunswick +p11550 +I4 +sVboorstin +p11551 +I4 +sVsignal +p11552 +I46 +sVprivate-sector +p11553 +I32 +sVillusion +p11554 +I32 +sVworking-class +p11555 +I32 +sVdean +p11556 +I46 +sVsquander +p11557 +I32 +sVdeal +p11558 +I36 +sVbookseller +p11559 +I32 +sVresorted +p11560 +I32 +sVweek-r +p11561 +I4 +sVdeaf +p11562 +I32 +sVsomehow +p11563 +I42 +sVdead +p11564 +I36 +sVlavender +p11565 +I32 +sVwhichever +p11566 +I32 +sVparagraphs +p11567 +I32 +sVeuromark +p11568 +I12 +sVovarian +p11569 +I32 +sVidomeneo +p11570 +I4 +sVshort-term +p11571 +I38 +sg53 +I42 +sVore. +p11572 +I4 +sVauditing +p11573 +I32 +sVdense +p11574 +I32 +sVwholesalers +p11575 +I40 +sVdoron +p11576 +I4 +sVnotification +p11577 +I32 +sVnormal +p11578 +I36 +sVsingle-family +p11579 +I34 +sVmicrowave +p11580 +I36 +sVtrack +p11581 +I44 +sVokada +p11582 +I12 +sVe.h. +p11583 +I8 +sVshakespeare +p11584 +I4 +sVtycoons +p11585 +I32 +sVnummi +p11586 +I8 +sVwhitman +p11587 +I12 +sVdice +p11588 +I32 +sVincidence +p11589 +I32 +sVtartar +p11590 +I4 +sVbold +p11591 +I32 +sVtechnicare +p11592 +I4 +sVcoincides +p11593 +I32 +sVburn +p11594 +I32 +sVblackmail +p11595 +I32 +sVburk +p11596 +I4 +sVotter +p11597 +I32 +sVtranslated +p11598 +I32 +sVconfrontation +p11599 +I32 +sVmishandled +p11600 +I32 +sVantony +p11601 +I4 +sVbury +p11602 +I32 +sVhigher-priced +p11603 +I32 +sVbombshell +p11604 +I4 +sVhard-pressed +p11605 +I32 +sVorem +p11606 +I4 +sVyelling +p11607 +I32 +sVconceal +p11608 +I32 +sVdahl +p11609 +I4 +sVunfunded +p11610 +I32 +sVicahn +p11611 +I12 +sVnon-cash +p11612 +I32 +sVmagazine +p11613 +I44 +sVkinard +p11614 +I12 +sVdutton +p11615 +I12 +sVafternoon +p11616 +I32 +sVvaginal +p11617 +I32 +sVislands +p11618 +I36 +sVdali +p11619 +I4 +sVbulletin +p11620 +I4 +sVcarlyle +p11621 +I12 +sVautomatically +p11622 +I32 +sVsaddled +p11623 +I32 +sVmixture +p11624 +I32 +sVcoins +p11625 +I32 +sVmanagers +p11626 +I36 +sVformerly +p11627 +I98 +sVamounted +p11628 +I32 +sVrakoff +p11629 +I8 +sVlow- +p11630 +I32 +sVrefiner +p11631 +I32 +sVappoints +p11632 +I8 +sVchooses +p11633 +I32 +sVdown +p11634 +I38 +sVlies +p11635 +I32 +sVsalisbury +p11636 +I4 +sVnarration +p11637 +I32 +sVeisenstadt +p11638 +I8 +sVamsterdam +p11639 +I8 +sVbinding +p11640 +I32 +sVstall +p11641 +I32 +sVfrightened +p11642 +I64 +sVcoveted +p11643 +I32 +sVclda +p11644 +I8 +sVweathered +p11645 +I32 +sVinitial +p11646 +I42 +sVchevalier +p11647 +I36 +sVapproximate +p11648 +I32 +sVper-share +p11649 +I42 +sVinfluencing +p11650 +I32 +sVcounterproductive +p11651 +I32 +sVeditor +p11652 +I36 +sVfraction +p11653 +I32 +sVacquirers +p11654 +I32 +sVdenationalization +p11655 +I36 +sVfactions +p11656 +I36 +sVleon +p11657 +I6 +sVfaring +p11658 +I32 +sVunderlines +p11659 +I32 +sVm3 +p11660 +I6 +sVoffering +p11661 +I100 +sVnon-profit +p11662 +I32 +sVyale +p11663 +I4 +sVpenney +p11664 +I8 +sVfireworks +p11665 +I2 +sVcardiss +p11666 +I8 +sVlanding +p11667 +I32 +sVford +p11668 +I14 +sVidealized +p11669 +I32 +sVlargest-ever +p11670 +I32 +sVleagues +p11671 +I32 +sVlows +p11672 +I32 +sVsyndicate +p11673 +I32 +sVstockbrokerage +p11674 +I32 +sVconey +p11675 +I4 +sVdirectorial +p11676 +I32 +sVanalyst +p11677 +I100 +sVfort +p11678 +I12 +sVprotestant +p11679 +I4 +sVsurprising +p11680 +I32 +sVurgent +p11681 +I32 +sVlimousine +p11682 +I4 +sVgenenchem +p11683 +I4 +sVstaged +p11684 +I32 +sVwhiskey +p11685 +I32 +sVtucson +p11686 +I4 +sVemissions +p11687 +I32 +sVcharge-offs +p11688 +I64 +sVgould +p11689 +I4 +sVplaintiffs +p11690 +I32 +sVstages +p11691 +I32 +sVtemper +p11692 +I32 +sVlong-distance +p11693 +I98 +sVdiagnose +p11694 +I32 +sVseparated +p11695 +I32 +sVmidgets +p11696 +I32 +sVstrengthening +p11697 +I32 +sVsticks +p11698 +I32 +sVclassic +p11699 +I36 +sVcovert +p11700 +I36 +sVsidestep +p11701 +I32 +sVone-third +p11702 +I32 +sVcovers +p11703 +I32 +sVsale +p11704 +I44 +sVregains +p11705 +I32 +sVtarnished +p11706 +I32 +sVclaimants +p11707 +I32 +sVship +p11708 +I36 +sVunrealized +p11709 +I32 +sVsubsistance +p11710 +I32 +sVno-smoking +p11711 +I32 +sVvista +p11712 +I4 +sVmarxist +p11713 +I4 +sVdiscriminate +p11714 +I32 +sVlocality +p11715 +I32 +sVagreeing +p11716 +I32 +sVfosters +p11717 +I32 +sVgenerally +p11718 +I36 +sVcourthouse +p11719 +I32 +sVhanded +p11720 +I32 +sVcampaigned +p11721 +I32 +sVmassacres +p11722 +I32 +sVheart-shaped +p11723 +I32 +sVdigital +p11724 +I36 +sVwarehouse +p11725 +I32 +sVribbons +p11726 +I32 +sVroomier +p11727 +I32 +sVgarland +p11728 +I4 +sVfaction +p11729 +I32 +sVclear-cut +p11730 +I32 +sVb.a.it +p11731 +I8 +sVfelt +p11732 +I32 +sVutilities +p11733 +I46 +sVdiet +p11734 +I32 +sVammonium +p11735 +I32 +sVfell +p11736 +I100 +sVdien +p11737 +I4 +sVopining +p11738 +I32 +sVsoria +p11739 +I4 +sVdiem +p11740 +I4 +sVauthorities +p11741 +I98 +sVdearborn +p11742 +I6 +sVpierced +p11743 +I32 +sVweekend +p11744 +I32 +sVdied +p11745 +I38 +sVquinlan +p11746 +I8 +sVbillion +p11747 +I36 +sVhappening +p11748 +I32 +sVaggiornamento +p11749 +I32 +sVpotato +p11750 +I32 +sVassume +p11751 +I34 +sVannuity +p11752 +I36 +sVmicrocosm +p11753 +I32 +sVdaily +p11754 +I100 +sVjacket +p11755 +I32 +sVceuta +p11756 +I4 +sVpremiums +p11757 +I32 +sVcorrespondingly +p11758 +I32 +sVspokeman +p11759 +I32 +sVforecasters +p11760 +I32 +sVteeth +p11761 +I36 +sVanti-ballistic +p11762 +I4 +sVparcels +p11763 +I32 +sVprofits +p11764 +I38 +sVoverdue +p11765 +I34 +sVanglican +p11766 +I4 +sVmanaged +p11767 +I32 +sVskip +p11768 +I32 +sVskis +p11769 +I32 +sVrelieve +p11770 +I32 +sVmiranda +p11771 +I4 +sVbombed +p11772 +I32 +sVinvent +p11773 +I32 +sVrare-book +p11774 +I32 +sVthemes +p11775 +I32 +sVemeritus +p11776 +I32 +sVmanager +p11777 +I96 +sVmile +p11778 +I36 +sVskim +p11779 +I32 +sVsorbonne +p11780 +I4 +sVarchly +p11781 +I32 +sVskin +p11782 +I32 +sVtransworld +p11783 +I6 +sVplayoffs +p11784 +I32 +sVmill +p11785 +I36 +sVprimer +p11786 +I4 +sVpremises +p11787 +I32 +sVmilk +p11788 +I32 +sVresourceful +p11789 +I32 +sVretention +p11790 +I32 +sVanticipation +p11791 +I32 +sVdepend +p11792 +I32 +sVdisorders +p11793 +I32 +sVoutdated +p11794 +I32 +sVtechnique +p11795 +I32 +sVr.j. +p11796 +I2 +sVoveruns +p11797 +I32 +sVsarney +p11798 +I12 +sViraqi +p11799 +I6 +sVfinally +p11800 +I34 +sVfoursquare +p11801 +I32 +sVreptiles +p11802 +I32 +sVpetersburg +p11803 +I8 +sVmarks +p11804 +I44 +sVfinazzo +p11805 +I8 +sVstabilizing +p11806 +I32 +sVsovereignty +p11807 +I32 +sVdissented +p11808 +I32 +sVturnabout +p11809 +I32 +sVadvises +p11810 +I32 +sVadviser +p11811 +I36 +sVantediluvian +p11812 +I32 +sVrecord-keeping +p11813 +I32 +sVstring +p11814 +I32 +sVpermissive +p11815 +I32 +sVbillionaire +p11816 +I32 +sVtends +p11817 +I32 +sVqualifying +p11818 +I32 +sVtungstic +p11819 +I32 +sVconvicted +p11820 +I32 +sVlynch +p11821 +I4 +sVuneventful +p11822 +I32 +sVadvised +p11823 +I32 +sVmerion +p11824 +I8 +sVma +p11825 +I4 +sVmid-40s +p11826 +I32 +sVnumbering +p11827 +I32 +sVgovernments +p11828 +I32 +sVthree-day +p11829 +I32 +sVfood-processing +p11830 +I32 +sVstaples +p11831 +I32 +sVtattletale +p11832 +I4 +sVlegalization +p11833 +I32 +sVdid +p11834 +I38 +sVapartheid +p11835 +I32 +sVdig +p11836 +I40 +sVproposals +p11837 +I38 +sVdemocrat +p11838 +I4 +sVtravels +p11839 +I32 +sVitem +p11840 +I32 +sVjordanian +p11841 +I4 +sVexcellence +p11842 +I32 +sVapathetic +p11843 +I32 +sVmckeown +p11844 +I4 +sVsignficant +p11845 +I32 +sVpertinent +p11846 +I32 +sVdiv +p11847 +I4 +sVhve +p11848 +I8 +sVstiffer +p11849 +I32 +sVround +p11850 +I40 +sVattracting +p11851 +I32 +sVshave +p11852 +I32 +sVolympic +p11853 +I4 +sVtalked +p11854 +I32 +sVfearing +p11855 +I32 +sVdinners +p11856 +I32 +sVcontrasting +p11857 +I32 +sVdealing +p11858 +I32 +sVchisholm +p11859 +I12 +sVhazardous-waste-management +p11860 +I32 +sVcopy +p11861 +I32 +sVtelerate +p11862 +I12 +sVworm +p11863 +I32 +sVndco +p11864 +I8 +sVthreshold +p11865 +I32 +sVdiapers +p11866 +I32 +sVstamford +p11867 +I12 +sVentertained +p11868 +I32 +sVeating +p11869 +I32 +sVsemifinals +p11870 +I32 +sVrappaport +p11871 +I8 +sVtargets +p11872 +I32 +sVzee +p11873 +I4 +sVresurgence +p11874 +I32 +sVsoured +p11875 +I32 +sVadds +p11876 +I34 +sVpage-one +p11877 +I32 +sVnorris +p11878 +I4 +sVwitkowicz +p11879 +I4 +sVheaviest +p11880 +I32 +sVlyric +p11881 +I32 +sVsweeny +p11882 +I4 +sVdeficiencies +p11883 +I32 +sVampersand +p11884 +I4 +sVsuperficialities +p11885 +I32 +sVinternational +p11886 +I110 +sVunrestricted +p11887 +I32 +sVreoccur +p11888 +I32 +sVfilled +p11889 +I32 +sVdisciplined +p11890 +I32 +sVproclaiming +p11891 +I32 +sVpalmer +p11892 +I4 +sVtransportation +p11893 +I46 +sVinstall +p11894 +I32 +sVbandwagon +p11895 +I32 +sVmosle +p11896 +I4 +sVguardian +p11897 +I32 +sVclerk +p11898 +I32 +sVmakeup +p11899 +I32 +sVvictimized +p11900 +I32 +sVavailed +p11901 +I32 +sVfrench +p11902 +I14 +sVlakes +p11903 +I32 +sVcriticizing +p11904 +I32 +sVchilton +p11905 +I12 +sVphilosophizes +p11906 +I32 +sVgrenada +p11907 +I4 +sVsdi +p11908 +I4 +sVstem +p11909 +I32 +sVbelgo-luxembourg +p11910 +I8 +sVmild +p11911 +I34 +sVeaston +p11912 +I4 +sVwait +p11913 +I32 +sValto +p11914 +I4 +sVfirst-ever +p11915 +I32 +sVdiagnoses +p11916 +I32 +sVcomptroller +p11917 +I44 +sVcuckoo +p11918 +I4 +sVcanadian +p11919 +I14 +sVinstitute +p11920 +I36 +sVshift +p11921 +I32 +sVbor +p11922 +I8 +sVlagged +p11923 +I32 +sVnoncompt +p11924 +I32 +sVaddict +p11925 +I32 +sVbow +p11926 +I32 +sVexpulsion +p11927 +I32 +sVmurders +p11928 +I32 +sVsimultaneous +p11929 +I32 +sVdiagnosed +p11930 +I32 +sVbon +p11931 +I4 +sVredoubling +p11932 +I32 +sVhigh-tech +p11933 +I96 +sVbob +p11934 +I38 +sVbooster +p11935 +I32 +sVtaipei +p11936 +I8 +sVpetipa +p11937 +I4 +sVcrusading +p11938 +I32 +sVsouthfield +p11939 +I8 +sVuseful +p11940 +I32 +sVaccumulate +p11941 +I32 +sVkebab +p11942 +I32 +sVmer-national +p11943 +I6 +sVpandora +p11944 +I4 +sVmerely +p11945 +I32 +sVfissures +p11946 +I32 +sVcared +p11947 +I32 +sVuncounted +p11948 +I32 +sVflexibility +p11949 +I32 +sVcontradictions +p11950 +I32 +sVlicensing +p11951 +I32 +sVverge +p11952 +I32 +sVt.cdc +p11953 +I8 +sVailing +p11954 +I36 +sVkleinwort +p11955 +I6 +sVschenectady +p11956 +I8 +sVgruntal +p11957 +I4 +sVsported +p11958 +I32 +sVhotels +p11959 +I36 +sVeverybody +p11960 +I38 +sVdinette +p11961 +I32 +sVadditive +p11962 +I32 +sVestate +p11963 +I36 +sVbaer +p11964 +I4 +sVliberation +p11965 +I4 +sVphotographic +p11966 +I32 +sVmillion-plus +p11967 +I32 +sVvisit +p11968 +I38 +sVfrance +p11969 +I14 +sVscenarios +p11970 +I32 +sVinsider +p11971 +I46 +sVtouched +p11972 +I32 +sVreseach +p11973 +I32 +sVfrancs +p11974 +I32 +sVduds +p11975 +I32 +sVcreams +p11976 +I32 +sVcooperated +p11977 +I32 +sVlessened +p11978 +I32 +sVsaks +p11979 +I4 +sVdormant +p11980 +I2 +sVsharing +p11981 +I32 +sVsubpeona +p11982 +I32 +sVparks +p11983 +I32 +sVacceptable +p11984 +I32 +sVkotzan +p11985 +I4 +sVdowntown +p11986 +I32 +sVasserting +p11987 +I32 +sVrigid +p11988 +I32 +sVoop +p11989 +I4 +sVplantations +p11990 +I32 +sVrealty +p11991 +I4 +sVarchaeologists +p11992 +I32 +sVdeprosse +p11993 +I4 +sVeffort +p11994 +I36 +sVgovernment-owned +p11995 +I32 +sVfly +p11996 +I32 +sVflx +p11997 +I4 +sVthermos +p11998 +I32 +sVfictionalized +p11999 +I32 +sVtokyo +p12000 +I14 +sVavoiding +p12001 +I32 +sVquoting +p12002 +I32 +sVmelodrama +p12003 +I32 +sVflu +p12004 +I32 +sVsoul +p12005 +I32 +sVreviews +p12006 +I32 +sVsoup +p12007 +I36 +sVsour +p12008 +I32 +sVsogevalor +p12009 +I4 +sVsociological +p12010 +I32 +sVgrowing +p12011 +I32 +sVmaking +p12012 +I44 +sVschierl +p12013 +I8 +sVarrive +p12014 +I32 +sVdosage +p12015 +I32 +sVbar-hopping +p12016 +I32 +sVveggies +p12017 +I32 +sVensue +p12018 +I32 +sVnearest +p12019 +I96 +sVclassrooms +p12020 +I32 +sVplaza +p12021 +I4 +sVkenneth +p12022 +I6 +sVsmall-time +p12023 +I32 +sVlobbying +p12024 +I32 +sVconcocted +p12025 +I32 +sVcelanese +p12026 +I4 +sVlowry +p12027 +I4 +sVconfused +p12028 +I32 +sVagent +p12029 +I32 +sVincarnated +p12030 +I32 +sVsample +p12031 +I32 +sVkorner +p12032 +I4 +sVremanded +p12033 +I32 +sVsteel-equipment +p12034 +I32 +sVcouncil +p12035 +I44 +sVprentice-hall +p12036 +I4 +sVconfuses +p12037 +I32 +sVdennis +p12038 +I6 +sVall-suite +p12039 +I32 +sVcraze +p12040 +I32 +sVinflows +p12041 +I32 +sVpink +p12042 +I32 +sVliebowitz +p12043 +I4 +sVburgeoning +p12044 +I32 +sVarbor +p12045 +I4 +sVoverreacting +p12046 +I32 +sVstricken +p12047 +I32 +sVinundated +p12048 +I32 +sVowens-illinois +p12049 +I4 +sVsuitcases +p12050 +I32 +sVfloated +p12051 +I32 +sVeagan +p12052 +I4 +sVpine +p12053 +I4 +sVannouncements +p12054 +I32 +sVchemical +p12055 +I44 +sVhostage +p12056 +I32 +sVsunday +p12057 +I4 +sVkinnear +p12058 +I12 +sVnyn +p12059 +I8 +sVpure +p12060 +I32 +sVswore +p12061 +I32 +sVmaestro +p12062 +I32 +sVmedical-diagnostic +p12063 +I32 +sVnighttime +p12064 +I32 +sVmid-teens +p12065 +I32 +sVsworn +p12066 +I32 +sVhazardous-waste +p12067 +I32 +sVnye +p12068 +I4 +sVanti-managua +p12069 +I32 +sVsng +p12070 +I8 +sVstaying +p12071 +I32 +sVmar +p12072 +I4 +sVswayed +p12073 +I32 +sVmay +p12074 +I110 +sVmax +p12075 +I12 +sVfed +p12076 +I46 +sVhelmut +p12077 +I4 +sVmembership +p12078 +I96 +sVmae +p12079 +I4 +sVdesigned +p12080 +I32 +sVclonidine-hcl +p12081 +I32 +sVvanunu +p12082 +I12 +sVgros +p12083 +I12 +sVdestructive +p12084 +I32 +sVguys +p12085 +I36 +sVgrow +p12086 +I36 +sVpressuring +p12087 +I32 +sVman +p12088 +I36 +sVrelinquish +p12089 +I32 +sVneco +p12090 +I12 +sVscrambling +p12091 +I32 +sVoutline +p12092 +I36 +sVjohnson +p12093 +I14 +sVsingle-a-minus +p12094 +I32 +sVlong-range +p12095 +I32 +sVmaybe +p12096 +I38 +sVchef +p12097 +I32 +sVborrowing +p12098 +I32 +sVdisembowel +p12099 +I32 +sVtale +p12100 +I32 +sVinhabitants +p12101 +I32 +sVswitch +p12102 +I36 +sVhailed +p12103 +I32 +sVjail +p12104 +I32 +sVdeposit +p12105 +I36 +sVtalc +p12106 +I32 +sVafrican +p12107 +I4 +sVbasket +p12108 +I32 +sVtall +p12109 +I32 +sVguenther +p12110 +I4 +sVtalk +p12111 +I38 +sVwalkie-talkies +p12112 +I32 +sVfarris +p12113 +I12 +sVcute +p12114 +I32 +sVcommercial-paper +p12115 +I32 +sVtongue-twisting +p12116 +I32 +sVdistributors +p12117 +I36 +sVseeing +p12118 +I34 +sVgradual +p12119 +I32 +sVpointed +p12120 +I32 +sVshaky +p12121 +I32 +sVseizing +p12122 +I32 +sVspreadsheets +p12123 +I36 +sVargues +p12124 +I32 +sVstability +p12125 +I32 +sVintroductions +p12126 +I32 +sVfatalities +p12127 +I4 +sVbooks/william +p12128 +I4 +sVcuts +p12129 +I36 +sVargued +p12130 +I34 +sVwinger +p12131 +I4 +sVconsolidating +p12132 +I32 +sVtax-driven +p12133 +I32 +sVclans +p12134 +I32 +sVu.s.-london +p12135 +I8 +sVteens +p12136 +I32 +sVsetbacks +p12137 +I32 +sVconjunction +p12138 +I32 +sVgroup +p12139 +I46 +sVmonitor +p12140 +I36 +sVmair +p12141 +I8 +sVkoryagin +p12142 +I12 +sVinteresting +p12143 +I32 +sVhitlin +p12144 +I4 +sVgen +p12145 +I4 +sVmaid +p12146 +I32 +sVcoaching +p12147 +I32 +sVparnes +p12148 +I4 +sVlisting +p12149 +I32 +sVpolicy +p12150 +I110 +sVmail +p12151 +I36 +sVdeducting +p12152 +I32 +sVmain +p12153 +I36 +sVtexas +p12154 +I14 +sVmorbid +p12155 +I32 +sVtelematics +p12156 +I4 +sVtonic +p12157 +I32 +sVindustry-financed +p12158 +I32 +sVenv +p12159 +I4 +sVviews +p12160 +I36 +sVcheers +p12161 +I32 +sVrecipes +p12162 +I32 +sVundisclosed +p12163 +I32 +sVbeseech +p12164 +I32 +sVsooner +p12165 +I32 +sVtucker +p12166 +I4 +sVinterview +p12167 +I36 +sVratajczak +p12168 +I4 +sVlaments +p12169 +I32 +sVbattle-tested +p12170 +I32 +sVsporadic +p12171 +I32 +sVdissatisfaction +p12172 +I32 +sVbirths +p12173 +I96 +sVkilled +p12174 +I32 +sVdevelopments +p12175 +I40 +sVaficionados +p12176 +I32 +sVoutweigh +p12177 +I32 +sVtaverns +p12178 +I32 +sVworkload +p12179 +I32 +sVattorneys +p12180 +I42 +sVresignation +p12181 +I32 +sVadjudicated +p12182 +I32 +sVmisgivings +p12183 +I32 +sVjill +p12184 +I4 +sVpeasant +p12185 +I32 +sVgamble +p12186 +I36 +sVmaher +p12187 +I4 +sVrock +p12188 +I38 +sVcongressman +p12189 +I32 +sVtax-deductible +p12190 +I32 +sVassuage +p12191 +I32 +sVjenrette +p12192 +I4 +sVagio +p12193 +I4 +sVsurfeit +p12194 +I32 +sVlatin +p12195 +I6 +sVzurich +p12196 +I4 +sVs&w +p12197 +I4 +sVnashua +p12198 +I12 +sVsachnoff +p12199 +I8 +sVpoker +p12200 +I32 +sVs&p +p12201 +I14 +sVborrow +p12202 +I32 +sVs&l +p12203 +I4 +sVmanifesto +p12204 +I32 +sVspeculators +p12205 +I32 +sVrivalry +p12206 +I34 +sVgirl +p12207 +I34 +sVsummary +p12208 +I36 +sVba-1 +p12209 +I4 +sVba-2 +p12210 +I4 +sVelizabeth +p12211 +I4 +sVcanada +p12212 +I14 +sVemerges +p12213 +I36 +sVfantasy-at-home +p12214 +I32 +sVjackson +p12215 +I12 +sVmouths +p12216 +I32 +sVripe +p12217 +I32 +sVaccreditation +p12218 +I32 +sVlawn +p12219 +I32 +sVgreeks +p12220 +I4 +sVinterference +p12221 +I32 +sVexplain +p12222 +I32 +sVbailout +p12223 +I32 +sVimperative +p12224 +I32 +sVemerged +p12225 +I32 +sVinhaled +p12226 +I32 +sVroger +p12227 +I12 +sVdominate +p12228 +I32 +sVlevittowns +p12229 +I4 +sVcorrect +p12230 +I32 +sVassurance +p12231 +I44 +sVinaction +p12232 +I32 +sVsquish +p12233 +I32 +sVearlier +p12234 +I106 +sVmercantile +p12235 +I6 +sVorleans-style +p12236 +I4 +sVburlingame +p12237 +I4 +sVhefty +p12238 +I32 +sVjeanne +p12239 +I4 +sVproblem-loan +p12240 +I32 +sVbrooks +p12241 +I4 +sVspies +p12242 +I32 +sVscreaming +p12243 +I32 +sVrows +p12244 +I32 +sVcholesterol-lowering +p12245 +I32 +sVyuri +p12246 +I4 +sVtrademarks +p12247 +I32 +sVfuller +p12248 +I14 +sVfront-runner +p12249 +I32 +sVconsequences +p12250 +I32 +sVfollow-on +p12251 +I32 +sVore +p12252 +I32 +sVrealignment +p12253 +I32 +sVmilburn +p12254 +I4 +sVatico +p12255 +I14 +sVexaggeration +p12256 +I32 +sVadvance +p12257 +I36 +sVunderwear +p12258 +I32 +sVgrist +p12259 +I32 +sVlanguage +p12260 +I32 +sVministry +p12261 +I36 +sVstandby +p12262 +I32 +sVreassigned +p12263 +I32 +sVlistings +p12264 +I32 +sVvacated +p12265 +I32 +sVsuisse +p12266 +I4 +sVcommunicated +p12267 +I32 +sVthing +p12268 +I36 +sVchocolatiers +p12269 +I32 +sVmesh +p12270 +I32 +sVtigrs +p12271 +I4 +sVhands-off +p12272 +I32 +sVthink +p12273 +I32 +sVfrequent +p12274 +I34 +sVfirst +p12275 +I46 +sVexotic +p12276 +I32 +sVcheese +p12277 +I32 +sVcheckers +p12278 +I4 +sVlyons +p12279 +I14 +sVsteel-ingot +p12280 +I32 +sVfleeing +p12281 +I32 +sVamericano +p12282 +I4 +sVlone +p12283 +I4 +sVmagnavision +p12284 +I4 +sVshipyard +p12285 +I36 +sVanaylsts +p12286 +I32 +sVamericans +p12287 +I4 +sVfast +p12288 +I44 +sVsuspended +p12289 +I32 +sVsuing +p12290 +I32 +sVcarry +p12291 +I32 +sVcorporations +p12292 +I98 +sVsounds +p12293 +I32 +sVthrowaways +p12294 +I32 +sVrome +p12295 +I12 +sVdischarged +p12296 +I32 +sVhonesty +p12297 +I32 +sVshkif +p12298 +I8 +sVdual-career +p12299 +I32 +sVlittle +p12300 +I46 +sVarco +p12301 +I14 +sVpersonalities +p12302 +I32 +sVmurky +p12303 +I32 +sVnordmann +p12304 +I12 +sVshattuck +p12305 +I4 +sVanyone +p12306 +I34 +sVplains +p12307 +I6 +sVjeremy +p12308 +I2 +sVrevved +p12309 +I32 +sValfred +p12310 +I6 +sVmoralists +p12311 +I32 +sVrecruiting +p12312 +I32 +sViran-contra +p12313 +I4 +sVreachable +p12314 +I32 +sVrebuttal +p12315 +I32 +sVparticipated +p12316 +I32 +sVspeaking +p12317 +I32 +sVstupefaction +p12318 +I32 +sVcomplacent +p12319 +I32 +sVeyes +p12320 +I32 +sVadjourned +p12321 +I32 +sVallegedly +p12322 +I32 +sVmassaged +p12323 +I32 +sVmemo +p12324 +I32 +sVcontinuous +p12325 +I32 +sVaccurately +p12326 +I32 +sVbroadcast +p12327 +I36 +sVambulatory +p12328 +I32 +sVhartford +p12329 +I12 +sVbutt +p12330 +I32 +sVelusive +p12331 +I32 +sVworkweeks +p12332 +I32 +sVundoubtedly +p12333 +I34 +sVgreenberg +p12334 +I12 +sVcocktails +p12335 +I4 +sVexclusionary +p12336 +I32 +sVcracks +p12337 +I36 +sVillegality +p12338 +I32 +sVsailing +p12339 +I32 +sVhoover-dempsey +p12340 +I4 +sVspecials +p12341 +I32 +sVowned-and-operated +p12342 +I32 +sVcompromises +p12343 +I32 +sVeons +p12344 +I32 +sVmidtown +p12345 +I32 +sVupgradings +p12346 +I32 +sVfull-fledged +p12347 +I32 +sVknives +p12348 +I32 +sVventure +p12349 +I100 +sVwere +p12350 +I106 +sVgigantic +p12351 +I32 +sVvienna +p12352 +I12 +sVtractor +p12353 +I36 +sVdeclares +p12354 +I46 +sVbaucus +p12355 +I12 +sVgathering +p12356 +I32 +sVeye-opening +p12357 +I32 +sVpullout +p12358 +I32 +sVpreston +p12359 +I12 +sVseventh-largest +p12360 +I32 +sVexceeded +p12361 +I32 +sVbriefs +p12362 +I2 +sVvoices +p12363 +I4 +sVobliquely +p12364 +I32 +sVhimself +p12365 +I32 +sVcomedian +p12366 +I38 +sVpastry +p12367 +I32 +sVnon-voting +p12368 +I32 +sVvoiced +p12369 +I32 +sVoccupied +p12370 +I34 +sVshimon +p12371 +I4 +sVkevin +p12372 +I6 +sVwarsaw +p12373 +I4 +sVousey +p12374 +I4 +sVcoelho +p12375 +I4 +sVspeakers +p12376 +I32 +sVbailed +p12377 +I32 +sVencompassing +p12378 +I32 +sVefficient +p12379 +I32 +sVartitragers +p12380 +I32 +sVupgrading +p12381 +I32 +sVconsortium +p12382 +I100 +sVshocked +p12383 +I32 +sVcanton +p12384 +I4 +sVacumen +p12385 +I32 +sVpotential +p12386 +I32 +sVmale-female +p12387 +I32 +sVfoot +p12388 +I32 +sVbailey +p12389 +I4 +sVperformance +p12390 +I32 +sVbeirut +p12391 +I4 +sVjanitors +p12392 +I32 +sVchannel +p12393 +I38 +sVjungle +p12394 +I32 +sVbets +p12395 +I32 +sVupham +p12396 +I4 +sVtrainees +p12397 +I32 +sVpain +p12398 +I32 +sVnorman +p12399 +I14 +sVtheatre +p12400 +I4 +sVinvestigations +p12401 +I32 +sVarguing +p12402 +I32 +sVcheesecake +p12403 +I32 +sVfriedman +p12404 +I12 +sVenter +p12405 +I32 +sVs.a.y. +p12406 +I8 +sVpaid +p12407 +I32 +sVselas +p12408 +I12 +sVup-to-date +p12409 +I32 +sVbeta +p12410 +I32 +sVbarrage +p12411 +I32 +sValfa +p12412 +I4 +sVsheets +p12413 +I32 +sVdeposit-taking +p12414 +I32 +sVcomplaints +p12415 +I32 +sVproxies +p12416 +I32 +sVtightrope +p12417 +I32 +sVthou +p12418 +I4 +sVconspicuous +p12419 +I32 +sVluxembourg +p12420 +I4 +sVunknowable +p12421 +I32 +sVacknowledges +p12422 +I32 +sVespecially +p12423 +I34 +sVrefunds +p12424 +I32 +sVfills +p12425 +I32 +sVisaly +p12426 +I12 +sVwielding +p12427 +I32 +sVnon-canadians +p12428 +I32 +sVgracefully +p12429 +I32 +sVchoate +p12430 +I4 +sVproperly +p12431 +I32 +sVtriggering +p12432 +I32 +sValarming +p12433 +I32 +sVsigma +p12434 +I4 +sVsurface +p12435 +I32 +sVprecise +p12436 +I40 +sVrating +p12437 +I32 +sVshot +p12438 +I32 +sVnewer +p12439 +I32 +sVshow +p12440 +I36 +sVadolfo +p12441 +I6 +sVfiled +p12442 +I32 +sVcontemporary +p12443 +I32 +sVunc +p12444 +I4 +sVsites +p12445 +I36 +sVreassessing +p12446 +I32 +sVrep. +p12447 +I6 +sVbegged +p12448 +I32 +sVbedside +p12449 +I32 +sVshoe +p12450 +I36 +sVsmashing +p12451 +I32 +sVipg +p12452 +I4 +sVhigh-profile +p12453 +I32 +sVcorner +p12454 +I32 +sVfevers +p12455 +I32 +sVmalted +p12456 +I32 +sVcrane +p12457 +I12 +sVfend +p12458 +I32 +sVmikva +p12459 +I4 +sVlaughlin +p12460 +I4 +sVolivetti-made +p12461 +I4 +sVstormy +p12462 +I36 +sVcaters +p12463 +I32 +sVpwj +p12464 +I4 +sVdick +p12465 +I4 +sVcommitting +p12466 +I32 +sVsoliciting +p12467 +I32 +sVdicn +p12468 +I8 +sVimpunity +p12469 +I32 +sVblack +p12470 +I36 +sVschlender +p12471 +I8 +sVincredulous +p12472 +I32 +sVtreasury +p12473 +I46 +sVharvey +p12474 +I12 +sVcollateral +p12475 +I32 +sVawareness +p12476 +I32 +sVplump +p12477 +I32 +sVranking +p12478 +I32 +sVdrusilla +p12479 +I6 +sVexchangeable +p12480 +I32 +sVsable +p12481 +I4 +sVcaliber +p12482 +I32 +sVget +p12483 +I36 +sVcontracts +p12484 +I36 +sVstomp +p12485 +I32 +sVeastmet +p12486 +I12 +sVmilkshakes +p12487 +I32 +sVemployers +p12488 +I98 +sVgrave +p12489 +I32 +sVkillers +p12490 +I32 +sVnearly +p12491 +I46 +sVcameron +p12492 +I4 +sVdistinctly +p12493 +I32 +sVdenials +p12494 +I32 +sVhipps +p12495 +I4 +sVblends +p12496 +I32 +sVsecondary +p12497 +I40 +sVdianna +p12498 +I4 +sVawaited +p12499 +I32 +sVintrinsically +p12500 +I32 +sVdrinkers +p12501 +I32 +sVkeyboards +p12502 +I32 +sVyardeni +p12503 +I12 +sVcordials +p12504 +I32 +sVmalaysian +p12505 +I12 +sVyield +p12506 +I36 +sVmorning +p12507 +I32 +sVmunin +p12508 +I8 +sVmiles +p12509 +I32 +sVsteelworkers +p12510 +I36 +sVexecutes +p12511 +I32 +sVphotographically +p12512 +I32 +sVflamingos +p12513 +I32 +sVaudited +p12514 +I36 +sVsilently +p12515 +I32 +sVmoammar +p12516 +I12 +sVdeclared +p12517 +I96 +sVmilling +p12518 +I36 +sVcommit +p12519 +I32 +sVnetx +p12520 +I4 +sVseat +p12521 +I44 +sVrelative +p12522 +I32 +sVmarsam +p12523 +I8 +sVsean +p12524 +I4 +sVeliminating +p12525 +I32 +sVmisconduct +p12526 +I32 +sVstigma +p12527 +I32 +sVcalendar +p12528 +I36 +sVstalking +p12529 +I32 +sVseag +p12530 +I8 +sVderided +p12531 +I32 +sVwonder +p12532 +I36 +sVindicted +p12533 +I44 +sVsatisfying +p12534 +I32 +sVtrijets +p12535 +I32 +sVpoint-guard +p12536 +I2 +sVcamping +p12537 +I32 +sVboy +p12538 +I32 +sVutp +p12539 +I8 +sVforecast +p12540 +I36 +sVboundaries +p12541 +I32 +sVpump +p12542 +I36 +sVhwkb +p12543 +I8 +sVself-taught +p12544 +I32 +sVreading +p12545 +I38 +sVdate- +p12546 +I4 +sVchecks +p12547 +I36 +sVoversized +p12548 +I32 +sVaffordable +p12549 +I32 +sVbromberg +p12550 +I12 +sVaugust +p12551 +I6 +sVparent +p12552 +I100 +sVcorresponding +p12553 +I32 +sVlegitimacy +p12554 +I32 +sVapprovals +p12555 +I32 +sVenjoying +p12556 +I32 +sVcln +p12557 +I12 +sVtacit +p12558 +I32 +sVkilling +p12559 +I32 +sVreal-life +p12560 +I32 +sVlopes +p12561 +I4 +sVgregorian +p12562 +I12 +sVfdx +p12563 +I12 +sVnationality +p12564 +I32 +sVpharmacists +p12565 +I32 +sVunlv +p12566 +I6 +sVniskanen +p12567 +I4 +sVmotivation +p12568 +I32 +sVmotivations +p12569 +I32 +sVdates +p12570 +I32 +sVz +p12571 +I100 +sVpension-plan +p12572 +I32 +sVkouril +p12573 +I12 +sVtrader +p12574 +I32 +sVtrades +p12575 +I36 +sVadrar +p12576 +I4 +sg52 +I38 +sVuneconomic +p12577 +I32 +sVtour +p12578 +I36 +sVmarietta +p12579 +I4 +sVpatrons +p12580 +I32 +sVdated +p12581 +I32 +sVdwellers +p12582 +I32 +sVdouble-a/a-1-plus +p12583 +I32 +sVholders +p12584 +I102 +sVtraded +p12585 +I32 +sg20 +I46 +sVforecasting +p12586 +I36 +sVclg +p12587 +I8 +sVcancer +p12588 +I36 +sVdavid-weill +p12589 +I12 +sVterse +p12590 +I32 +sVlast-ranked +p12591 +I32 +sVgarden-variety +p12592 +I32 +sVvenues +p12593 +I32 +sVinnovations +p12594 +I32 +sVmaintained +p12595 +I32 +sVgrants +p12596 +I32 +sVstretched +p12597 +I32 +sVtrifle +p12598 +I32 +sVappealing +p12599 +I32 +sVperpetuating +p12600 +I32 +sVcomprehend +p12601 +I32 +sVhodding +p12602 +I4 +sVcustody +p12603 +I32 +sVlogic +p12604 +I36 +sVconsidering +p12605 +I34 +sVunusual +p12606 +I32 +sVnorrett +p12607 +I4 +sVsecord +p12608 +I12 +sVmarc +p12609 +I4 +sVcx +p12610 +I4 +sVbarry +p12611 +I12 +sVmari +p12612 +I4 +sVmark +p12613 +I46 +sVmart +p12614 +I32 +sVmcentee +p12615 +I8 +sVcqx +p12616 +I4 +sVdependable +p12617 +I32 +sVparenting +p12618 +I32 +sVmars +p12619 +I4 +sVcolo.-based +p12620 +I4 +sVranches +p12621 +I32 +sVborders +p12622 +I32 +sVmary +p12623 +I4 +sVhiggins +p12624 +I4 +sVeducated +p12625 +I32 +sVshcharansky +p12626 +I4 +sVgraveyard +p12627 +I32 +sVhodgepodge +p12628 +I32 +sVmeasles +p12629 +I32 +sVoffered +p12630 +I96 +sVsquash +p12631 +I34 +sVdollar-holders +p12632 +I32 +sVdangerous +p12633 +I40 +sVstifling +p12634 +I32 +sVdramatic +p12635 +I32 +sVwake +p12636 +I36 +sVdoesn +p12637 +I98 +sVdeclaration +p12638 +I32 +sVsupporter +p12639 +I32 +sVoverdose +p12640 +I32 +sVmotorists +p12641 +I32 +sVbmy +p12642 +I4 +sVprof. +p12643 +I6 +sVthose +p12644 +I46 +sVsound +p12645 +I36 +sVpredicament +p12646 +I32 +sVklaus +p12647 +I4 +sVdisconnected +p12648 +I32 +sVtownships +p12649 +I32 +sVcoordinator +p12650 +I32 +sVhyping +p12651 +I32 +sVmountlake +p12652 +I8 +sVassociates +p12653 +I38 +sVongoing +p12654 +I32 +sVjefferies +p12655 +I4 +sVpromising +p12656 +I32 +sVinvestigating +p12657 +I32 +sVslapping +p12658 +I32 +sVinterpretive +p12659 +I32 +sVfalsified +p12660 +I32 +sVinterpublic +p12661 +I6 +sVundertook +p12662 +I32 +sVconferences +p12663 +I32 +sVthen +p12664 +I126 +sVcaine +p12665 +I4 +sVcoffee +p12666 +I46 +sVsleeping +p12667 +I36 +sVmiddle +p12668 +I36 +sVsudden +p12669 +I32 +sVreleases +p12670 +I32 +sVpurportedly +p12671 +I32 +sVentrenching +p12672 +I32 +sVbargain-hunting +p12673 +I32 +sVunderweighted +p12674 +I32 +sVprotein +p12675 +I32 +sVwisely +p12676 +I32 +sVeveryday +p12677 +I32 +sVmovements +p12678 +I32 +sVpap +p12679 +I4 +sVbags +p12680 +I32 +sVdifferent +p12681 +I40 +sVpas +p12682 +I4 +sVpat +p12683 +I4 +sVdoctor +p12684 +I32 +sVpay +p12685 +I36 +sVedwin +p12686 +I6 +sVamateurs +p12687 +I32 +sVsame +p12688 +I32 +sVleventhal +p12689 +I4 +sVpac +p12690 +I4 +sVspeech +p12691 +I32 +sVarguments +p12692 +I32 +sVaerobics +p12693 +I2 +sVdoulton +p12694 +I4 +sVstruggling +p12695 +I32 +sVintermediary +p12696 +I32 +sVpan +p12697 +I14 +sVdisappointment +p12698 +I32 +sVshindell +p12699 +I12 +sVjeffrey +p12700 +I6 +sVextended +p12701 +I100 +sVsickness +p12702 +I32 +sVmenuetto +p12703 +I4 +sVassist +p12704 +I32 +sVmunch +p12705 +I32 +sVrunning +p12706 +I44 +sVdriven +p12707 +I32 +sVmore-open +p12708 +I32 +sVlong-troubled +p12709 +I32 +sVfrisked +p12710 +I32 +sVira +p12711 +I4 +sVcorporate-bureaucracy +p12712 +I32 +sVnonprofessional +p12713 +I32 +sVtotally +p12714 +I32 +sVone-man +p12715 +I32 +sVdrain +p12716 +I32 +sVlargely +p12717 +I32 +sVbenjamin +p12718 +I4 +sVsideways +p12719 +I32 +sVscrutinized +p12720 +I32 +sVroughly +p12721 +I32 +sVsubstantive +p12722 +I32 +sVmortgages +p12723 +I32 +sVobjection +p12724 +I32 +sVcross-subsidization +p12725 +I32 +sVsolve +p12726 +I32 +sVbottle +p12727 +I32 +sVlampooned +p12728 +I32 +sVeasing +p12729 +I32 +sVnatural-gas +p12730 +I32 +sVconvened +p12731 +I32 +sVpa. +p12732 +I4 +sVconsisted +p12733 +I32 +sVgates +p12734 +I46 +sVoverseeing +p12735 +I32 +sVsuitor +p12736 +I36 +sVmoney +p12737 +I46 +sVadjustments +p12738 +I32 +sVmiami-based +p12739 +I4 +sVresolution +p12740 +I34 +sVbacks +p12741 +I32 +sVbondholders +p12742 +I32 +sVu.s.-made +p12743 +I4 +sVreputable +p12744 +I2 +sVleeway +p12745 +I32 +sVaspect +p12746 +I32 +sVschoenberg +p12747 +I4 +sVparagraphing +p12748 +I4 +sVb-week +p12749 +I16 +sVmultiples +p12750 +I32 +sVsprang +p12751 +I32 +sVasthma +p12752 +I36 +sVdespaired +p12753 +I32 +sVnick +p12754 +I4 +sVmcdonald +p12755 +I12 +sVtourism +p12756 +I36 +sVzaentz +p12757 +I12 +sVs.g. +p12758 +I4 +sVforgo +p12759 +I32 +sVambulance-chasing +p12760 +I32 +sVpile +p12761 +I36 +sVbaalbek +p12762 +I4 +sVweinberger +p12763 +I14 +sVextensive +p12764 +I36 +sVheavier +p12765 +I32 +sVpill +p12766 +I32 +sVcareers +p12767 +I38 +sVhoopla +p12768 +I32 +sVgrip +p12769 +I32 +sVcalif-based +p12770 +I4 +sVteeth-gnashing +p12771 +I32 +sVeasy-cash +p12772 +I2 +sVshore-grown +p12773 +I32 +sVlawyer-cpa +p12774 +I32 +sVd.c.-based +p12775 +I4 +sVincome +p12776 +I36 +sVphotocopier +p12777 +I32 +sVadmitting +p12778 +I32 +sVsexiness +p12779 +I32 +sVforge +p12780 +I32 +sVtennis-racquets +p12781 +I32 +sVgrid +p12782 +I32 +sVmon +p12783 +I14 +sVmom +p12784 +I32 +sVsecrecy +p12785 +I32 +sVunheroic +p12786 +I32 +sVunderwriting +p12787 +I32 +sVimplicate +p12788 +I32 +sVdisappointed +p12789 +I32 +sVgrim +p12790 +I32 +sVclaiborne +p12791 +I8 +sVworld-class +p12792 +I32 +sVenglewood +p12793 +I12 +sVvending +p12794 +I32 +sVadams +p12795 +I12 +sVknight-ridder +p12796 +I4 +sVicbms +p12797 +I4 +sVstamina-testing +p12798 +I32 +sVserves +p12799 +I32 +sVmanhattan +p12800 +I4 +sVfacing +p12801 +I32 +sVchamber +p12802 +I36 +sVaudience +p12803 +I32 +sVeither +p12804 +I34 +sVretailers +p12805 +I40 +sVserved +p12806 +I32 +sVvoluntarily +p12807 +I32 +sVamortizing +p12808 +I32 +sVshadowy +p12809 +I32 +sVniceties +p12810 +I32 +sVsneaker +p12811 +I32 +sVroutines +p12812 +I32 +sVjews +p12813 +I4 +sVpreservers +p12814 +I32 +sVleveled +p12815 +I32 +sVpaddio +p12816 +I4 +sVpronounce +p12817 +I32 +sVdole +p12818 +I12 +sVl +p12819 +I4 +sVcancel +p12820 +I32 +sVerase +p12821 +I32 +sVeducator +p12822 +I32 +sVspecified +p12823 +I32 +sVimages +p12824 +I32 +sVcabs +p12825 +I32 +sVshaib +p12826 +I4 +sVsommer +p12827 +I8 +sVascent +p12828 +I32 +sVmatching +p12829 +I32 +sVbooming +p12830 +I32 +sVgross +p12831 +I32 +sVkudelka +p12832 +I4 +sVellis +p12833 +I4 +sVcalculating +p12834 +I32 +sVconfirm +p12835 +I32 +sVgrosz +p12836 +I4 +sVhenderson +p12837 +I12 +sVsquirms +p12838 +I32 +sVfluids +p12839 +I4 +sVparalyzed +p12840 +I32 +sVchips +p12841 +I100 +sVpioneer +p12842 +I46 +sVcritical +p12843 +I36 +sVinject +p12844 +I32 +sVexpressing +p12845 +I32 +sVnewport +p12846 +I4 +sVbohai +p12847 +I4 +sVmoderate +p12848 +I32 +sVcritiques +p12849 +I32 +sVknife +p12850 +I32 +sVmeasuring +p12851 +I32 +sVspecializing +p12852 +I32 +sVbuttressed +p12853 +I32 +sVsesit +p12854 +I8 +sVunderwriters +p12855 +I38 +sVairways +p12856 +I4 +sVseconds +p12857 +I32 +sVmanufactured +p12858 +I42 +sVfitness +p12859 +I32 +sg116 +I40 +sVarts +p12860 +I36 +sVsouvenir +p12861 +I32 +sVsasso +p12862 +I4 +sVbroken +p12863 +I32 +sVresign +p12864 +I36 +sVdrums +p12865 +I32 +sVrefers +p12866 +I32 +sVfinicky +p12867 +I32 +sVcarlow +p12868 +I4 +sVmanufactures +p12869 +I32 +sVmanufacturer +p12870 +I32 +sVwilliam +p12871 +I14 +sVconducting +p12872 +I32 +sVpreoccupied +p12873 +I32 +sVunissued +p12874 +I32 +sVstations +p12875 +I100 +sVintra-european +p12876 +I32 +sVisland +p12877 +I36 +sVthen-nsc +p12878 +I32 +sVfringe +p12879 +I32 +sVdevelops +p12880 +I36 +sVmixes +p12881 +I32 +sVpractical +p12882 +I32 +sVall-too-familiar +p12883 +I32 +sVdemonic +p12884 +I32 +sVpreoccupies +p12885 +I32 +sVcongreso +p12886 +I4 +sVairline +p12887 +I40 +sVpockets +p12888 +I32 +sVmounting +p12889 +I32 +sVmixed +p12890 +I38 +sVshirt +p12891 +I32 +sVnonessential +p12892 +I32 +sVprovisional +p12893 +I32 +sVroad +p12894 +I36 +sVfallacy +p12895 +I32 +sVdetente +p12896 +I32 +sVsyndication +p12897 +I36 +sVquietly +p12898 +I32 +sVlicensed +p12899 +I32 +sVfranchising +p12900 +I32 +sVwhites +p12901 +I32 +sVairliner +p12902 +I32 +sVspreading +p12903 +I32 +sVskilled +p12904 +I32 +sVblessed +p12905 +I32 +sVairlines +p12906 +I46 +sVempress +p12907 +I32 +sVlapses +p12908 +I32 +sVeinstein +p12909 +I12 +sVmorocco +p12910 +I4 +sVarvin +p12911 +I14 +sVjerusalem +p12912 +I4 +sVkfvpr +p12913 +I4 +sVwildfire +p12914 +I32 +sVpharmaceutical +p12915 +I36 +sVacquiesced +p12916 +I32 +sVsadder +p12917 +I2 +sVcamouflaging +p12918 +I32 +sVbhc +p12919 +I8 +sVdeadlines +p12920 +I32 +sVrestrained +p12921 +I32 +sVmaterial-service +p12922 +I32 +sVdowney +p12923 +I4 +sVgalvanize +p12924 +I32 +sVolvr +p12925 +I8 +sVdecisive +p12926 +I32 +sVtoddlers +p12927 +I32 +sVobsessional +p12928 +I34 +sVasians +p12929 +I6 +sVone-upmanship +p12930 +I32 +sVpassports +p12931 +I32 +sVbipartisan +p12932 +I34 +sVmornings +p12933 +I32 +sVrecyclables +p12934 +I32 +sVenough +p12935 +I32 +sVproportionately +p12936 +I32 +sVhacienda +p12937 +I4 +sVwyss +p12938 +I8 +sVstrikes +p12939 +I32 +sVsophisticated +p12940 +I38 +sVcane-sugar +p12941 +I32 +sVwiping +p12942 +I32 +sVbookstore +p12943 +I32 +sVgore +p12944 +I4 +sVlaing +p12945 +I12 +sVindustrie +p12946 +I4 +sVflamboyant +p12947 +I32 +sVarranged +p12948 +I32 +sVromantic +p12949 +I34 +sVcelebrating +p12950 +I32 +sVhaider +p12951 +I12 +sVpacman +p12952 +I4 +sVvice +p12953 +I108 +sVbenton +p12954 +I8 +sVbreath +p12955 +I32 +sVre-election +p12956 +I32 +sVcomplicating +p12957 +I32 +sVsolvents +p12958 +I32 +sVa.c. +p12959 +I4 +sVsuitcase +p12960 +I32 +sVmanuel +p12961 +I6 +sVdeadlock +p12962 +I32 +sVlederle +p12963 +I4 +sVaffection +p12964 +I32 +sVyvette +p12965 +I2 +sVsouthbend +p12966 +I6 +sVleaked +p12967 +I32 +sVshare-buying +p12968 +I32 +sVvideos +p12969 +I32 +sVrapids +p12970 +I4 +sVresolving +p12971 +I32 +sVstronger-than-expected +p12972 +I40 +sVcensor +p12973 +I32 +sVdeep +p12974 +I32 +sVgeneral +p12975 +I46 +sVimagination +p12976 +I32 +sVexamine +p12977 +I32 +sVmulti-year +p12978 +I32 +sVfile +p12979 +I32 +sVimporting +p12980 +I32 +sVshopping +p12981 +I36 +sVallocating +p12982 +I32 +sVgoebbels +p12983 +I4 +sVsyrian +p12984 +I4 +sVfilm +p12985 +I44 +sVfill +p12986 +I32 +sVagain +p12987 +I38 +sVamendments +p12988 +I32 +sVupc +p12989 +I8 +sVretiring +p12990 +I32 +sVpersonnel +p12991 +I32 +sVdrivers +p12992 +I32 +sVhybrid +p12993 +I32 +sVweeded +p12994 +I32 +sVtimed +p12995 +I32 +sVfield +p12996 +I36 +sVhall-walker +p12997 +I12 +sVtamanrasset +p12998 +I8 +sVspringsteen +p12999 +I4 +sVlafayette +p13000 +I8 +sVasset- +p13001 +I32 +sVseamen +p13002 +I100 +sVchocolate-truffle +p13003 +I32 +sVinnocently +p13004 +I32 +sVfork +p13005 +I32 +sVmonteith +p13006 +I8 +sVrenowned +p13007 +I32 +sVhey +p13008 +I36 +sVobsessed +p13009 +I32 +sVacademies +p13010 +I32 +sVshelter +p13011 +I32 +sVcheap-labor +p13012 +I32 +sVlait +p13013 +I32 +sVcustom-made +p13014 +I32 +sVradio-controlled +p13015 +I32 +sVbrandy +p13016 +I32 +sVimportant +p13017 +I32 +sVdrescher +p13018 +I4 +sVbrands +p13019 +I36 +sVequitable +p13020 +I38 +sVdecorated +p13021 +I32 +sVreadings +p13022 +I32 +sVpeugeot +p13023 +I8 +sVnash +p13024 +I4 +sVbarometers +p13025 +I32 +sVconclusive +p13026 +I32 +sVenacting +p13027 +I4 +sVcenterpiece +p13028 +I32 +sVremote +p13029 +I32 +sVassets +p13030 +I110 +sVunload +p13031 +I32 +sVcasts +p13032 +I32 +sVdecrane +p13033 +I8 +sVshafer +p13034 +I8 +sVwitching +p13035 +I32 +sVsounded +p13036 +I32 +sVresale +p13037 +I4 +sVtightened +p13038 +I32 +sVu +p13039 +I12 +sVhugely +p13040 +I32 +sVgod +p13041 +I36 +sVstarting +p13042 +I32 +sVlescaze +p13043 +I4 +sVrepresent +p13044 +I32 +sVcolleges +p13045 +I32 +sVmore-focused +p13046 +I32 +sVforget +p13047 +I34 +sVfounder +p13048 +I40 +sVdecof +p13049 +I4 +sVforbidden +p13050 +I32 +sVallergy +p13051 +I36 +sVdollar +p13052 +I108 +sVsunw +p13053 +I4 +sVall-natural +p13054 +I32 +sVfounded +p13055 +I34 +sVwell-turned-out +p13056 +I32 +sVtalky +p13057 +I32 +sVco-author +p13058 +I32 +sVnon-precious +p13059 +I4 +sVforged +p13060 +I32 +sVcooperative +p13061 +I32 +sVinvariably +p13062 +I34 +sVtalks +p13063 +I44 +sVoperationally +p13064 +I32 +sVexpressions +p13065 +I32 +sVsuna +p13066 +I8 +sVchildren +p13067 +I38 +sVprolongs +p13068 +I32 +sVreluctant +p13069 +I32 +sVshattered +p13070 +I32 +sVcoolidge +p13071 +I12 +sVgq +p13072 +I4 +sVheirs +p13073 +I32 +sVfixed-rate +p13074 +I32 +sVspillover +p13075 +I34 +sVmodernization +p13076 +I32 +sVherwitz +p13077 +I4 +sVpreserved +p13078 +I32 +sValberto +p13079 +I4 +sVprodding +p13080 +I32 +sValberta +p13081 +I4 +sVheterogeneity +p13082 +I32 +sVbevy +p13083 +I32 +sVpuffs +p13084 +I32 +sVpremium +p13085 +I32 +sVparcel +p13086 +I4 +sVstraightforward +p13087 +I32 +sVreturning +p13088 +I32 +sVretton +p13089 +I4 +sVpuffy +p13090 +I32 +sVbowery +p13091 +I4 +sVremoving +p13092 +I32 +sVwitter +p13093 +I4 +sVconfections +p13094 +I32 +sVscout +p13095 +I32 +sVaviator +p13096 +I32 +sVfall +p13097 +I36 +sVwinning +p13098 +I36 +sVdifference +p13099 +I32 +sVsyracuse +p13100 +I4 +sVcheerful +p13101 +I32 +sVneurological +p13102 +I32 +sVwashes +p13103 +I32 +sVnorfolk +p13104 +I14 +sValma +p13105 +I36 +sVbroderick +p13106 +I4 +sVmothers +p13107 +I32 +sVangus +p13108 +I2 +sVcelebrity +p13109 +I36 +sVwsj +p13110 +I4 +sVnonwhite +p13111 +I32 +sVpearce +p13112 +I4 +sVclaudio +p13113 +I4 +sVdamped +p13114 +I32 +sVcampesinas +p13115 +I32 +sVnunn +p13116 +I12 +sVsaudi +p13117 +I4 +sVhandelman +p13118 +I4 +sVminiscribe +p13119 +I6 +sVbiological +p13120 +I32 +sVeconomically +p13121 +I32 +sVexemptions +p13122 +I32 +sVapostles +p13123 +I32 +sVsobbed +p13124 +I32 +sVneighborhood +p13125 +I32 +sVwithheld +p13126 +I32 +sVburgee +p13127 +I4 +sVcried +p13128 +I32 +sVeisner +p13129 +I12 +sVshort-haul +p13130 +I32 +sVritter +p13131 +I4 +sVpreposterous +p13132 +I2 +sVhitachi +p13133 +I14 +sVzero +p13134 +I32 +sVtitles +p13135 +I32 +sVautobiography +p13136 +I32 +sVquebec +p13137 +I14 +sVlawyer +p13138 +I44 +sVfurther +p13139 +I46 +sVaffable +p13140 +I32 +sVstrunk +p13141 +I8 +sVcigars +p13142 +I32 +sVschlesinger +p13143 +I8 +sVaba +p13144 +I12 +sVdial +p13145 +I32 +sVabc +p13146 +I14 +sVstood +p13147 +I32 +sVopted +p13148 +I32 +sVsweetly +p13149 +I32 +sVbrackets +p13150 +I32 +sVskeptic +p13151 +I32 +sVwrecked +p13152 +I32 +sVsilvercrest +p13153 +I14 +sVabm +p13154 +I4 +sVovershot +p13155 +I32 +sVexasperation +p13156 +I32 +sVfaded +p13157 +I32 +sVabt +p13158 +I14 +sVhigginbotham +p13159 +I4 +sVfixings +p13160 +I32 +sVtribute +p13161 +I32 +sVpublic +p13162 +I38 +sVmovement +p13163 +I36 +sVcompact +p13164 +I32 +sVoutgoing +p13165 +I34 +sVhigher-ups +p13166 +I32 +sVranged +p13167 +I32 +sVtheme-park +p13168 +I32 +sVcalculates +p13169 +I32 +sVcomponent +p13170 +I32 +sVranges +p13171 +I32 +sVdisastrous +p13172 +I32 +sVoperating +p13173 +I46 +sVcurricula +p13174 +I32 +sVmulroney +p13175 +I12 +sVsupply-siders +p13176 +I34 +sVtable +p13177 +I36 +sVpublishes +p13178 +I32 +sVadmits +p13179 +I32 +sVspeeches +p13180 +I32 +sVhdl +p13181 +I8 +sVprosecutors +p13182 +I32 +sVmatsumura +p13183 +I4 +sVleveling +p13184 +I32 +sVcrowds +p13185 +I32 +sVmarijuana +p13186 +I32 +sVmargin +p13187 +I32 +sVunsupported +p13188 +I32 +sVf-111 +p13189 +I12 +sVjackie +p13190 +I4 +sVojay +p13191 +I8 +sVairport +p13192 +I36 +sVjoachim-ernst +p13193 +I4 +sVervin +p13194 +I12 +sVpublished +p13195 +I32 +sVformation +p13196 +I32 +sVnarrow +p13197 +I32 +sVskids +p13198 +I32 +sVswearingen +p13199 +I4 +sVauthorize +p13200 +I32 +sValexandria +p13201 +I4 +sVgibert +p13202 +I4 +sVbarker +p13203 +I4 +sVtransit +p13204 +I32 +sVafrica +p13205 +I4 +sVdwarfism +p13206 +I32 +sVbused +p13207 +I32 +sVcomputer-information +p13208 +I32 +sVsanction +p13209 +I32 +sVrican +p13210 +I4 +sVrollover +p13211 +I4 +sVestablish +p13212 +I32 +sVreadily +p13213 +I32 +sVdonaldson +p13214 +I6 +sVshareholders +p13215 +I110 +sVtrish +p13216 +I4 +sVeye +p13217 +I32 +sVassistants +p13218 +I32 +sVmoffett +p13219 +I4 +sg78 +I12 +sVdistinct +p13220 +I32 +sVasta +p13221 +I4 +sVwiped +p13222 +I32 +sVretrovir +p13223 +I4 +sVhumphreys +p13224 +I4 +sVtwo +p13225 +I110 +sVgovernance +p13226 +I32 +sVcomparing +p13227 +I32 +sVshackled +p13228 +I32 +sVamenities +p13229 +I32 +sVkimberly +p13230 +I4 +sVclara +p13231 +I4 +sVcorrespondents +p13232 +I32 +sVgulfstream +p13233 +I4 +sVraft +p13234 +I32 +sVachieving +p13235 +I34 +sVbulgarian +p13236 +I4 +sVkristol +p13237 +I12 +sVmuch-needed +p13238 +I32 +sVanti-communist +p13239 +I32 +sVformality +p13240 +I32 +sVincorporates +p13241 +I32 +sVhandsomely +p13242 +I32 +sVengaged +p13243 +I32 +sVuterine +p13244 +I32 +sVleonard +p13245 +I6 +sVcoal-related +p13246 +I2 +sVadmissions +p13247 +I32 +sVwrko-am +p13248 +I4 +sVcontrolling +p13249 +I32 +sVparticular +p13250 +I32 +sVhigh-volume-dependent +p13251 +I32 +sVtowbin +p13252 +I12 +sVtown +p13253 +I36 +sVnone +p13254 +I36 +sVscrewdriver +p13255 +I32 +sVvladimir +p13256 +I4 +sVcluster +p13257 +I32 +sVrecall +p13258 +I36 +sVder +p13259 +I36 +sVdes +p13260 +I44 +sVgeorgine +p13261 +I8 +sVchipmakers +p13262 +I36 +sVtwo-day +p13263 +I32 +sVfriendly +p13264 +I32 +sVguards +p13265 +I32 +sVflindt +p13266 +I4 +sVremain +p13267 +I32 +sVpressing +p13268 +I32 +sVdel +p13269 +I14 +sVhalts +p13270 +I32 +sVeclipsed +p13271 +I32 +sVabandon +p13272 +I32 +sVstrategies +p13273 +I36 +sVspecialized +p13274 +I34 +sVchirac +p13275 +I4 +sVdef +p13276 +I4 +sVbelieving +p13277 +I32 +sVpurchaser +p13278 +I32 +sVpurchases +p13279 +I40 +sVcompare +p13280 +I32 +sVritual +p13281 +I32 +sVhamburger +p13282 +I32 +sVdangerously +p13283 +I32 +sVhenkel +p13284 +I12 +sVdesktop +p13285 +I32 +sVgreeley +p13286 +I4 +sVferns +p13287 +I32 +sVshare +p13288 +I36 +sVps +p13289 +I4 +sVconceding +p13290 +I32 +sVsphere +p13291 +I32 +sVcurrent-account +p13292 +I96 +sVbreathing +p13293 +I32 +sVnumbers +p13294 +I34 +sVpurchased +p13295 +I32 +sVsharp +p13296 +I44 +sVbanana-republic +p13297 +I32 +sVrobinson +p13298 +I12 +sVpinks +p13299 +I32 +sVbiography +p13300 +I32 +sVhomicide +p13301 +I32 +sVmaturing +p13302 +I34 +sVneeds +p13303 +I32 +sVunexpected +p13304 +I32 +sVawkward +p13305 +I32 +sVpre-world +p13306 +I32 +sVsunstyle +p13307 +I4 +sVacts +p13308 +I44 +sVdouble-a-2 +p13309 +I32 +sVabhors +p13310 +I32 +sVmaps +p13311 +I36 +sVcatskills +p13312 +I4 +sVcsx +p13313 +I14 +sVself-control +p13314 +I32 +sVswiss-based +p13315 +I4 +sVensemble +p13316 +I36 +sVneedn +p13317 +I32 +sVquasi-protectionist +p13318 +I32 +sVhindawi +p13319 +I4 +sVdisney +p13320 +I12 +sVballetomanes +p13321 +I32 +sVinflationary +p13322 +I32 +sVadvice +p13323 +I32 +sVbko +p13324 +I8 +sVexpenditures +p13325 +I32 +sVfrills +p13326 +I32 +sVintones +p13327 +I32 +sVcorrections +p13328 +I12 +sVfast-growing +p13329 +I32 +sVambassador +p13330 +I32 +sVblood +p13331 +I32 +sVteleglobe +p13332 +I6 +sVcoming +p13333 +I46 +sVbangemann +p13334 +I12 +sVchocolate-coated +p13335 +I32 +sVacreage +p13336 +I32 +sVbloom +p13337 +I4 +sVresponse +p13338 +I32 +sVbleak +p13339 +I32 +sVreappeared +p13340 +I32 +sVentry +p13341 +I32 +sVoffenses +p13342 +I32 +sVorchard +p13343 +I4 +sVcrowded +p13344 +I32 +sVbradt +p13345 +I8 +sVbroker-loan +p13346 +I32 +sVconglomerates +p13347 +I32 +sVcrippling +p13348 +I32 +sVblunder +p13349 +I32 +sVcoal +p13350 +I36 +sVresponsibility +p13351 +I36 +sVpanama +p13352 +I4 +sVpleasure +p13353 +I32 +sVredirecting +p13354 +I32 +sVcs1 +p13355 +I4 +sVplaying +p13356 +I40 +sVmarriage +p13357 +I32 +sVserenade +p13358 +I4 +sVinfant +p13359 +I32 +sVrifles +p13360 +I32 +sVrounded +p13361 +I32 +sVcellular +p13362 +I36 +sVdenes +p13363 +I4 +sVrand +p13364 +I4 +sVwinged +p13365 +I32 +sVdemjanjuk +p13366 +I6 +sVmass-produced +p13367 +I32 +sVspook +p13368 +I32 +sVsetback +p13369 +I40 +sVsteppes +p13370 +I8 +sVradar +p13371 +I100 +sValready +p13372 +I98 +sVthrough +p13373 +I42 +sVpredisposed +p13374 +I36 +sVhollis +p13375 +I8 +sVabc-affiliated +p13376 +I4 +sVexistence +p13377 +I32 +sVsuffer +p13378 +I32 +sVattacking +p13379 +I32 +sVarrogant +p13380 +I32 +sVrotan +p13381 +I4 +sVmacfadden-bartell +p13382 +I4 +sVpent +p13383 +I32 +sVsquare-toed +p13384 +I32 +sVpossessions +p13385 +I32 +sVsodium +p13386 +I32 +sVteneff +p13387 +I12 +sVpcs +p13388 +I4 +sVshun +p13389 +I32 +sVspot-market +p13390 +I32 +sVseasonally +p13391 +I34 +sVlate +p13392 +I46 +sVraw-steel +p13393 +I2 +sVdetected +p13394 +I32 +sVreuters +p13395 +I14 +sVmicroscopic +p13396 +I32 +sVedmund +p13397 +I4 +sVpenn +p13398 +I12 +sVclamor +p13399 +I32 +sVconstruction-materials +p13400 +I32 +sVdolls +p13401 +I32 +sVhurting +p13402 +I32 +sVgood +p13403 +I38 +sVseeking +p13404 +I36 +sVtwin-engine +p13405 +I32 +sVmales +p13406 +I32 +sVsocially +p13407 +I32 +sVnoticing +p13408 +I32 +sVprejudices +p13409 +I32 +sVclossey +p13410 +I4 +sVblumenthal +p13411 +I4 +sVwalls +p13412 +I32 +sVsiegels +p13413 +I4 +sVcompound +p13414 +I32 +sVinception +p13415 +I32 +sVprejudiced +p13416 +I32 +sVattending +p13417 +I32 +sViranians +p13418 +I4 +sVcomplain +p13419 +I32 +sVassociation +p13420 +I36 +sVpuusepp +p13421 +I12 +sVmystery +p13422 +I36 +sVeasily +p13423 +I32 +sVdeteriorates +p13424 +I32 +sVdivested +p13425 +I32 +sVmodulator +p13426 +I32 +sVpregnant +p13427 +I32 +sVcrisanti +p13428 +I4 +sVhome-state +p13429 +I32 +sVeuan +p13430 +I8 +sVevade +p13431 +I32 +sVasher +p13432 +I4 +sVmicro +p13433 +I4 +sVtoken +p13434 +I32 +sVhabits +p13435 +I32 +sVdeteriorated +p13436 +I32 +sVheroines +p13437 +I32 +sVmercurial +p13438 +I32 +sVinordinately +p13439 +I32 +sVrepeating +p13440 +I32 +sVkyushu +p13441 +I4 +sVports +p13442 +I32 +sVexquisite +p13443 +I32 +sVtwo-year-old +p13444 +I32 +sVharm +p13445 +I32 +sVeveryone +p13446 +I46 +sVnon-consumer-related +p13447 +I32 +sVsteptoe +p13448 +I4 +sVrule-making +p13449 +I32 +sVmeaningless +p13450 +I32 +sVhouse +p13451 +I46 +sVenergy +p13452 +I46 +sVhard +p13453 +I36 +sVidea +p13454 +I32 +sVlincoln-mercury +p13455 +I8 +sVmacmillan +p13456 +I14 +sVengaging +p13457 +I32 +sVinsulation +p13458 +I32 +sVoil +p13459 +I110 +sVfurtherance +p13460 +I32 +sVobtains +p13461 +I32 +sVmillar +p13462 +I4 +sVseniority +p13463 +I32 +sVportland +p13464 +I14 +sVinterrelated +p13465 +I32 +sVmarshaling +p13466 +I32 +sVinsurance +p13467 +I44 +sVacquisitive +p13468 +I32 +sVsimplify +p13469 +I4 +sVflower +p13470 +I32 +sVfunding +p13471 +I36 +sVcuracao +p13472 +I4 +sVs.a. +p13473 +I4 +sVtenderness +p13474 +I32 +sVhenri +p13475 +I4 +sVex-spouse +p13476 +I4 +sVproductivity-related +p13477 +I32 +sVthroes +p13478 +I32 +sVprosecution +p13479 +I32 +sVprojected +p13480 +I32 +sVmettam +p13481 +I8 +sVreregulation +p13482 +I32 +sVacting +p13483 +I44 +sVlongtime +p13484 +I32 +sVashton-tate +p13485 +I6 +sVprint +p13486 +I36 +sVunleaded +p13487 +I34 +sVprimark +p13488 +I12 +sVevaluation +p13489 +I32 +sVthree-judge +p13490 +I32 +sVbistro +p13491 +I32 +sVdilson +p13492 +I4 +sVoriginality +p13493 +I32 +sVpathetic +p13494 +I32 +sVlawrence +p13495 +I14 +sVsquished +p13496 +I32 +sVcommits +p13497 +I32 +sVdealt +p13498 +I36 +sVpre-recorded +p13499 +I32 +sVbacker +p13500 +I32 +sVmmr +p13501 +I8 +sVpleasant +p13502 +I32 +sVdifficulty +p13503 +I32 +sVwell-schooled +p13504 +I32 +sVgiveaway +p13505 +I32 +sVdisposition +p13506 +I32 +sVeisenhardt +p13507 +I8 +sVbacked +p13508 +I32 +sVlaughable +p13509 +I32 +sVsreg +p13510 +I8 +sVbeginning +p13511 +I102 +sVsbo +p13512 +I12 +sVhauck +p13513 +I4 +sVplanted +p13514 +I32 +sVfeb +p13515 +I12 +sVbragged +p13516 +I32 +sVbenefits +p13517 +I36 +sVatco +p13518 +I8 +sVrecast +p13519 +I32 +sVbarbara +p13520 +I14 +sVcomputers +p13521 +I108 +sVdiversion +p13522 +I32 +sVancher +p13523 +I12 +sVacerbic +p13524 +I32 +sVconducted +p13525 +I32 +sVwalesa +p13526 +I4 +sVbrannock +p13527 +I12 +sVpilots +p13528 +I46 +sVaccusations +p13529 +I32 +sVwallboard +p13530 +I36 +sVafoul +p13531 +I32 +sVmemory-enhancing +p13532 +I32 +sVpleas +p13533 +I32 +sVfisher-price +p13534 +I4 +sVseat-of-the-pants +p13535 +I32 +sVboumedienne +p13536 +I4 +sVsomeday +p13537 +I32 +sVnondurable-goods +p13538 +I32 +sVmcgee +p13539 +I12 +sVnetted +p13540 +I32 +sVunlawfully +p13541 +I32 +sg99 +I12 +sVvalentine +p13542 +I12 +sVjuncture +p13543 +I4 +sVinstances +p13544 +I32 +sVgelbard +p13545 +I8 +sVaccountemps +p13546 +I2 +sVdone +p13547 +I32 +sVelevator +p13548 +I32 +sVcoppee +p13549 +I4 +sVclimbing +p13550 +I32 +sVmixing +p13551 +I4 +sVhafez +p13552 +I4 +sVwages +p13553 +I38 +sVsacrosanct +p13554 +I32 +sVivory-tower +p13555 +I2 +sVdc-9s +p13556 +I4 +sVpaine +p13557 +I4 +sVkimmelman +p13558 +I4 +sVjoint-venture +p13559 +I32 +sVtwenty +p13560 +I6 +sVcgp +p13561 +I4 +sVdickson +p13562 +I4 +sVrevive +p13563 +I36 +sVleast +p13564 +I32 +sVobligatory +p13565 +I32 +sVpaint +p13566 +I32 +sVregulation +p13567 +I38 +sVassumption +p13568 +I32 +sVstatement +p13569 +I32 +sVrates +p13570 +I38 +sVphysician-researcher +p13571 +I32 +sViran-arms +p13572 +I4 +sVlease +p13573 +I32 +sVpare +p13574 +I36 +sVsea-land +p13575 +I4 +sVmohawk +p13576 +I4 +sVfavorably +p13577 +I32 +sVstrife-torn +p13578 +I32 +sVtom +p13579 +I4 +sVpark +p13580 +I36 +sVbuffalo +p13581 +I4 +sVfree-fall +p13582 +I32 +sVdraped +p13583 +I2 +sVsizable +p13584 +I32 +sVfoskett +p13585 +I4 +sVpart +p13586 +I46 +sVfavorable +p13587 +I32 +sVa.s. +p13588 +I4 +sVdoctors +p13589 +I46 +sVfranchises +p13590 +I32 +sVgruesome +p13591 +I32 +sVone-stop +p13592 +I32 +sVbelieve +p13593 +I34 +sVswingers +p13594 +I4 +sVinterpretations +p13595 +I34 +sVspeyer +p13596 +I4 +sg69 +I44 +sVchevette +p13597 +I4 +sVhorizons +p13598 +I36 +sVgotten +p13599 +I32 +sVkapor +p13600 +I12 +sVmortgaged +p13601 +I32 +sVjesuit +p13602 +I4 +sVrecording +p13603 +I36 +sVcarted +p13604 +I32 +sVcontrary +p13605 +I32 +sVsupposed +p13606 +I32 +sVfranchiser +p13607 +I32 +sViraqis +p13608 +I4 +sVmessrs. +p13609 +I6 +sVtreated +p13610 +I32 +sVdeclare +p13611 +I32 +sVvacant +p13612 +I32 +sVaug. +p13613 +I14 +sVnominee +p13614 +I32 +sVditches +p13615 +I32 +sVplead +p13616 +I32 +sVphilippine +p13617 +I6 +sVturbo-fan +p13618 +I32 +sVhangout +p13619 +I32 +sVidles +p13620 +I8 +sVorleans-based +p13621 +I4 +sVthree-quarters +p13622 +I32 +sVunpaid +p13623 +I32 +sVfhp +p13624 +I4 +sVorders +p13625 +I36 +sVrollbacks +p13626 +I32 +sVwinnings +p13627 +I38 +sVmountain +p13628 +I36 +sVacid +p13629 +I32 +sVuni.a +p13630 +I12 +sVbuilt +p13631 +I96 +sVdancing +p13632 +I32 +sVassails +p13633 +I4 +sVgorbachev +p13634 +I14 +sVfoxborough +p13635 +I4 +sVk. +p13636 +I4 +sVmajority +p13637 +I32 +sVbuild +p13638 +I96 +sVdeepening +p13639 +I32 +sVloughman +p13640 +I4 +sVcameroon +p13641 +I4 +sVroyko +p13642 +I4 +sVprovince +p13643 +I32 +sVannihilation +p13644 +I32 +sVdunlop +p13645 +I8 +sVself-consciously +p13646 +I32 +sVdayton +p13647 +I12 +sVprogrammers +p13648 +I32 +sVcarolina +p13649 +I4 +sVchart +p13650 +I32 +sVmead +p13651 +I4 +sVdepths +p13652 +I32 +sVmost +p13653 +I46 +sVcharm +p13654 +I32 +sVsignificant +p13655 +I32 +sVe-estimated +p13656 +I64 +sVservices +p13657 +I44 +sVservicer +p13658 +I32 +sVextremely +p13659 +I32 +sVcompaq +p13660 +I14 +sVbendix/martin +p13661 +I6 +sVkb +p13662 +I4 +sVorlov +p13663 +I12 +sVunsealed +p13664 +I32 +sVmediation +p13665 +I32 +sVmoney-supply +p13666 +I32 +sVted +p13667 +I14 +sVgarrasi +p13668 +I4 +sVmammoth +p13669 +I36 +sVchester +p13670 +I4 +sVweigh +p13671 +I32 +sVparody +p13672 +I32 +sVnobility +p13673 +I32 +sVjoining +p13674 +I32 +sVsector +p13675 +I36 +sVthomas +p13676 +I14 +sVmarketed +p13677 +I32 +sVparticularly +p13678 +I34 +sVrebels +p13679 +I36 +sVsparrow +p13680 +I4 +sVobligations +p13681 +I32 +sVcommissions +p13682 +I34 +sVms-dos +p13683 +I4 +sVscattered +p13684 +I32 +sVheadlined +p13685 +I32 +sVbearish +p13686 +I32 +sVcouncillors +p13687 +I32 +sVfink +p13688 +I12 +sVoutdoor +p13689 +I32 +sVbusinesses +p13690 +I106 +sVlonger-term +p13691 +I32 +sVcarefully +p13692 +I32 +sVsteamed +p13693 +I32 +sVheadlines +p13694 +I34 +sVcolline +p13695 +I4 +sVfine +p13696 +I38 +sVnetworks +p13697 +I32 +sVfrisch +p13698 +I12 +sVcell +p13699 +I32 +sVgiant +p13700 +I32 +sVabandoning +p13701 +I32 +sVdividing +p13702 +I32 +sVmerger +p13703 +I100 +sVforeseen +p13704 +I32 +sVruin +p13705 +I32 +sVdistributed +p13706 +I32 +sVkrock +p13707 +I8 +sVunhappy +p13708 +I40 +sVsprees +p13709 +I32 +sVself-deprecating +p13710 +I32 +sVgenerators +p13711 +I36 +sVconvoluted +p13712 +I32 +sVoverride +p13713 +I32 +sVpoles +p13714 +I36 +sVdistributes +p13715 +I32 +sVohio-based +p13716 +I4 +sVmerged +p13717 +I32 +sVboulder +p13718 +I4 +sVsaudia +p13719 +I4 +sVintractable +p13720 +I32 +sVprowess +p13721 +I32 +sVunplaced +p13722 +I32 +sVnotation +p13723 +I32 +sVpermission +p13724 +I32 +sVextra-curricular +p13725 +I32 +sVexpress +p13726 +I36 +sVcheaper +p13727 +I36 +sVmid-1950s +p13728 +I32 +sVcourage +p13729 +I32 +sVbatter +p13730 +I8 +sVbreast +p13731 +I32 +sVtheft +p13732 +I32 +sVlufkin +p13733 +I4 +sVmchenry +p13734 +I8 +sVkeran +p13735 +I4 +sVsafeguards +p13736 +I32 +sVpellet +p13737 +I32 +sVpk +p13738 +I4 +sVmerchandise +p13739 +I96 +sVsilo +p13740 +I4 +sVlebaron +p13741 +I4 +sVsituated +p13742 +I32 +sVresolve +p13743 +I100 +sVfrankly +p13744 +I32 +sVtransitional +p13745 +I32 +sVenclaves +p13746 +I32 +sVodor +p13747 +I32 +sVdense-pac +p13748 +I14 +sVtestifying +p13749 +I2 +sVdante +p13750 +I4 +sVdoubled +p13751 +I36 +sVsix-month +p13752 +I32 +sVaustralasia +p13753 +I4 +sVcommon +p13754 +I110 +sVwitches +p13755 +I32 +sVnow-legendary +p13756 +I32 +sVgospel +p13757 +I32 +sVcrude-oil +p13758 +I32 +sVrestaurants +p13759 +I32 +sVberyl +p13760 +I6 +sVnonrecurring +p13761 +I32 +sVcynical +p13762 +I32 +sVintemperate +p13763 +I32 +sVopposing +p13764 +I32 +sVwork-places +p13765 +I32 +sVfeds +p13766 +I32 +sVtended +p13767 +I32 +sVscenes +p13768 +I32 +sVunsatisfactory +p13769 +I32 +sVlion +p13770 +I32 +sVindividual +p13771 +I32 +sVtackles +p13772 +I32 +sVsurrendered +p13773 +I32 +sVtender +p13774 +I44 +sVforthcoming +p13775 +I32 +sVsung +p13776 +I32 +sVflavor +p13777 +I32 +sVfeared +p13778 +I32 +sVrepairs +p13779 +I32 +sVatuwi +p13780 +I4 +sVanti-germ +p13781 +I36 +sVhalved +p13782 +I32 +sVvisiting +p13783 +I32 +sVplease +p13784 +I32 +sVunderline +p13785 +I32 +sVsandbagged +p13786 +I32 +sVfans +p13787 +I34 +sVsmallest +p13788 +I32 +sVcrisis +p13789 +I36 +sVenvelopes +p13790 +I32 +sVtoledo +p13791 +I4 +sVburned +p13792 +I32 +sVchampagne +p13793 +I32 +sVsupersedes +p13794 +I32 +sVimsi +p13795 +I4 +sVmeal +p13796 +I32 +sVmontfrooy +p13797 +I4 +sVblue-ribbon +p13798 +I32 +sVwilmette +p13799 +I4 +sVhistorical +p13800 +I32 +sVpresumption +p13801 +I32 +sVdeemed +p13802 +I32 +sVdividends +p13803 +I44 +sVnashville +p13804 +I14 +sVanalogues +p13805 +I32 +sVhomeowner-mortgage +p13806 +I32 +sVaircraft +p13807 +I100 +sVstinginess +p13808 +I32 +sVpepsi +p13809 +I4 +sVdipped +p13810 +I32 +sVirreverence +p13811 +I32 +sVdrawings +p13812 +I32 +sVmarilyn +p13813 +I6 +sVintimidates +p13814 +I32 +sVhalf-hour +p13815 +I32 +sVfull-time +p13816 +I32 +sVecuador +p13817 +I4 +sVchastening +p13818 +I32 +sVreverse +p13819 +I40 +sVjourneyed +p13820 +I32 +sVappropriations +p13821 +I4 +sVpowers +p13822 +I32 +sVannual +p13823 +I32 +sVquell +p13824 +I32 +sVforeign +p13825 +I46 +sVwabc-tv +p13826 +I4 +sVerria +p13827 +I4 +sVmean +p13828 +I32 +sVundershoot +p13829 +I32 +sVbaltimore +p13830 +I12 +sVinouye +p13831 +I4 +sVcarberry +p13832 +I4 +sVharbert +p13833 +I4 +sVdanced +p13834 +I32 +sVpoint +p13835 +I36 +sVsimple +p13836 +I96 +sVprosecuting +p13837 +I32 +sVrecycling +p13838 +I32 +sVravages +p13839 +I32 +sVjacqmin +p13840 +I8 +sVunderwrote +p13841 +I32 +sVnewborn +p13842 +I32 +sVgypsy +p13843 +I32 +sVdances +p13844 +I32 +sVtennessee +p13845 +I4 +sVsimply +p13846 +I32 +sValumnus +p13847 +I32 +sVunsuccessful +p13848 +I32 +sVpoink +p13849 +I4 +sVasserted +p13850 +I32 +sVvolunteered +p13851 +I32 +sVthroughout +p13852 +I32 +sVexpensive +p13853 +I32 +sVak-47 +p13854 +I4 +sVplatinum +p13855 +I34 +sVensures +p13856 +I32 +sVn.v. +p13857 +I14 +sVraise +p13858 +I100 +sVdixieland +p13859 +I4 +sVfrets +p13860 +I32 +sVcreate +p13861 +I32 +sVlife-of-contract +p13862 +I32 +sVstricter +p13863 +I32 +sVscreened +p13864 +I32 +sVrivals +p13865 +I36 +sVsecret +p13866 +I44 +sVdropping +p13867 +I32 +sVamnesia +p13868 +I32 +sVireland +p13869 +I14 +sVomniscient +p13870 +I32 +sVdoodles +p13871 +I4 +sVmeeting +p13872 +I36 +sVboard-room +p13873 +I32 +sVkathy +p13874 +I4 +sVvans +p13875 +I36 +sVcorrigan +p13876 +I4 +sVgaz +p13877 +I4 +sVgay +p13878 +I32 +sVchatted +p13879 +I32 +sVoverthrow +p13880 +I32 +sVgas +p13881 +I36 +sVgap +p13882 +I36 +sVrepertoire +p13883 +I32 +sVnon-russian +p13884 +I32 +sVunderstand +p13885 +I32 +sVmotion-picture +p13886 +I32 +sVrealms +p13887 +I32 +sVprices +p13888 +I102 +sVfleecer +p13889 +I4 +sVcaisse +p13890 +I6 +sVvann +p13891 +I4 +sVpierce +p13892 +I44 +sVpolitician +p13893 +I32 +sVsurvivor +p13894 +I32 +sVgrains +p13895 +I2 +sVraw +p13896 +I32 +sVsolid +p13897 +I32 +sVforeshadowed +p13898 +I32 +sVbill +p13899 +I44 +sVtolerate +p13900 +I36 +sVelections +p13901 +I32 +sVkodak +p13902 +I14 +sVhopped +p13903 +I32 +sVdeferred +p13904 +I32 +sVreplaced +p13905 +I32 +sVrenominations +p13906 +I8 +sVdenominations +p13907 +I32 +sVfernley +p13908 +I4 +sVirancontra +p13909 +I4 +sVlingo +p13910 +I32 +sVsolis +p13911 +I4 +sVaegean +p13912 +I4 +sVchazov +p13913 +I4 +sVshoddy +p13914 +I32 +sVportugal +p13915 +I4 +sVcentury +p13916 +I44 +sVcents +p13917 +I32 +sVsteelmaking +p13918 +I96 +sVdrawbacks +p13919 +I32 +sVstarving +p13920 +I32 +sVencountered +p13921 +I32 +sVarms-sales +p13922 +I32 +sVitself +p13923 +I36 +sVtelecasts +p13924 +I32 +sVhypertension +p13925 +I32 +sVstoves +p13926 +I32 +sVlimit +p13927 +I36 +sVokla. +p13928 +I4 +sVmonroe +p13929 +I4 +sVkin-deep +p13930 +I32 +sVethylene +p13931 +I32 +sVunaffected +p13932 +I32 +sVitaly +p13933 +I4 +sVwould-be +p13934 +I32 +sVmeierfeld +p13935 +I8 +sVogil +p13936 +I4 +sVbutcher +p13937 +I36 +sVtextile +p13938 +I32 +sVdepartures +p13939 +I32 +sVmuscle +p13940 +I32 +sVtorto +p13941 +I4 +sVcopying +p13942 +I32 +sVproved +p13943 +I32 +sVray +p13944 +I4 +sVhorton +p13945 +I4 +sVone-hour +p13946 +I32 +sVsapiens +p13947 +I32 +sVcurrencies +p13948 +I40 +sVkuan +p13949 +I4 +sVoversees +p13950 +I32 +sVpraising +p13951 +I32 +sVreversion +p13952 +I32 +sVappreciably +p13953 +I32 +sVpargas +p13954 +I4 +sVexpressiveness +p13955 +I32 +sVkeyt +p13956 +I4 +sVretrenchment +p13957 +I32 +sVmoment +p13958 +I32 +sVpurpose +p13959 +I36 +sVaggregate +p13960 +I32 +sVmalvern +p13961 +I4 +sVdart +p13962 +I36 +sVtimid +p13963 +I32 +sVcelebratory +p13964 +I32 +sVpredecessors +p13965 +I32 +sVchieftains +p13966 +I32 +sVsumo +p13967 +I4 +sVtravers +p13968 +I8 +sVtask +p13969 +I40 +sVfinesse +p13970 +I32 +sVmollusks +p13971 +I32 +sVh.m. +p13972 +I4 +sVpercentages +p13973 +I32 +sVurgency +p13974 +I40 +sVbqr +p13975 +I8 +sVforfeited +p13976 +I32 +sVredesigned +p13977 +I32 +sVspent +p13978 +I32 +sVwaldman +p13979 +I4 +sVmorrow +p13980 +I4 +sVcornball +p13981 +I32 +sVunannounced +p13982 +I32 +sVnordic +p13983 +I4 +sVwithdraw +p13984 +I32 +sVrate-of-return +p13985 +I32 +sVswiss +p13986 +I14 +sVamps +p13987 +I4 +sVpfennig +p13988 +I32 +sVspend +p13989 +I32 +sVprevention +p13990 +I36 +sVtricone +p13991 +I32 +sVldc +p13992 +I4 +sVone-year +p13993 +I32 +sVshilling +p13994 +I12 +sVtyce +p13995 +I12 +sVfeverishly +p13996 +I32 +sVleaking +p13997 +I36 +sVbudgeteers +p13998 +I32 +sVvacuum +p13999 +I32 +sVpatent-infringement +p14000 +I32 +sVexaminations +p14001 +I32 +sVisolated +p14002 +I36 +sVfundamentalists +p14003 +I32 +sVshape +p14004 +I32 +sVopenly +p14005 +I32 +sVatomic +p14006 +I36 +sVunesco +p14007 +I4 +sVforesee +p14008 +I32 +sValternative +p14009 +I32 +sVschreyer +p14010 +I8 +sVchoreographers +p14011 +I32 +sVrailroad +p14012 +I36 +sVtimber +p14013 +I32 +sVdiscipline +p14014 +I32 +sVfriendship +p14015 +I32 +sVimpetus +p14016 +I32 +sVcut +p14017 +I100 +sVairspace +p14018 +I32 +sVcup +p14019 +I36 +sVdiversions +p14020 +I4 +sVhated +p14021 +I32 +sVottawa-based +p14022 +I4 +sVfalsity +p14023 +I32 +sVansberry +p14024 +I4 +sVhome-buying +p14025 +I32 +sVsnag +p14026 +I32 +sVsource +p14027 +I42 +sVcue +p14028 +I32 +sVrgc +p14029 +I8 +sVdeliberately +p14030 +I32 +sVkastenmeier +p14031 +I12 +sVsnap +p14032 +I32 +sVdesk +p14033 +I32 +sVimpoverished +p14034 +I32 +sVadministrative +p14035 +I32 +sVexcited +p14036 +I40 +sVsolicitations +p14037 +I32 +sVual-hertz-hilton +p14038 +I4 +sVridiculously +p14039 +I32 +sVsaxton +p14040 +I12 +sVsquawk +p14041 +I32 +sVhci +p14042 +I8 +sVco-manager +p14043 +I32 +sVmalfunctions +p14044 +I32 +sVmicrocomputers +p14045 +I32 +sVbig +p14046 +I46 +sVrebound +p14047 +I32 +sVhatch +p14048 +I12 +sVco-managed +p14049 +I32 +sVmatters +p14050 +I36 +sVredeem +p14051 +I36 +sVlevesque +p14052 +I2 +sVforeigners +p14053 +I38 +sVinititiated +p14054 +I32 +sVdisrupted +p14055 +I32 +sVbit +p14056 +I32 +sVbis +p14057 +I4 +sVburdick +p14058 +I12 +sVknock +p14059 +I32 +sVtonalities +p14060 +I32 +sVsakharov +p14061 +I4 +sVfollows +p14062 +I40 +sVlacking +p14063 +I32 +sVdisks +p14064 +I32 +sVaddressed +p14065 +I32 +sVimasco +p14066 +I4 +sVcomsat +p14067 +I8 +sVindication +p14068 +I32 +sVdepositary +p14069 +I36 +sVjolted +p14070 +I32 +sVfoolish +p14071 +I32 +sVgardening +p14072 +I32 +sVoften +p14073 +I46 +sVabsolutely +p14074 +I32 +sVobliged +p14075 +I32 +sVcheerleader +p14076 +I32 +sVadvantages +p14077 +I32 +sVback +p14078 +I46 +sVbach +p14079 +I4 +sVextremist +p14080 +I32 +sVmartial +p14081 +I32 +sVstrongest +p14082 +I32 +sVpricing +p14083 +I36 +sVmirror +p14084 +I36 +sVppos +p14085 +I4 +sVlightning +p14086 +I32 +sVnicaragua +p14087 +I6 +sVourselves +p14088 +I32 +sVbrent +p14089 +I6 +sVpronounced +p14090 +I32 +sVscale +p14091 +I32 +sVjewelry +p14092 +I32 +sVcontacts +p14093 +I32 +sVpet +p14094 +I36 +sVaffects +p14095 +I32 +sVdecision +p14096 +I100 +sVpep +p14097 +I40 +sVintegration +p14098 +I32 +sVper +p14099 +I32 +sVtullock +p14100 +I12 +sVnewark +p14101 +I12 +sVvanzetti +p14102 +I4 +sVpen +p14103 +I32 +sVswaziland +p14104 +I4 +sVsneakers +p14105 +I32 +sVeliminate +p14106 +I32 +sVsuperiority +p14107 +I96 +sVjaded +p14108 +I32 +sVpelf +p14109 +I32 +sVcommentator +p14110 +I32 +sVinvade +p14111 +I32 +sVnose +p14112 +I32 +sVevaporating +p14113 +I32 +sVantitrust-law +p14114 +I32 +sVcassoni +p14115 +I4 +sVmontreal-based +p14116 +I4 +sVparibas +p14117 +I14 +sVcontinuing +p14118 +I34 +sVcostumes +p14119 +I32 +sVblockbusters +p14120 +I32 +sVbreeders +p14121 +I32 +sVrestrictive +p14122 +I32 +sVrearranging +p14123 +I32 +sVpiasio +p14124 +I4 +sVnonbank +p14125 +I32 +sVhostages +p14126 +I96 +sVlottery +p14127 +I36 +sVcarbide +p14128 +I4 +sVanti-competitive +p14129 +I32 +sVgoods +p14130 +I100 +sVoldsmobile +p14131 +I8 +sVpepsico +p14132 +I14 +sVpfizer +p14133 +I14 +sVcafe +p14134 +I36 +sVunsold +p14135 +I32 +sVmrs. +p14136 +I14 +sVkidneys +p14137 +I32 +sVdrama +p14138 +I32 +sVounce +p14139 +I32 +sVbeans +p14140 +I32 +sVstockholdings +p14141 +I32 +sVgreek-turkish +p14142 +I4 +sVhyped +p14143 +I32 +sVnuys +p14144 +I4 +sVtenants +p14145 +I32 +sVpollution +p14146 +I36 +sVtriton +p14147 +I14 +sVfootlick +p14148 +I4 +sVnsm +p14149 +I4 +sVlessor +p14150 +I32 +sVmccaw +p14151 +I4 +sValiens +p14152 +I36 +sVnsc +p14153 +I12 +sVretailer +p14154 +I96 +sVseating +p14155 +I32 +sVinvading +p14156 +I32 +sVframed +p14157 +I32 +sVexercises +p14158 +I32 +sVobscenely +p14159 +I32 +sVsuskind +p14160 +I12 +sVsteven +p14161 +I6 +sVorigins +p14162 +I32 +sVproportional +p14163 +I32 +sVlesson +p14164 +I32 +sVdownhill +p14165 +I32 +sVmartinet +p14166 +I4 +sVbankruptcy +p14167 +I44 +sVcalming +p14168 +I32 +sVjockey +p14169 +I36 +sVpares +p14170 +I32 +sVsegregated +p14171 +I32 +sVmultilayer +p14172 +I32 +sVconduits +p14173 +I32 +sVdoll +p14174 +I4 +sVcovington +p14175 +I4 +sVlovett +p14176 +I8 +sVintermediaries +p14177 +I32 +sVjapan-style +p14178 +I4 +sVpharmaceuticals +p14179 +I44 +sVpessimistic +p14180 +I36 +sVpared +p14181 +I4 +sVinfected +p14182 +I32 +sVmanifested +p14183 +I32 +sVkagan +p14184 +I4 +sVforward +p14185 +I32 +sVkeating +p14186 +I12 +sVdalkon +p14187 +I4 +sVtastiest +p14188 +I32 +sVtitan +p14189 +I4 +sVnewsman +p14190 +I32 +sVinvite +p14191 +I32 +sVboyd +p14192 +I12 +sVnetwork-news +p14193 +I32 +sVbyrne +p14194 +I12 +sVadjusting +p14195 +I32 +sVmurphy +p14196 +I12 +sVimmigration +p14197 +I36 +sVslacks +p14198 +I32 +sVhoped +p14199 +I36 +sVboys +p14200 +I32 +sVsideshow +p14201 +I32 +sVtwo-part +p14202 +I32 +sVshowman +p14203 +I32 +sVmerger-advisory +p14204 +I32 +sVhopes +p14205 +I36 +sVsubsidiary +p14206 +I100 +sVjoked +p14207 +I32 +sVanglo-dutch +p14208 +I4 +sVdirected +p14209 +I32 +sVjonathan +p14210 +I4 +sVrejection +p14211 +I32 +sVbartels +p14212 +I4 +sVadair +p14213 +I12 +sVrequesting +p14214 +I32 +sVirish-american +p14215 +I4 +sVfather +p14216 +I36 +sVclips +p14217 +I32 +sVexploration +p14218 +I36 +sVreflects +p14219 +I32 +sVplanes +p14220 +I32 +sVviacom +p14221 +I14 +sVautonomous +p14222 +I32 +sVbelgian +p14223 +I4 +sVgroove +p14224 +I32 +sVskittish +p14225 +I32 +sVap +p14226 +I4 +sVpossession +p14227 +I32 +sVdevastating +p14228 +I32 +sVconstant +p14229 +I96 +sVpuget +p14230 +I12 +sVbureaucracy +p14231 +I32 +sVflow +p14232 +I36 +sVswenson +p14233 +I8 +sVmckinnon +p14234 +I12 +sVibus +p14235 +I4 +sVdeprive +p14236 +I32 +sVreinstated +p14237 +I32 +sVengineering +p14238 +I100 +sVcure +p14239 +I32 +sVcurb +p14240 +I36 +sVomens +p14241 +I32 +sVdonated +p14242 +I32 +sVfabricating +p14243 +I32 +sVorganizational +p14244 +I32 +sVlaszlo +p14245 +I4 +sVdenying +p14246 +I32 +sVbracket +p14247 +I32 +sVbrethren +p14248 +I32 +sVheinemann +p14249 +I4 +sVstreamlining +p14250 +I32 +sVexcused +p14251 +I32 +sVjoan +p14252 +I6 +sVpoppea +p14253 +I12 +sVcomposing +p14254 +I32 +sVdimmed +p14255 +I32 +sVplugged +p14256 +I32 +sVexcuses +p14257 +I32 +sVreputation +p14258 +I32 +sVellen +p14259 +I6 +sVjapanese-made +p14260 +I4 +sVstatutes +p14261 +I32 +sVlinkup +p14262 +I6 +sVcash-and-stock +p14263 +I32 +sVgottesman +p14264 +I12 +sVexplaining +p14265 +I32 +sVnon-steel +p14266 +I32 +sVmusician +p14267 +I4 +sVforeign-controlled +p14268 +I32 +sVintensifies +p14269 +I4 +sVlend +p14270 +I32 +sVbensalem +p14271 +I4 +sVbenchmark +p14272 +I32 +sVaggregates +p14273 +I32 +sVafter-tax +p14274 +I32 +sVadmen +p14275 +I34 +sVamended +p14276 +I32 +sVprepared +p14277 +I32 +sVlens +p14278 +I32 +sVintensified +p14279 +I32 +sVabington +p14280 +I4 +sVbrockman +p14281 +I4 +sVarmed +p14282 +I36 +sVlent +p14283 +I32 +sVprepares +p14284 +I32 +sVhanson +p14285 +I8 +sVdepicting +p14286 +I32 +sVcharming +p14287 +I36 +sVdesert +p14288 +I36 +sVrallied +p14289 +I32 +sVscouting +p14290 +I32 +sVmassoud +p14291 +I4 +sVimplies +p14292 +I32 +sVirresistible +p14293 +I32 +sVcooker +p14294 +I32 +sVdenver-based +p14295 +I4 +sVvehicles +p14296 +I36 +sVwards +p14297 +I32 +sVbankers +p14298 +I102 +sVappalling +p14299 +I32 +sVimplied +p14300 +I32 +sVsahara +p14301 +I4 +sVlibraries +p14302 +I32 +sVrallies +p14303 +I32 +sVsallie +p14304 +I4 +sVfailures +p14305 +I36 +sVcapital-markets +p14306 +I32 +sVnoon +p14307 +I32 +sVinitiating +p14308 +I32 +sVvalves +p14309 +I32 +sVrenting +p14310 +I32 +sVreturn-on-investment +p14311 +I32 +sVdebenture +p14312 +I32 +sVmildest +p14313 +I32 +sVparodies +p14314 +I32 +sVrestraining +p14315 +I34 +sVhint +p14316 +I32 +sVcynthia +p14317 +I4 +sVwordperfect +p14318 +I4 +sVfront-page +p14319 +I32 +sVwounds +p14320 +I32 +sVj.c. +p14321 +I6 +sVintricate +p14322 +I32 +sVvicious +p14323 +I32 +sVbankshares +p14324 +I4 +sVcompany-wide +p14325 +I32 +sVglugging +p14326 +I32 +sVtestifies +p14327 +I32 +sVbreached +p14328 +I32 +sVcontacted +p14329 +I32 +sVgood-looking +p14330 +I32 +sVappointee +p14331 +I32 +sVlasers +p14332 +I32 +sVinsystec +p14333 +I4 +sVenjoined +p14334 +I32 +sVmetal-futures +p14335 +I32 +sVrudder +p14336 +I32 +sVsaga +p14337 +I4 +sVglaser +p14338 +I4 +sVbreaches +p14339 +I32 +sVrecord-breaking +p14340 +I32 +sVhelps +p14341 +I32 +sVcroons +p14342 +I32 +sVquarterly +p14343 +I46 +sVexit +p14344 +I36 +sVmaryland +p14345 +I4 +sVlilly +p14346 +I4 +sVbottomed +p14347 +I32 +sVingredient +p14348 +I32 +sVnervousness +p14349 +I34 +sVchagrined +p14350 +I34 +sVrandom +p14351 +I36 +sVpresently +p14352 +I32 +sVundeservedness +p14353 +I32 +sVautomotive +p14354 +I32 +sVperversely +p14355 +I32 +sVdishwater-dingy +p14356 +I32 +sVimmune-deficiency +p14357 +I32 +sVcrosses +p14358 +I32 +sVputting +p14359 +I32 +sVrover +p14360 +I6 +sVddb +p14361 +I6 +sVenrollments +p14362 +I32 +sVsubservient +p14363 +I32 +sVclemens +p14364 +I8 +sVmutual-fund +p14365 +I40 +sVauel +p14366 +I4 +sVarrange +p14367 +I32 +sVhiccup +p14368 +I32 +sVseverely +p14369 +I32 +sVstaffs +p14370 +I32 +sVrespectful +p14371 +I2 +sVpointe +p14372 +I32 +sVhiccuped +p14373 +I32 +sVknight +p14374 +I12 +sVjoel +p14375 +I6 +sVshock +p14376 +I32 +sVintravenous +p14377 +I36 +sVmarried +p14378 +I36 +sVkit +p14379 +I32 +sVmeditation +p14380 +I32 +sVcat-and-mouse +p14381 +I32 +sVmobilize +p14382 +I4 +sVbizarre +p14383 +I32 +sVrefer +p14384 +I32 +sVoptics +p14385 +I32 +sVconvocations +p14386 +I32 +sVovercharging +p14387 +I32 +sVdimes +p14388 +I32 +sVredd +p14389 +I12 +sVunsuccessfully +p14390 +I32 +sVhardening +p14391 +I32 +sVeducators +p14392 +I32 +sVbleeding +p14393 +I32 +sVcrow +p14394 +I36 +sVuncomfortably +p14395 +I32 +sVsplintered +p14396 +I32 +sVdirect-sales +p14397 +I32 +sVsmall-minded +p14398 +I32 +sVrepurchases +p14399 +I32 +sVrivers +p14400 +I4 +sVone-tenth +p14401 +I32 +sVuncomfortable +p14402 +I32 +sVsubstituting +p14403 +I32 +sVreplicated +p14404 +I32 +sVcopenhagen +p14405 +I8 +sVcarlo +p14406 +I4 +sVlower-priced +p14407 +I32 +sVdepression +p14408 +I4 +sVcontingent +p14409 +I32 +sVgravely +p14410 +I44 +sVedison +p14411 +I4 +sVolof +p14412 +I4 +sVgood-faith +p14413 +I32 +sVchicago +p14414 +I14 +sVgiving +p14415 +I40 +sVfalcons +p14416 +I32 +sVpipes +p14417 +I32 +sVpiper +p14418 +I4 +sVfat +p14419 +I32 +sVrescheduling +p14420 +I32 +sVaccess +p14421 +I100 +sVanywhere +p14422 +I32 +sVpleading +p14423 +I32 +sVretains +p14424 +I32 +sVdeveloped-country +p14425 +I32 +sVexercise +p14426 +I32 +sVfalcone +p14427 +I4 +sVbody +p14428 +I32 +sVmisdeeds +p14429 +I32 +sVmcmurray +p14430 +I4 +sVexchange +p14431 +I102 +sVapologetic +p14432 +I32 +sVexecutor +p14433 +I32 +sVsins +p14434 +I32 +sVnonexistent +p14435 +I32 +sVbroker +p14436 +I40 +sVgrease +p14437 +I32 +sVpeggy +p14438 +I4 +sVbachelor +p14439 +I32 +sVobjects +p14440 +I32 +sVsink +p14441 +I32 +sVothers +p14442 +I46 +sVdissuade +p14443 +I32 +sVluis +p14444 +I4 +sVsafer +p14445 +I32 +sVsine +p14446 +I32 +sVbode +p14447 +I32 +sVimplicit +p14448 +I32 +sVextreme +p14449 +I32 +sVnotably +p14450 +I32 +sVremark +p14451 +I32 +sVtalent +p14452 +I32 +sVweinstein +p14453 +I12 +sVmedically +p14454 +I36 +sVconfides +p14455 +I32 +sVbiographies +p14456 +I32 +sValaska +p14457 +I6 +sVcontradiction +p14458 +I32 +sVminy +p14459 +I8 +sVleadership +p14460 +I32 +sVweekday +p14461 +I32 +sVcalifornia +p14462 +I12 +sVprincipally +p14463 +I32 +sVimplement +p14464 +I32 +sVhonor +p14465 +I34 +sVentregrowth +p14466 +I6 +sVcourting +p14467 +I32 +sVcomposed +p14468 +I32 +sVfourth-quarter +p14469 +I110 +sVnamed +p14470 +I102 +sVdecentralized +p14471 +I32 +sVavionics +p14472 +I32 +sVbeijing +p14473 +I4 +sVlight-duty +p14474 +I32 +sVpresidents +p14475 +I100 +sVmanna +p14476 +I32 +sVmanne +p14477 +I4 +sVminnesota +p14478 +I14 +sVextravagance +p14479 +I32 +sVfederal-assisted +p14480 +I32 +sVformulates +p14481 +I32 +sVnames +p14482 +I44 +sVcomposer +p14483 +I32 +sVoval +p14484 +I32 +sVscandal +p14485 +I44 +sVresolutions +p14486 +I32 +sVchilly +p14487 +I32 +sVgateway +p14488 +I4 +sVlime +p14489 +I36 +sVattendants +p14490 +I32 +sVchb +p14491 +I8 +sVshowboat +p14492 +I14 +sVgutsy +p14493 +I32 +sVstudiously +p14494 +I32 +sVbreakup +p14495 +I36 +sVproviders +p14496 +I32 +sVchl +p14497 +I4 +sVchm +p14498 +I4 +sVkanawha +p14499 +I4 +sVnobel +p14500 +I4 +sVcalculation +p14501 +I32 +sVlittle-known +p14502 +I32 +sVchu +p14503 +I8 +sVreciprocity +p14504 +I32 +sVyear-ago +p14505 +I46 +sVweizhou +p14506 +I4 +sVthemselves +p14507 +I32 +sVdefendant +p14508 +I32 +sVdeepest +p14509 +I32 +sVprized +p14510 +I8 +sVassailed +p14511 +I32 +sVvenal +p14512 +I32 +sVforays +p14513 +I32 +sVbillet +p14514 +I4 +sVcapitalizing +p14515 +I32 +sVplanting +p14516 +I32 +sVpayne +p14517 +I12 +sVemigration +p14518 +I32 +sVtrain +p14519 +I32 +sVprizes +p14520 +I4 +sVashamed +p14521 +I32 +sVmarketings +p14522 +I32 +sVarranging +p14523 +I32 +sVncnb +p14524 +I4 +sVbilled +p14525 +I32 +sViii +p14526 +I4 +sVhints +p14527 +I32 +sVswooping +p14528 +I32 +sVaccount +p14529 +I36 +sVfooling +p14530 +I32 +sVautomatic-teller +p14531 +I32 +sVf +p14532 +I12 +sVtunnel +p14533 +I32 +sVgabriel +p14534 +I4 +sVstrides +p14535 +I32 +sVhopkins +p14536 +I12 +sVblue-collar +p14537 +I32 +sVerwin +p14538 +I2 +sVlipman +p14539 +I4 +sVmaghdousheh +p14540 +I4 +sVobvious +p14541 +I32 +sVsedona +p14542 +I4 +sVindignities +p14543 +I32 +sVdimona +p14544 +I4 +sVclosing +p14545 +I32 +sVprettiness +p14546 +I32 +sVfetch +p14547 +I96 +sVdecoupled +p14548 +I32 +sVunsuccesful +p14549 +I32 +sVanti-black +p14550 +I32 +sVmaxsaver +p14551 +I6 +sVstate-court +p14552 +I32 +sVviolence +p14553 +I36 +sVreserved +p14554 +I32 +sVjob-conscious +p14555 +I32 +sVinvoices +p14556 +I32 +sVdaiwa +p14557 +I4 +sVairports +p14558 +I32 +sVisbell +p14559 +I4 +sVeffectively +p14560 +I32 +sVdisagreeing +p14561 +I32 +sVreserves +p14562 +I38 +sVcatastrophe +p14563 +I32 +sVemploys +p14564 +I32 +sVdataquest +p14565 +I4 +sVbones +p14566 +I36 +sVpliable +p14567 +I32 +sVatlanta-based +p14568 +I4 +sVorbanco +p14569 +I14 +sVimpressed +p14570 +I32 +sVcontempt +p14571 +I32 +sVnative +p14572 +I32 +sVmaturities +p14573 +I32 +sVandersen +p14574 +I4 +sVvaried +p14575 +I32 +sVdemocracy +p14576 +I36 +sVnoises +p14577 +I32 +sVgci +p14578 +I4 +sVmonday-night +p14579 +I4 +sVholds +p14580 +I104 +sVhampshire +p14581 +I4 +sVregions +p14582 +I40 +sVasbestos +p14583 +I38 +sVresponsibilities +p14584 +I96 +sVwinners +p14585 +I40 +sVbegetters +p14586 +I32 +sVforest +p14587 +I36 +sVfurnace +p14588 +I32 +sVstock +p14589 +I110 +sVprofile +p14590 +I32 +sVbuildings +p14591 +I36 +sVassures +p14592 +I32 +sVroland +p14593 +I4 +sVhesitate +p14594 +I32 +sVspecifications +p14595 +I32 +sVwaters +p14596 +I32 +sVphilosophy +p14597 +I32 +sVleukemia +p14598 +I4 +sVcollection +p14599 +I36 +sVbothered +p14600 +I32 +sVleisure +p14601 +I40 +sVadvocates +p14602 +I34 +sVfrankfurt-am-main +p14603 +I4 +sVfray +p14604 +I32 +sVusair +p14605 +I14 +sVambiguous +p14606 +I32 +sVbombers +p14607 +I32 +sVchasing +p14608 +I4 +sVconfiscatory +p14609 +I32 +sVguilder +p14610 +I32 +sVx-there +p14611 +I64 +sVsit +p14612 +I32 +sVlines +p14613 +I44 +sVshutting +p14614 +I36 +sVoff-peak +p14615 +I32 +sVchief +p14616 +I46 +sVlaurie +p14617 +I4 +sVgundy +p14618 +I4 +sVtamper +p14619 +I32 +sVfurious +p14620 +I32 +sVsubsequently +p14621 +I34 +sVstock-trading +p14622 +I32 +sVtarget-company +p14623 +I32 +sVcease-fire +p14624 +I32 +sVcheckup +p14625 +I32 +sVadjust +p14626 +I32 +sVlurked +p14627 +I32 +sVinstitutional +p14628 +I102 +sVever-changing +p14629 +I32 +sVin-house +p14630 +I32 +sVwedding +p14631 +I32 +sVcautions +p14632 +I32 +sVmeter +p14633 +I32 +sVsymbols +p14634 +I32 +sVeast-west +p14635 +I36 +sVrelaxation +p14636 +I32 +sVlingus +p14637 +I4 +sVdeath-penalty +p14638 +I32 +sVsubpoenaed +p14639 +I32 +sVagricultural +p14640 +I98 +sVfortunate +p14641 +I32 +sVnasty +p14642 +I34 +sVbunch +p14643 +I32 +sVindustries +p14644 +I108 +sVbridges +p14645 +I4 +sVnegotiated +p14646 +I32 +sVill-designed +p14647 +I32 +sVla +p14648 +I46 +sVcash-flow +p14649 +I32 +sVflawed +p14650 +I32 +sVlk +p14651 +I4 +sVaccredited +p14652 +I32 +sVacres +p14653 +I32 +sVresorting +p14654 +I32 +sVage +p14655 +I36 +sVlt +p14656 +I8 +sVwilling +p14657 +I32 +sVpugh +p14658 +I8 +sVnegotiates +p14659 +I32 +sVcardholder +p14660 +I4 +sVlatitude +p14661 +I32 +sVyamaichi +p14662 +I2 +sVblack-owned +p14663 +I32 +sVcriminal +p14664 +I36 +sVantidote +p14665 +I32 +sVextradition +p14666 +I32 +sVstepped +p14667 +I32 +sVdad +p14668 +I38 +sVcozied +p14669 +I32 +sVauschwitz +p14670 +I4 +sVgreater +p14671 +I32 +sVbolder +p14672 +I32 +sVdal +p14673 +I4 +sVchileans +p14674 +I4 +sVdan +p14675 +I14 +sVspell +p14676 +I32 +sVswordfish +p14677 +I32 +sVtoshiba +p14678 +I6 +sVmention +p14679 +I32 +sVcutting +p14680 +I32 +sVcourtroom +p14681 +I32 +sVmandate +p14682 +I32 +sVinsisting +p14683 +I32 +sVliquids +p14684 +I32 +sVday +p14685 +I36 +sVcapital-gains +p14686 +I32 +sVapplicants +p14687 +I32 +sVfebruary +p14688 +I4 +sVfrayed +p14689 +I32 +sVmontedison +p14690 +I4 +sVprofit-taking +p14691 +I36 +sVverifying +p14692 +I32 +sVwarned +p14693 +I32 +sVnow-notorious +p14694 +I32 +sVdouble-a-minus +p14695 +I32 +sVidentified +p14696 +I32 +sVmorris +p14697 +I12 +sVsafeway +p14698 +I4 +sVmisting +p14699 +I32 +sVdisregard +p14700 +I32 +sVtubing +p14701 +I32 +sVgood-neighbor +p14702 +I32 +sVwarner +p14703 +I12 +sVthwart +p14704 +I36 +sVblack-white +p14705 +I32 +sVtension +p14706 +I32 +sVproliferating +p14707 +I32 +sVstrip +p14708 +I32 +sVabrogation +p14709 +I32 +sVsergeants +p14710 +I32 +sVlexington +p14711 +I8 +sVdpac +p14712 +I8 +sVburdened +p14713 +I32 +sVportrayal +p14714 +I32 +sVslumped +p14715 +I32 +sVhuntington +p14716 +I6 +sVelmwood +p14717 +I8 +sVmilhollin +p14718 +I4 +sVmarius +p14719 +I4 +sVssax +p14720 +I12 +sVmatt +p14721 +I4 +sVshantytown +p14722 +I32 +sVmezzo +p14723 +I2 +sVannounces +p14724 +I32 +sVdefend +p14725 +I36 +sVrev +p14726 +I4 +sVret +p14727 +I4 +sVwholly +p14728 +I32 +sVmate +p14729 +I36 +sVarkansas +p14730 +I4 +sVbarley +p14731 +I32 +sVrel +p14732 +I12 +sVasthmatic +p14733 +I32 +sVfour-week +p14734 +I32 +sVinsolvent +p14735 +I32 +sVelectronics +p14736 +I102 +sVstun +p14737 +I4 +sVpryor +p14738 +I4 +sVannounced +p14739 +I96 +sVdelegate +p14740 +I32 +sVfranc +p14741 +I32 +sVharold +p14742 +I12 +sVchristensen +p14743 +I14 +sVmovie-studio +p14744 +I32 +sVapproached +p14745 +I96 +sVbwv +p14746 +I4 +sVpastures +p14747 +I4 +sVfrank +p14748 +I14 +sVnorthbrook +p14749 +I12 +sVpayroll +p14750 +I32 +sVshow-business +p14751 +I32 +sVnyack +p14752 +I4 +sVfourteen +p14753 +I2 +sVanalytical +p14754 +I4 +sVapproaches +p14755 +I32 +sVmasks +p14756 +I32 +sVlikelihood +p14757 +I32 +sVafterward +p14758 +I32 +sVquo +p14759 +I32 +sVreceipts +p14760 +I36 +sVchiefs +p14761 +I44 +sVsteak +p14762 +I4 +sVallies +p14763 +I96 +sVstearns +p14764 +I12 +sVshlaes +p14765 +I4 +sVautomatic +p14766 +I36 +sVbern +p14767 +I8 +sVlibya-style +p14768 +I4 +sVloynd +p14769 +I8 +sVallied +p14770 +I14 +sVracqueteers +p14771 +I8 +sVurstadt +p14772 +I4 +sVinterfere +p14773 +I32 +sVbarriers +p14774 +I32 +sVretain +p14775 +I32 +sVparallelism +p14776 +I32 +sVretail +p14777 +I110 +sVfacilitate +p14778 +I32 +sVschoonover +p14779 +I4 +sVsouth +p14780 +I44 +sVstrippers +p14781 +I2 +sVplastics +p14782 +I36 +sVdallas-fort +p14783 +I4 +sVpga +p14784 +I8 +sVpgn +p14785 +I8 +sVdubroc +p14786 +I4 +sVethnic +p14787 +I32 +sVreaches +p14788 +I32 +sVstrategic +p14789 +I36 +sVembarrassed +p14790 +I32 +sVskyscraper +p14791 +I32 +sVimprovements +p14792 +I32 +sVfrates +p14793 +I8 +sVlagging +p14794 +I32 +sVreached +p14795 +I38 +sVnev.-based +p14796 +I4 +sVtelevsion +p14797 +I32 +sVowning +p14798 +I32 +sVrohstoff +p14799 +I4 +sVgentiles +p14800 +I4 +sVancient +p14801 +I32 +sVsadly +p14802 +I32 +sVdecrease +p14803 +I32 +sVsingle-a-3 +p14804 +I32 +sVsingle-a-2 +p14805 +I32 +sVsingle-a-1 +p14806 +I32 +sVhabit +p14807 +I32 +sVrohowsky +p14808 +I8 +sVhandcuffed +p14809 +I32 +sVunspecified +p14810 +I32 +sVrecapitalization +p14811 +I36 +sVroche +p14812 +I4 +sVintermediate +p14813 +I36 +sVdouble-a-minus/a-1-plus +p14814 +I32 +sVscant +p14815 +I32 +sVprogrammable +p14816 +I32 +sVwpob +p14817 +I4 +sVpakistani +p14818 +I4 +sVgeorgetown +p14819 +I4 +sVdillard +p14820 +I4 +sVnitro +p14821 +I12 +sVunscrupulous +p14822 +I32 +sVretrench +p14823 +I32 +sVexplanation +p14824 +I32 +sVacquire +p14825 +I36 +sVpoison-pill +p14826 +I32 +sVdreary +p14827 +I32 +sVperforce +p14828 +I32 +sVunending +p14829 +I32 +sVenvironmental +p14830 +I46 +sVudf +p14831 +I4 +sVvouchsafed +p14832 +I32 +sVinestimable +p14833 +I32 +sVcompletes +p14834 +I44 +sVclung +p14835 +I32 +sVmissile-defense +p14836 +I32 +sVdetection +p14837 +I32 +sVglamorous +p14838 +I32 +sVslack +p14839 +I32 +sVpost-cruzado +p14840 +I32 +sVco-production +p14841 +I32 +sVkeenan +p14842 +I12 +sVswedes +p14843 +I4 +sVsweden +p14844 +I14 +sVhalcyon +p14845 +I32 +sVboyish +p14846 +I32 +sVloves +p14847 +I32 +sVlover +p14848 +I34 +sVvisited +p14849 +I32 +sVabolished +p14850 +I32 +sVcounting +p14851 +I34 +sVnuk +p14852 +I4 +sVimaginative +p14853 +I32 +sVaquino +p14854 +I6 +sVrecuse +p14855 +I32 +sVsurvives +p14856 +I32 +sVottone +p14857 +I4 +sVtidy +p14858 +I32 +sVcomfortable +p14859 +I32 +sVtide +p14860 +I32 +sVunavailability +p14861 +I32 +sVunlikely +p14862 +I32 +sVhave +p14863 +I100 +sVget-up +p14864 +I32 +sVkeener +p14865 +I32 +sVsoftdrink +p14866 +I32 +sVapparently +p14867 +I34 +sVcontinents +p14868 +I32 +sVacceleration +p14869 +I40 +sVsafety-related +p14870 +I32 +sVmim +p14871 +I4 +sVladenburg +p14872 +I4 +sVu.s.-based +p14873 +I4 +sVdallas +p14874 +I14 +sVfanatic +p14875 +I32 +sVgravity +p14876 +I32 +sVincentive +p14877 +I36 +sVmontgomery +p14878 +I12 +sVmix +p14879 +I32 +sVconcerns +p14880 +I106 +sVbrotherhood +p14881 +I4 +sVredoglia +p14882 +I4 +sVprovoked +p14883 +I32 +sVbechar +p14884 +I4 +sVmit +p14885 +I4 +sVcosby +p14886 +I12 +sVjaap +p14887 +I4 +sVunless +p14888 +I34 +sValton +p14889 +I4 +sVhourly +p14890 +I32 +sVsisb +p14891 +I4 +sVpausing +p14892 +I2 +sVdebt-to-capital +p14893 +I32 +sVeight +p14894 +I34 +sVcookie-cutter +p14895 +I32 +sVbibles +p14896 +I4 +sVpreliminary +p14897 +I32 +sVdraws +p14898 +I32 +sValtos +p14899 +I4 +sVinformation-services +p14900 +I32 +sVsally +p14901 +I6 +sVpayment +p14902 +I36 +sVglugs +p14903 +I32 +sVbeets +p14904 +I32 +sVacquisition-minded +p14905 +I32 +sValaskan +p14906 +I4 +sVbudget-cutting +p14907 +I32 +sVenthusiastic +p14908 +I32 +sVgather +p14909 +I32 +sVrequest +p14910 +I36 +sVdisease +p14911 +I36 +sVvaluing +p14912 +I32 +sVcapita +p14913 +I32 +sVabsurd +p14914 +I32 +sVcommercial/investment +p14915 +I32 +sVoccasion +p14916 +I32 +sVeurobonds +p14917 +I12 +sVbodan +p14918 +I4 +sVnormally +p14919 +I32 +sVvirazole-against-aids +p14920 +I4 +sVparish +p14921 +I4 +sVziemer +p14922 +I8 +sVselection +p14923 +I32 +sVtreasured +p14924 +I32 +sVabsorbing +p14925 +I4 +sVtext +p14926 +I32 +sVpre-reagan +p14927 +I32 +sVcharles +p14928 +I14 +sVdemurred +p14929 +I32 +sVlake-front +p14930 +I32 +sVrotating +p14931 +I32 +sVclones +p14932 +I32 +sVnew-product +p14933 +I32 +sVtraitor +p14934 +I32 +sVindustrialist +p14935 +I32 +sVportfolio +p14936 +I32 +sVcontinually +p14937 +I32 +sVenviromental +p14938 +I32 +sVtechnologies +p14939 +I44 +sVstaff +p14940 +I46 +sVsuperscope +p14941 +I4 +sVwear +p14942 +I32 +sVcommunism +p14943 +I32 +sVgrabbed +p14944 +I64 +sVknowledge +p14945 +I40 +sVconcurred +p14946 +I32 +sVhousewives +p14947 +I32 +sVmcgibbon +p14948 +I4 +sVcontrols +p14949 +I100 +sVetzioni +p14950 +I4 +sVbetsy +p14951 +I4 +sVbernard +p14952 +I6 +sVlambro +p14953 +I12 +sVcommunist +p14954 +I38 +sVamplify +p14955 +I32 +sVinferior +p14956 +I32 +sVregularly +p14957 +I32 +sVword-processing +p14958 +I32 +sVhijacking +p14959 +I32 +sVexceptional +p14960 +I32 +sVbeat +p14961 +I32 +sVbeau +p14962 +I32 +sVphotography +p14963 +I40 +sVthrived +p14964 +I32 +sVstripes +p14965 +I4 +sVbear +p14966 +I38 +sVaccrue +p14967 +I32 +sVsysm +p14968 +I8 +sViranian-syrian +p14969 +I4 +sVbean +p14970 +I4 +sVreputations +p14971 +I32 +sVperfection +p14972 +I32 +sVhadlock +p14973 +I4 +sVtiming +p14974 +I32 +sVwestchester +p14975 +I4 +sVunjustified +p14976 +I32 +sVkazakhstan +p14977 +I4 +sVareas +p14978 +I36 +sVepileptic-like +p14979 +I32 +sVcaves +p14980 +I32 +sVrescuing +p14981 +I32 +sVorgan +p14982 +I32 +sVmisguided +p14983 +I32 +sVeuphemisms +p14984 +I32 +sVbogeymen +p14985 +I32 +sVteams +p14986 +I32 +sVmotherhood +p14987 +I32 +sVshelling +p14988 +I32 +sVcachet +p14989 +I32 +sVtightening +p14990 +I32 +sVroll-out +p14991 +I32 +sVfixed +p14992 +I32 +sVgibson +p14993 +I12 +sVenhances +p14994 +I36 +sVleft-wingers +p14995 +I32 +sVone-sixth +p14996 +I32 +sVturkeys +p14997 +I32 +sVwriv +p14998 +I4 +sVdillon +p14999 +I4 +sVnational +p15000 +I46 +sVturf +p15001 +I32 +sVtaiwanese +p15002 +I10 +sVaccord +p15003 +I36 +sVintensity +p15004 +I32 +sVenhanced +p15005 +I32 +sVjaques +p15006 +I12 +sVtuxedos +p15007 +I32 +sVaudits +p15008 +I36 +sVlawton +p15009 +I12 +sVwhittaker +p15010 +I6 +sVawaits +p15011 +I32 +sVkogod +p15012 +I4 +sVmaynard +p15013 +I4 +sVphases +p15014 +I32 +sVuncollectable +p15015 +I32 +sVimposition +p15016 +I96 +sVturks +p15017 +I4 +sVreform +p15018 +I36 +sVvignettes +p15019 +I32 +sVpattern +p15020 +I36 +sVmotown +p15021 +I4 +sVlaureate +p15022 +I32 +sVralph +p15023 +I6 +sVforest-products +p15024 +I32 +sVdistinguishes +p15025 +I32 +sVdiscounts +p15026 +I32 +sVdifficulties +p15027 +I32 +sVagricultural-debt +p15028 +I32 +sVrouting +p15029 +I32 +sVpredated +p15030 +I32 +sVprogress +p15031 +I38 +sVcolombian +p15032 +I4 +sVaspartame +p15033 +I36 +sVsciences +p15034 +I4 +sVmonarchs +p15035 +I32 +sVweeklong +p15036 +I32 +sVjanet +p15037 +I4 +sVmotorbiking +p15038 +I32 +sVunderwater +p15039 +I32 +sVph.d. +p15040 +I4 +sVa.m.e. +p15041 +I2 +sVdeliver +p15042 +I32 +sVdioxide +p15043 +I32 +sVjeopardizing +p15044 +I32 +sVimplementing +p15045 +I32 +sVcomplicate +p15046 +I32 +sVbyswi +p15047 +I4 +sVoptional +p15048 +I32 +sVa-330 +p15049 +I4 +sVfestering +p15050 +I32 +sVdorfman +p15051 +I8 +sVmonopole +p15052 +I32 +sVinstant +p15053 +I40 +sVnoranda +p15054 +I4 +sVtrump +p15055 +I14 +sVjoke +p15056 +I32 +sVtaking +p15057 +I32 +sVequal +p15058 +I32 +sVattributed +p15059 +I32 +sVagree +p15060 +I36 +sVhoover +p15061 +I4 +sVassure +p15062 +I32 +sVliquidating +p15063 +I32 +sVdevour +p15064 +I32 +sVrust +p15065 +I36 +sVattributes +p15066 +I32 +sVswallow +p15067 +I32 +sVplacebo +p15068 +I32 +sVmasses +p15069 +I32 +sVotherwise +p15070 +I34 +sVcomment +p15071 +I32 +sVparanoid +p15072 +I32 +sVrelevant +p15073 +I32 +sVindustrial-systems +p15074 +I32 +sVships +p15075 +I32 +sVfostering +p15076 +I4 +sVpre-boesky +p15077 +I32 +sVac +p15078 +I4 +sVambassadors +p15079 +I32 +sVbrennan +p15080 +I8 +sVcommend +p15081 +I32 +sVab +p15082 +I4 +sVdenis +p15083 +I8 +sVgoetabanken +p15084 +I4 +sVlaugh +p15085 +I32 +sVhoneysuckle +p15086 +I4 +sVentrepreneurs +p15087 +I32 +sVbasing +p15088 +I36 +sVearning +p15089 +I34 +sVwatkins +p15090 +I12 +sVtax-law +p15091 +I32 +sVjohnny +p15092 +I4 +sVtremendous +p15093 +I32 +sVprillaman +p15094 +I12 +sVdimetapp +p15095 +I4 +sVoutpaced +p15096 +I32 +sVcopies +p15097 +I32 +sVinflict +p15098 +I32 +sVdowngraded +p15099 +I96 +sVlarge-denomination +p15100 +I32 +sVdevoting +p15101 +I32 +sVapprehensive +p15102 +I32 +sVah +p15103 +I2 +sVindicators +p15104 +I36 +sVcurtain +p15105 +I36 +sVproposal +p15106 +I44 +sVkitchen +p15107 +I32 +sVanomaly +p15108 +I32 +sVworker-training +p15109 +I32 +sVrichfield +p15110 +I4 +sVfaced +p15111 +I34 +sVperplexed +p15112 +I36 +sVfermilab +p15113 +I4 +sVdomestic-appliance +p15114 +I32 +sVdeer +p15115 +I32 +sVgulyas +p15116 +I4 +sVoverwhelmingly +p15117 +I32 +sVclimate +p15118 +I32 +sVbulk +p15119 +I32 +sVbajarin +p15120 +I12 +sVfinished +p15121 +I32 +sVnosedived +p15122 +I32 +sVbull +p15123 +I36 +sVassessments +p15124 +I32 +sVfellow +p15125 +I34 +sVlindley +p15126 +I4 +sVadvance-purchase +p15127 +I32 +sVlebanese +p15128 +I6 +sVplaid +p15129 +I32 +sVsanitation +p15130 +I32 +sVvapid +p15131 +I32 +sVplain +p15132 +I32 +sVappearance +p15133 +I32 +sVculbro +p15134 +I4 +sVvalue +p15135 +I44 +sVpromotes +p15136 +I32 +sVstalin +p15137 +I4 +sVentrepreneurial +p15138 +I32 +sVbelted +p15139 +I32 +sVfault +p15140 +I32 +sVpromoted +p15141 +I32 +sVau +p15142 +I34 +sVadvisable +p15143 +I32 +sVauto-plant +p15144 +I32 +sVbernhard +p15145 +I4 +sVlate-afternoon +p15146 +I32 +sVpermeate +p15147 +I32 +sVmd-11 +p15148 +I12 +sVfumbling +p15149 +I32 +sValmost +p15150 +I98 +sVoil-producing +p15151 +I32 +sVhobbies +p15152 +I32 +sVcaptors +p15153 +I32 +sVrespected +p15154 +I32 +sVgirlfriend +p15155 +I32 +sVlandfills +p15156 +I32 +sVarrangements +p15157 +I32 +sVdryden +p15158 +I8 +sVreseve +p15159 +I4 +sVlifetime +p15160 +I32 +sVclaimed +p15161 +I32 +sVpartner +p15162 +I96 +sVinspector +p15163 +I32 +sVvira +p15164 +I4 +sVshearson +p15165 +I14 +sVstarcraft +p15166 +I4 +sVtumbled +p15167 +I32 +sVwhirl +p15168 +I32 +sVtristesse +p15169 +I4 +sVproductivity +p15170 +I32 +sVsolely +p15171 +I32 +sVlandmarks +p15172 +I32 +sVhigh-flier +p15173 +I32 +sVadministration +p15174 +I38 +sVextradited +p15175 +I32 +sVmcdermott +p15176 +I4 +sVnever-never +p15177 +I32 +sVtumbling +p15178 +I32 +sVcasualty +p15179 +I38 +sVtumbles +p15180 +I4 +sVshuttle +p15181 +I32 +sVeugenia +p15182 +I4 +sVreshuffled +p15183 +I32 +sVtoxic-waste +p15184 +I32 +sVfrivolous +p15185 +I32 +sVinjured +p15186 +I32 +sVtighten +p15187 +I32 +sVpractice +p15188 +I32 +sVrefinery-run +p15189 +I32 +sVsolved +p15190 +I32 +sVnovels +p15191 +I36 +sVcaesarean +p15192 +I4 +sVreporting +p15193 +I32 +sVgenres +p15194 +I32 +sVdisconnect +p15195 +I32 +sVman-hours +p15196 +I34 +sVbullying +p15197 +I32 +sVrate-economic +p15198 +I32 +sVdiscredited +p15199 +I32 +sVsouring +p15200 +I32 +sVsisters +p15201 +I4 +sVgiuliani +p15202 +I12 +sVmacedo +p15203 +I4 +sVjudgment +p15204 +I44 +sVtighter +p15205 +I32 +sVhepatitis +p15206 +I32 +sVretard +p15207 +I32 +sVfreres +p15208 +I4 +sVcenter +p15209 +I36 +sg32 +I34 +sVrestricted +p15210 +I32 +sVbuilder +p15211 +I32 +sVseth +p15212 +I4 +sVantonin +p15213 +I4 +sVantonio +p15214 +I4 +sVthought +p15215 +I32 +sVprocurement +p15216 +I36 +sVkahle +p15217 +I12 +sVredeemable +p15218 +I32 +sVsets +p15219 +I44 +sVwyo +p15220 +I4 +sVcomparisons +p15221 +I32 +sVcreators +p15222 +I32 +sVsoviet +p15223 +I6 +sVimmunex +p15224 +I10 +sVusual +p15225 +I36 +sVstreamlined +p15226 +I32 +sVstores +p15227 +I36 +sVexcise +p15228 +I32 +sVgas-fired +p15229 +I32 +sVproximity +p15230 +I32 +sVexecutive +p15231 +I108 +sVdomestic +p15232 +I42 +sVsmuggled +p15233 +I32 +sVmotivating +p15234 +I32 +sVspielberg +p15235 +I12 +sVbenefiting +p15236 +I32 +sVclinic +p15237 +I36 +sVunderlying +p15238 +I32 +sVvoltage +p15239 +I4 +sVsurpass +p15240 +I8 +sVseats +p15241 +I46 +sVdakota +p15242 +I12 +sVwiden +p15243 +I32 +sVgivebacks +p15244 +I32 +sVgriffith +p15245 +I4 +sVadv +p15246 +I8 +sVhamburg +p15247 +I4 +sVgmh +p15248 +I4 +sVads +p15249 +I36 +sVwinchester +p15250 +I4 +sVgmc +p15251 +I4 +sVflee +p15252 +I32 +sVdilutive +p15253 +I32 +sVropak +p15254 +I6 +sVdemographic +p15255 +I2 +sVlake +p15256 +I36 +sVrecommending +p15257 +I32 +sVrebate +p15258 +I32 +sVadd +p15259 +I36 +sVforbes +p15260 +I12 +sVmckanic +p15261 +I4 +sVdelegations +p15262 +I32 +sVcitizen +p15263 +I36 +sVscrimp +p15264 +I32 +sVado +p15265 +I32 +sVhurry +p15266 +I32 +sVmatch +p15267 +I32 +sVresolved +p15268 +I32 +sVtests +p15269 +I46 +sVweekly-average +p15270 +I32 +sVworlds +p15271 +I36 +sVbacklash +p15272 +I32 +sVjudiciary +p15273 +I36 +sVgrinspun +p15274 +I4 +sVbluhm +p15275 +I12 +sVdoyle +p15276 +I12 +sVollmann +p15277 +I4 +sVswanson +p15278 +I12 +sVresolves +p15279 +I32 +sVmarketeering +p15280 +I32 +sVclippings +p15281 +I32 +sVtweak +p15282 +I32 +sVdubai +p15283 +I4 +sVmotorola +p15284 +I4 +sVlike +p15285 +I102 +sVsuccess +p15286 +I32 +sVminority-owned +p15287 +I32 +sVvibrant +p15288 +I32 +sVtrimmer +p15289 +I32 +sVjournalism +p15290 +I32 +sVnessen +p15291 +I4 +sVadmitted +p15292 +I32 +sVscullion +p15293 +I12 +sVjournalist +p15294 +I32 +sVheed +p15295 +I32 +sVhurlburt +p15296 +I4 +sVbalanchinism +p15297 +I4 +sVworks +p15298 +I44 +sVsoft +p15299 +I38 +sVnationale +p15300 +I4 +sVheel +p15301 +I36 +sVitalian +p15302 +I14 +sVaccessible +p15303 +I32 +sVprivatized +p15304 +I32 +sVrepresentation +p15305 +I32 +sVwoodville +p15306 +I8 +sVtowels +p15307 +I32 +sVpropel +p15308 +I32 +sVferris +p15309 +I12 +sValive +p15310 +I32 +sVwhiner +p15311 +I32 +sVhair +p15312 +I32 +sVwider +p15313 +I36 +sVconvey +p15314 +I32 +sVrecommendation +p15315 +I32 +sVproper +p15316 +I32 +sVcadre +p15317 +I32 +sVnovelist +p15318 +I32 +sVsupportive +p15319 +I32 +sVneo-darwinists +p15320 +I32 +sVstuffy +p15321 +I32 +sVcorrugated +p15322 +I32 +sVhappens +p15323 +I32 +sVpan-hellenic +p15324 +I4 +sVmoran +p15325 +I4 +sVest +p15326 +I12 +sVencouraging +p15327 +I32 +sVvocabulary +p15328 +I32 +sVbilly +p15329 +I4 +sVphotographs +p15330 +I36 +sVblackstone +p15331 +I4 +sVxanax +p15332 +I4 +sVstudents +p15333 +I46 +sVmarched +p15334 +I32 +sVfirings +p15335 +I32 +sVdiscretion +p15336 +I32 +sVhitler +p15337 +I4 +sVeconomical +p15338 +I32 +sVassuming +p15339 +I32 +sVtransmitted +p15340 +I32 +sVchains +p15341 +I36 +sVregain +p15342 +I32 +sg107 +I12 +sVnoise +p15343 +I32 +sVslight +p15344 +I32 +sVrefurbishing +p15345 +I32 +sVicx +p15346 +I8 +sVpuppeteers +p15347 +I32 +sVcurtails +p15348 +I32 +sVlieutenant +p15349 +I32 +sVhost +p15350 +I32 +sVexpire +p15351 +I32 +sVtournaments +p15352 +I32 +sg44 +I46 +sVworthy +p15353 +I36 +sVoiler +p15354 +I32 +sVmarketable +p15355 +I32 +sVlockheed +p15356 +I6 +sVwell-informed +p15357 +I32 +sVperiodically +p15358 +I32 +sVpanel +p15359 +I36 +sVbank-holding +p15360 +I32 +sVwaving +p15361 +I32 +sVabout +p15362 +I46 +sVactual +p15363 +I36 +sVboards +p15364 +I32 +sVhalf-decade +p15365 +I32 +sVwithdrew +p15366 +I96 +sVlegendary +p15367 +I32 +sVbusiness-type +p15368 +I32 +sVkindercare +p15369 +I4 +sVhot +p15370 +I34 +sVflaky +p15371 +I32 +sVrecitatives +p15372 +I32 +sVflounder +p15373 +I32 +sVintroduced +p15374 +I96 +sVwarehouses +p15375 +I32 +sVunreleased +p15376 +I32 +sVfinancial-aid +p15377 +I32 +sVbaseless +p15378 +I32 +sVseniors +p15379 +I32 +sVphotovoltaic +p15380 +I32 +sVrebounded +p15381 +I32 +sVimelda +p15382 +I4 +sVwartenberg +p15383 +I8 +sVdepart +p15384 +I32 +sVdowngrading +p15385 +I32 +sVplanners +p15386 +I36 +sVsubmits +p15387 +I32 +sVpenny-stock +p15388 +I32 +sVtackle +p15389 +I32 +sVguard +p15390 +I36 +sVfemale +p15391 +I32 +sVrealigns +p15392 +I8 +sVprognosticators +p15393 +I32 +sVhang +p15394 +I32 +sVrevolve +p15395 +I32 +sVattachments +p15396 +I32 +sVherpes +p15397 +I32 +sVvelobind +p15398 +I8 +sVentices +p15399 +I32 +sVlegends +p15400 +I32 +sVrushed +p15401 +I32 +sVcleanse +p15402 +I32 +sVstainless +p15403 +I32 +sVvegetables +p15404 +I32 +sVpectorals +p15405 +I32 +sVponderous +p15406 +I32 +sVawarded +p15407 +I32 +sVrushes +p15408 +I32 +sVjoaquin +p15409 +I4 +sVbees +p15410 +I32 +sVsequent +p15411 +I4 +sVbiggest +p15412 +I38 +sVbat-lovers +p15413 +I32 +sVspectra-physics +p15414 +I14 +sVrca +p15415 +I12 +sVva.-based +p15416 +I4 +sVivory +p15417 +I36 +sVbuy +p15418 +I36 +sVinsures +p15419 +I32 +sVinsurer +p15420 +I36 +sVbur +p15421 +I8 +sVaai +p15422 +I2 +sVbrand +p15423 +I32 +sVamity +p15424 +I4 +sVbut +p15425 +I126 +sVreminds +p15426 +I32 +sVrepeated +p15427 +I34 +sVwealthier +p15428 +I32 +sVsprinkel +p15429 +I12 +sVbookshelf +p15430 +I4 +sVconsternation +p15431 +I32 +sVbrant +p15432 +I12 +sVkraft +p15433 +I14 +sVmemphis +p15434 +I12 +sVstrident +p15435 +I32 +sVversatile +p15436 +I38 +sVpartially +p15437 +I32 +sVaggravated +p15438 +I32 +sVprophets +p15439 +I32 +sVwise +p15440 +I32 +sVmonaghan +p15441 +I4 +sVglory +p15442 +I32 +sVthanks +p15443 +I32 +sVwish +p15444 +I32 +sVj +p15445 +I14 +sVvariations +p15446 +I36 +sVroped +p15447 +I32 +sVwaived +p15448 +I32 +sVwillfulness +p15449 +I32 +sVshades +p15450 +I32 +sVbackfired +p15451 +I32 +sVminutes +p15452 +I38 +sVameritech +p15453 +I4 +sVtastes +p15454 +I36 +sVanti-tank +p15455 +I32 +sVsupreme +p15456 +I46 +sVpik +p15457 +I4 +sVrabbits +p15458 +I4 +sVinventory/sales +p15459 +I8 +sVconscious +p15460 +I32 +sVdeaths +p15461 +I32 +sVmail-order +p15462 +I32 +sVwhisper +p15463 +I32 +sVcircus +p15464 +I32 +sVpie +p15465 +I12 +sVaudio-video +p15466 +I34 +sVpix +p15467 +I4 +sVmollusk +p15468 +I32 +sVwide-eyed +p15469 +I32 +sVperiods +p15470 +I32 +sVundercharging +p15471 +I32 +sVrelates +p15472 +I32 +sVnazionale +p15473 +I4 +sVleverage +p15474 +I32 +sVshooting +p15475 +I34 +sVmcginley +p15476 +I4 +sVproceeds +p15477 +I42 +sVhospitalization +p15478 +I32 +sVtalmud +p15479 +I4 +sVmorton +p15480 +I14 +sVrevocation +p15481 +I32 +sVbancshares +p15482 +I4 +sVcorporation +p15483 +I32 +sVbulky +p15484 +I32 +sVclaiming +p15485 +I96 +sVfraudulent +p15486 +I32 +sVvirtual +p15487 +I32 +sVphoebus +p15488 +I4 +sVaerospace/technology +p15489 +I32 +sVallergist +p15490 +I32 +sVboosters +p15491 +I32 +sVprogresses +p15492 +I32 +sVsquashed +p15493 +I32 +sVgranite +p15494 +I32 +sVerdman +p15495 +I4 +sVdresses +p15496 +I32 +sVadam +p15497 +I4 +sVboone +p15498 +I8 +sVjapanese-style +p15499 +I4 +sVresembles +p15500 +I32 +sVregular-season +p15501 +I32 +sVvariation +p15502 +I32 +sVindustrial-policy +p15503 +I32 +sVgecm +p15504 +I4 +sVtreasury-department +p15505 +I32 +sVshrank +p15506 +I32 +sVgatsby +p15507 +I4 +sVwallop +p15508 +I44 +sVapartment-housing +p15509 +I32 +sVno-tax +p15510 +I32 +sVacknowledgment +p15511 +I32 +sVphilips +p15512 +I14 +sVcontraceptive +p15513 +I32 +sVblow-by-blow +p15514 +I32 +sVillegally +p15515 +I96 +sVt.pow +p15516 +I12 +sVprevalent +p15517 +I32 +sVoral +p15518 +I32 +sVbaker +p15519 +I14 +sVfrontier +p15520 +I36 +sVhikes +p15521 +I32 +sVwryly +p15522 +I32 +sVderegulated +p15523 +I32 +sVgaynors +p15524 +I4 +sVbiotechnology +p15525 +I36 +sVyell +p15526 +I36 +sVaccidents +p15527 +I32 +sVbaked +p15528 +I32 +sVactivism +p15529 +I32 +sVvlis +p15530 +I8 +sVlauderdale +p15531 +I12 +sVlimited +p15532 +I36 +sVlead/acid +p15533 +I32 +sVstate-supported +p15534 +I32 +sVnws +p15535 +I4 +sVtenn. +p15536 +I4 +sVunlawful +p15537 +I32 +sVassembles +p15538 +I32 +sVmaquilas +p15539 +I42 +sVeuropeans +p15540 +I4 +sVdynasty +p15541 +I4 +sVfacilities +p15542 +I100 +sVsuny +p15543 +I4 +sVsleep +p15544 +I36 +sVnwa +p15545 +I4 +sVhata +p15546 +I4 +sVappetite +p15547 +I36 +sVhate +p15548 +I32 +sVassembled +p15549 +I32 +sVundisputed +p15550 +I32 +sVovens +p15551 +I32 +sVsanford +p15552 +I12 +sVpublic-relations +p15553 +I32 +sVviolate +p15554 +I32 +sVparis +p15555 +I12 +sVcrises +p15556 +I32 +sVbureaucrats +p15557 +I32 +sVpoorest +p15558 +I32 +sVbaker-watchers +p15559 +I4 +sVsupported +p15560 +I34 +sVreagan-proposed +p15561 +I4 +sVplaguing +p15562 +I32 +sVczyrek +p15563 +I12 +sVwhatsoever +p15564 +I32 +sVunder +p15565 +I110 +sVwash.-based +p15566 +I4 +sVpride +p15567 +I32 +sVregrets +p15568 +I32 +sVreorganizations +p15569 +I32 +sVshambles +p15570 +I32 +sVmerchant +p15571 +I32 +sVordnance +p15572 +I32 +sVlure +p15573 +I32 +sVu.s.-japan +p15574 +I4 +sVlegislators +p15575 +I32 +sVrisk +p15576 +I36 +sVlangdon +p15577 +I4 +sVabrahamson +p15578 +I12 +sVrise +p15579 +I44 +sVlurk +p15580 +I4 +sVgnp +p15581 +I4 +sVeprom +p15582 +I4 +sVallentown +p15583 +I4 +sVnon-german +p15584 +I32 +sVevery +p15585 +I102 +sVtransporation +p15586 +I4 +sVsoftened +p15587 +I32 +sVfunneled +p15588 +I32 +sVfrailty +p15589 +I4 +sVvastly +p15590 +I32 +sVapplication-specific +p15591 +I32 +sVanemic +p15592 +I32 +sVencounter +p15593 +I32 +sVanemia +p15594 +I32 +sVusda +p15595 +I4 +sVschool +p15596 +I36 +sVt.npi +p15597 +I4 +sVreciprocal +p15598 +I32 +sVinduction +p15599 +I32 +sVmarket-by-market +p15600 +I32 +sVintegrated +p15601 +I32 +sVcommute +p15602 +I32 +sVrose-colored +p15603 +I32 +sVguiding +p15604 +I32 +sVait +p15605 +I4 +sVlegislating +p15606 +I32 +sVenjoy +p15607 +I32 +sVveritable +p15608 +I32 +sVdistorts +p15609 +I32 +sVbicycle +p15610 +I32 +sVleaders +p15611 +I34 +sVfaintest +p15612 +I32 +sVexpandability +p15613 +I32 +sVconstrued +p15614 +I32 +sVconsistent +p15615 +I32 +sVguidelines +p15616 +I32 +sVestimates +p15617 +I96 +sValmost-certain +p15618 +I32 +sVcatalogued +p15619 +I32 +sVnail +p15620 +I36 +sVscribbled +p15621 +I32 +sVscrutinize +p15622 +I36 +sVstreet +p15623 +I44 +sVcruzeiro +p15624 +I32 +sVborrowings +p15625 +I34 +sVmullally +p15626 +I12 +sVfriendships +p15627 +I32 +sVestimated +p15628 +I34 +sVexpressive +p15629 +I32 +sVempire +p15630 +I32 +sVtrashy +p15631 +I32 +sVblue +p15632 +I38 +sVhide +p15633 +I32 +sVrubel +p15634 +I8 +sVwellcome +p15635 +I14 +sVnewsrooms +p15636 +I32 +sVselected +p15637 +I32 +sVprofitability +p15638 +I36 +sVpoison +p15639 +I32 +sVplodding +p15640 +I32 +sVsalzburg +p15641 +I4 +sVover-the-air +p15642 +I32 +sVabides +p15643 +I32 +sVzink +p15644 +I12 +sVendorse +p15645 +I32 +sVsupplier +p15646 +I32 +sVsupplies +p15647 +I36 +sVrubes +p15648 +I4 +sVscr +p15649 +I4 +sVbilandic +p15650 +I4 +sVseeks +p15651 +I44 +sVhome-video +p15652 +I32 +sVenga +p15653 +I4 +sVmultimate +p15654 +I4 +sVt.td +p15655 +I8 +sVkicked +p15656 +I32 +sVblonde-laden +p15657 +I32 +sVbassett +p15658 +I4 +sVnurtured +p15659 +I32 +sVbarratt +p15660 +I12 +sVfeisty +p15661 +I32 +sVmarket-oriented +p15662 +I32 +sVhundreds +p15663 +I32 +sVuspci +p15664 +I14 +sVpratt +p15665 +I14 +sVohbayashi +p15666 +I4 +sVstudio +p15667 +I34 +sVkicker +p15668 +I32 +sVcertfs +p15669 +I8 +sVrepresented +p15670 +I32 +sVpath +p15671 +I32 +sVstares +p15672 +I32 +sVfinders +p15673 +I32 +sVenron +p15674 +I4 +sVreversals +p15675 +I32 +sVweyerhaeuser +p15676 +I12 +sVvoice +p15677 +I36 +sVdepreciates +p15678 +I32 +sVtx +p15679 +I12 +sVforum +p15680 +I46 +sVwdg +p15681 +I8 +sVauction +p15682 +I36 +sVleaves +p15683 +I36 +sVchanged +p15684 +I36 +sVproportioned +p15685 +I32 +sVmuseums +p15686 +I32 +sVdonning +p15687 +I32 +sVdepreciated +p15688 +I32 +sVanalysts +p15689 +I46 +sVrogaine +p15690 +I4 +sVdeere +p15691 +I6 +sVchanges +p15692 +I46 +sVpunishment +p15693 +I32 +sVunglamorous +p15694 +I32 +sVweek-e +p15695 +I8 +sVprints +p15696 +I36 +sVambulances +p15697 +I4 +sVstray +p15698 +I32 +sVhighfliers +p15699 +I32 +sVstraw +p15700 +I32 +sVjulie +p15701 +I4 +sVkaul +p15702 +I4 +sVcar-market +p15703 +I32 +sVvisibly +p15704 +I32 +sVfeelings +p15705 +I36 +sVvisible +p15706 +I32 +sVruesselsheim +p15707 +I4 +sVharvest +p15708 +I32 +sVmeats +p15709 +I4 +sVmares +p15710 +I32 +sVterm-loan +p15711 +I32 +sVexplainable +p15712 +I32 +sVbroker-dealer +p15713 +I36 +sVpreeminent +p15714 +I32 +sVhillsborough +p15715 +I4 +sVswings +p15716 +I36 +sVwould +p15717 +I102 +sVappeasing +p15718 +I32 +sVup&l +p15719 +I6 +sVhospital +p15720 +I46 +sVm. +p15721 +I12 +sVhanoi +p15722 +I4 +sVdoubts +p15723 +I36 +sVtenders +p15724 +I2 +sVipos +p15725 +I4 +sVdistributing +p15726 +I32 +sVnoting +p15727 +I40 +sVm1 +p15728 +I4 +sVasset +p15729 +I46 +sVraids +p15730 +I36 +sVspike +p15731 +I14 +sVccc +p15732 +I4 +sVchlorthalidone +p15733 +I32 +sVpreview +p15734 +I32 +sVassessment +p15735 +I36 +sVravishing +p15736 +I32 +sVprivee +p15737 +I36 +sVbrutally +p15738 +I32 +sVwallach +p15739 +I4 +sVmush +p15740 +I32 +sVth +p15741 +I4 +sVnaive +p15742 +I32 +sVrobbins +p15743 +I14 +sVunderstandings +p15744 +I32 +sVmasterpieces +p15745 +I32 +sVphone +p15746 +I32 +sVconnecticut +p15747 +I4 +sVcorrosion +p15748 +I32 +sVvarsity +p15749 +I32 +sVexcellent +p15750 +I32 +sVfive-day +p15751 +I32 +sVcampanies +p15752 +I32 +sVexpenses +p15753 +I32 +sVcasualties +p15754 +I32 +sVsquad +p15755 +I32 +sVsupplemental +p15756 +I32 +sVmust +p15757 +I36 +sVme +p15758 +I38 +sVmd +p15759 +I4 +sVesber +p15760 +I12 +sVhideout +p15761 +I32 +sVjoin +p15762 +I36 +sVcheapest +p15763 +I32 +sVml +p15764 +I8 +sVmerhige +p15765 +I12 +sVzwerin +p15766 +I12 +sVcancellations +p15767 +I32 +sVadvocacy +p15768 +I34 +sVdollar-holdings +p15769 +I32 +sVtissue +p15770 +I2 +sVgraceland +p15771 +I4 +sVhenry +p15772 +I14 +sVentertainer +p15773 +I32 +sVernest +p15774 +I14 +sVmy +p15775 +I38 +sVgrenade +p15776 +I32 +sVovertaken +p15777 +I32 +sVshook +p15778 +I32 +sVdecorative +p15779 +I32 +sVloosen +p15780 +I32 +sVunilateral +p15781 +I32 +sVreceivables +p15782 +I32 +sVingenuity +p15783 +I96 +sVdiminished +p15784 +I96 +sVcooling-off +p15785 +I32 +sVpreserving +p15786 +I32 +sVgenerically +p15787 +I32 +sVmotivated +p15788 +I32 +sVorion +p15789 +I14 +sVgorda +p15790 +I4 +sVmortages +p15791 +I32 +sVkeep +p15792 +I36 +sVattract +p15793 +I36 +sVmoderate-income +p15794 +I32 +sVguarantee +p15795 +I32 +sVsingle-state +p15796 +I32 +sVend +p15797 +I36 +sVene +p15798 +I4 +sVmarket-moving +p15799 +I32 +sVillicit +p15800 +I32 +sVgatt +p15801 +I4 +sVsitting +p15802 +I34 +sVevenhandedly +p15803 +I32 +sVimplicating +p15804 +I32 +sVwriters +p15805 +I32 +sVhanff +p15806 +I4 +sVadjacent +p15807 +I32 +sVtoxic +p15808 +I32 +sVgate +p15809 +I36 +sVwidespread +p15810 +I32 +sVcharging +p15811 +I40 +sVbadly +p15812 +I32 +sVclever +p15813 +I32 +sVpig +p15814 +I32 +sVdescription +p15815 +I32 +sVshakeout +p15816 +I32 +sVclaptrap +p15817 +I32 +sVmess +p15818 +I32 +sVinsecure +p15819 +I32 +sVharmfully +p15820 +I32 +sVdietrich +p15821 +I8 +sVdemanding +p15822 +I32 +sVdetention +p15823 +I32 +sVbusines +p15824 +I32 +sVjumping +p15825 +I32 +sVdocumentaries +p15826 +I32 +sVmid-december +p15827 +I32 +sVbiting +p15828 +I32 +sVcement +p15829 +I36 +sVmesa +p15830 +I14 +sVmcdonough +p15831 +I4 +sVparallel +p15832 +I32 +sVprovisionally +p15833 +I32 +sVrummy +p15834 +I32 +sVstronghold +p15835 +I32 +sVdanny +p15836 +I4 +sVgluing +p15837 +I32 +sVamid +p15838 +I110 +sVloss-ridden +p15839 +I32 +sVacknowledged +p15840 +I36 +sVaudio/video +p15841 +I12 +sVhypotheses +p15842 +I32 +sVdaredevil +p15843 +I32 +sVcomplexity +p15844 +I32 +sVinterior +p15845 +I34 +sVfunniest +p15846 +I32 +sVultimate +p15847 +I32 +sVfourth-biggest +p15848 +I32 +sVcorrelation +p15849 +I32 +sVplumbing +p15850 +I32 +sVpreventive +p15851 +I36 +sVharlem +p15852 +I4 +sVdatron +p15853 +I4 +sVexecuted +p15854 +I32 +sVinterpretation +p15855 +I32 +sVmannequins +p15856 +I32 +sVwound +p15857 +I32 +sVover +p15858 +I110 +sVforwarders +p15859 +I32 +sVexpects +p15860 +I108 +sVcar-rentals +p15861 +I32 +sVlondon +p15862 +I14 +sVsecond-fiddle +p15863 +I32 +sVtelecasting +p15864 +I32 +sVdigest +p15865 +I4 +sVpre-split +p15866 +I32 +sVrostov +p15867 +I4 +sVnyta +p15868 +I4 +sVmanageable +p15869 +I32 +sVsnowstorms +p15870 +I32 +sVspillman +p15871 +I8 +sVhypocrisy +p15872 +I32 +sVclf +p15873 +I8 +sVswapped +p15874 +I96 +sVexpectations +p15875 +I102 +sVwriting +p15876 +I32 +sVdestroyed +p15877 +I32 +sVedits +p15878 +I32 +sVindianapolis-based +p15879 +I4 +sVcompelling +p15880 +I32 +sVbang-them-over-the-head +p15881 +I32 +sVfade +p15882 +I32 +sVleakage +p15883 +I32 +sVwhips +p15884 +I32 +sVgoose +p15885 +I32 +sVfixed-interest +p15886 +I32 +sVtechnicare-related +p15887 +I4 +sVeugene +p15888 +I14 +sViowa +p15889 +I4 +sVdiseases +p15890 +I36 +sVpayouts +p15891 +I36 +sVprevented +p15892 +I32 +sVconfuse +p15893 +I32 +sVincorrectly +p15894 +I32 +sVlayoff +p15895 +I32 +sVmcnealy +p15896 +I12 +sVrevelations +p15897 +I32 +sVengland-based +p15898 +I4 +sVmonopole-hunting +p15899 +I32 +sVousts +p15900 +I8 +sVpianist +p15901 +I2 +sVwashing +p15902 +I32 +sVpinkish +p15903 +I32 +sVrental +p15904 +I32 +sVdimensionless +p15905 +I32 +sVgloom +p15906 +I4 +sVsuperintendents +p15907 +I32 +sVnetherlands +p15908 +I12 +sValex +p15909 +I14 +sVdictatorship +p15910 +I32 +sVlittle-noticed +p15911 +I32 +sVnotified +p15912 +I96 +sVpotatoes +p15913 +I32 +sVtweedledee +p15914 +I4 +sVmeatpacking +p15915 +I32 +sVdetroit +p15916 +I12 +sVexplode +p15917 +I32 +sVdiffers +p15918 +I32 +sVfilling +p15919 +I96 +sVdollar-denominated +p15920 +I32 +sVaffiliate +p15921 +I32 +sVvictory +p15922 +I32 +sVmaterial-handling +p15923 +I32 +sVeach +p15924 +I46 +sVlasting +p15925 +I32 +sVconsolidate +p15926 +I32 +sVprohibit +p15927 +I32 +sVsigning +p15928 +I32 +sVcorrectional +p15929 +I6 +sVproposing +p15930 +I32 +sVdiana +p15931 +I4 +sVrelocations +p15932 +I32 +sVdiane +p15933 +I6 +sVbonar +p15934 +I12 +sVtinged +p15935 +I32 +sVproportion +p15936 +I32 +sVsears +p15937 +I4 +sVhanged +p15938 +I32 +sVmagnets +p15939 +I32 +sVcombining +p15940 +I32 +sVraid +p15941 +I32 +sVghosts +p15942 +I32 +sVthermo +p15943 +I8 +sVsaturday +p15944 +I4 +sVgaloob +p15945 +I4 +sVrevisions +p15946 +I32 +sVt. +p15947 +I4 +sVjackets +p15948 +I32 +sVprecisely +p15949 +I32 +sVdriving +p15950 +I36 +sVresponsibile +p15951 +I32 +sVboesky-like +p15952 +I4 +sVkuwait +p15953 +I4 +sVmotel +p15954 +I32 +sVpensacola +p15955 +I4 +sVwashed +p15956 +I32 +sVindia-rubber +p15957 +I4 +sVcollaborated +p15958 +I32 +sVlaid +p15959 +I32 +sVsane +p15960 +I32 +sVglass-steagall +p15961 +I4 +sVco-founder +p15962 +I32 +sVbanning +p15963 +I2 +sVpurse-snatching +p15964 +I32 +sVpaulus +p15965 +I8 +sVgot +p15966 +I100 +sVnewly +p15967 +I32 +sVtwenty-five +p15968 +I4 +sVcreole +p15969 +I4 +sVgop +p15970 +I4 +sVindependence +p15971 +I32 +sVunderwrite +p15972 +I32 +sVpersecuting +p15973 +I32 +sVsept. +p15974 +I14 +sVmerchandising +p15975 +I32 +sVassociate +p15976 +I40 +sVrail +p15977 +I100 +sVherman +p15978 +I4 +sVexpense-reduction +p15979 +I32 +sVfree +p15980 +I44 +sVfred +p15981 +I12 +sVfrey +p15982 +I12 +sVstreamline +p15983 +I32 +sVcounterparts +p15984 +I32 +sVboosting +p15985 +I32 +sVsias +p15986 +I8 +sVwanted +p15987 +I32 +sVreinstatement +p15988 +I32 +sVjubilant +p15989 +I32 +sVselwyn +p15990 +I4 +sVpractitioners +p15991 +I32 +sVsuter +p15992 +I12 +sVbaltimore-washington +p15993 +I8 +sVinexpensive +p15994 +I32 +sVhigh-density +p15995 +I32 +sVdays +p15996 +I36 +sVpriorities +p15997 +I32 +sVoutfits +p15998 +I32 +sVjointly +p15999 +I36 +sVdepartment-store +p16000 +I32 +sVwefer +p16001 +I8 +sVheck +p16002 +I14 +sVaustralian-based +p16003 +I4 +sVsoda +p16004 +I32 +sVlatam +p16005 +I12 +sVasian-americans +p16006 +I4 +sVkeynes +p16007 +I8 +sVwellington +p16008 +I8 +sVonto +p16009 +I32 +sVtinkering +p16010 +I32 +sVinspectors +p16011 +I32 +sVsyrian-backed +p16012 +I4 +sVrang +p16013 +I32 +sVindustrial +p16014 +I110 +sVdunce +p16015 +I32 +sVheadaches +p16016 +I32 +sVresearcher +p16017 +I32 +sVattractions +p16018 +I4 +sVenterra +p16019 +I4 +sVbeezley +p16020 +I4 +sVprimary +p16021 +I36 +sVrank +p16022 +I36 +sVhearing +p16023 +I40 +sVlovable +p16024 +I32 +sVfantasy +p16025 +I36 +sVphilosophical +p16026 +I32 +sVrelations +p16027 +I38 +sVawoke +p16028 +I32 +sVsmugly +p16029 +I32 +sVmeinertzhagen +p16030 +I4 +sVtitled +p16031 +I32 +sVsharpest +p16032 +I32 +sVparkway +p16033 +I4 +sVresearched +p16034 +I32 +sVconn.-based +p16035 +I4 +sVmercury +p16036 +I4 +sVmcniff +p16037 +I8 +sVmagnificent +p16038 +I32 +sVtoy +p16039 +I36 +sVemporia +p16040 +I12 +sVrewritten +p16041 +I32 +sVrevival +p16042 +I36 +sVwood-paneled +p16043 +I32 +sVguinness +p16044 +I14 +sVtop +p16045 +I38 +sVquotable +p16046 +I4 +sVlong-awaited +p16047 +I32 +sVtow +p16048 +I4 +sVheights +p16049 +I36 +sVconfirming +p16050 +I32 +sVton +p16051 +I32 +sVtoo +p16052 +I38 +sVwildly +p16053 +I32 +sVhinton +p16054 +I4 +sVpercentage +p16055 +I34 +sVunbroken +p16056 +I32 +sVconsented +p16057 +I32 +sVurban +p16058 +I44 +sVceiling +p16059 +I36 +sVmurder +p16060 +I32 +sVotherwise-anemic +p16061 +I32 +sVd.w. +p16062 +I4 +sVcentered +p16063 +I32 +sVgrabs +p16064 +I32 +sVtool +p16065 +I36 +sVserve +p16066 +I32 +sVtook +p16067 +I96 +sVnegotiating +p16068 +I42 +sVsolicitor +p16069 +I32 +sVwrapped +p16070 +I32 +sVincur +p16071 +I32 +sVwestern +p16072 +I46 +sVrigs +p16073 +I32 +sVinjected +p16074 +I32 +sVcalmat +p16075 +I6 +sVabated +p16076 +I32 +sVnonpartisan +p16077 +I32 +sVchoreographer +p16078 +I32 +sVcommunicate +p16079 +I32 +sVroles +p16080 +I32 +sVnonperforming +p16081 +I32 +sVnominate +p16082 +I32 +sVbloated +p16083 +I32 +sVimmigrants +p16084 +I32 +sVcovent +p16085 +I4 +sVhard-nosed +p16086 +I32 +sVurgings +p16087 +I32 +sVclasses +p16088 +I32 +sVnervous +p16089 +I32 +sVarraignment +p16090 +I32 +sVmirth +p16091 +I32 +sVbeard +p16092 +I32 +sVpossessed +p16093 +I32 +sVbig-selling +p16094 +I32 +sVdiuretic +p16095 +I32 +sVscreenplay +p16096 +I32 +sVpaths +p16097 +I32 +sVfashion +p16098 +I32 +sVarbs +p16099 +I32 +sVhandkerchief +p16100 +I32 +sVran +p16101 +I96 +sVrao +p16102 +I8 +sVnon-public +p16103 +I32 +sVrah +p16104 +I12 +sVcours-la-reine +p16105 +I4 +sVtalking +p16106 +I36 +sVtelex +p16107 +I32 +sVjacobs +p16108 +I4 +sVadvising +p16109 +I32 +sVpetersen +p16110 +I8 +sVunderdeveloped +p16111 +I2 +sVregulate +p16112 +I32 +sVbeckett +p16113 +I4 +sVrelatively +p16114 +I32 +sVtriangle +p16115 +I4 +sVbackdrops +p16116 +I32 +sVtraditionally +p16117 +I34 +sVmaldutis +p16118 +I12 +sVslithering +p16119 +I32 +sVharper +p16120 +I4 +sVthoroughly +p16121 +I32 +sVspreadsheet +p16122 +I32 +sVukman +p16123 +I4 +sVsnow +p16124 +I32 +sVthorough +p16125 +I32 +sVpredominantly +p16126 +I32 +sVoriented +p16127 +I32 +sVlocalities +p16128 +I4 +sVclient +p16129 +I32 +sVdemocratic-controlled +p16130 +I4 +sVrodents +p16131 +I4 +sVlaughed +p16132 +I32 +sVcoopers +p16133 +I12 +sVgerson +p16134 +I12 +sVeffectiveness +p16135 +I32 +sVrides +p16136 +I32 +sVdoomed +p16137 +I32 +sVcigna +p16138 +I14 +sVsloan-kettering +p16139 +I4 +sVshallow +p16140 +I32 +sVsingle-a/a-1 +p16141 +I32 +sVcapitalization +p16142 +I32 +sVthough +p16143 +I42 +sVftlv +p16144 +I4 +sVepi +p16145 +I8 +sVposner +p16146 +I12 +sVanglo-irish +p16147 +I4 +sVcourt-appointed +p16148 +I32 +sVgillis +p16149 +I4 +sVinnovate +p16150 +I32 +sVplenty +p16151 +I32 +sVcommanding +p16152 +I32 +sVdissent +p16153 +I32 +sVcoil +p16154 +I32 +sVcolonize +p16155 +I32 +sVcontain +p16156 +I32 +sValabama +p16157 +I4 +sVexplosives +p16158 +I32 +sVbsc +p16159 +I4 +sVpromotions +p16160 +I34 +sVshearson-managed +p16161 +I4 +sVpeers +p16162 +I36 +sVlate-night +p16163 +I32 +sVtreats +p16164 +I32 +sVrogers +p16165 +I12 +sVw.w. +p16166 +I4 +sVprevails +p16167 +I4 +sVflop +p16168 +I32 +sVmetal +p16169 +I36 +sVtreaty +p16170 +I36 +sVlyle +p16171 +I4 +sVshort-lived +p16172 +I4 +sVorderly +p16173 +I32 +sVyang +p16174 +I8 +sVpronouncements +p16175 +I32 +sVinaccuracies +p16176 +I32 +sVenterprise +p16177 +I36 +sVkupinski +p16178 +I4 +sVcrankshaft +p16179 +I32 +sVentertaining +p16180 +I32 +sVepa +p16181 +I4 +sVattested +p16182 +I32 +sVsection +p16183 +I32 +sVhigh-intensity +p16184 +I32 +sVyank +p16185 +I32 +sVmostow +p16186 +I4 +sVsanctuary +p16187 +I32 +sVoverpriced +p16188 +I32 +sVpope +p16189 +I4 +sVunified +p16190 +I36 +sVreductions +p16191 +I32 +sVreorganize +p16192 +I4 +sVqueen +p16193 +I44 +sVtalkers +p16194 +I32 +sVperoni +p16195 +I12 +sVpops +p16196 +I32 +sVcolors +p16197 +I32 +sVradio +p16198 +I36 +sVsolutions +p16199 +I32 +sVpolemics +p16200 +I32 +sVfuzzy +p16201 +I32 +sVearth +p16202 +I36 +sVbail +p16203 +I32 +sVavailability +p16204 +I32 +sVbain +p16205 +I14 +sVappealed +p16206 +I32 +sVreunification +p16207 +I32 +sVmrmt +p16208 +I8 +sVair-freight +p16209 +I64 +sVclaude +p16210 +I8 +sVsituations +p16211 +I32 +sVdelays +p16212 +I40 +sVaspire +p16213 +I32 +sVstock-in-trade +p16214 +I32 +sVkessler +p16215 +I12 +sVsupremacy +p16216 +I32 +sVexport-import +p16217 +I12 +sVzipping +p16218 +I32 +sVgods +p16219 +I32 +sVannounce +p16220 +I32 +sVparlayed +p16221 +I32 +sVfromer +p16222 +I8 +sVlawfully +p16223 +I32 +sVchecked +p16224 +I32 +sVmascots +p16225 +I32 +sVborrowed +p16226 +I36 +sVbamford +p16227 +I12 +sVwaltz +p16228 +I4 +sVsunglasses +p16229 +I32 +sVdeerfield +p16230 +I12 +sVcriticizes +p16231 +I32 +sVquebecor/british +p16232 +I4 +sVhostility +p16233 +I32 +sVwatch +p16234 +I38 +sVphotograph +p16235 +I32 +sVregistered +p16236 +I32 +sVmovers +p16237 +I4 +sVcriticized +p16238 +I32 +sVguatemala +p16239 +I4 +sVbeane +p16240 +I12 +sVtuberculosis +p16241 +I32 +sVdespite +p16242 +I46 +sVreport +p16243 +I44 +sVtransvaal +p16244 +I4 +sVfabrics +p16245 +I32 +sVfortress +p16246 +I32 +sVholland +p16247 +I4 +sVgenral +p16248 +I8 +sVhendry +p16249 +I12 +sVspinoffs +p16250 +I32 +sVcountries +p16251 +I36 +sVwives +p16252 +I32 +sVchesapeake +p16253 +I4 +sVexcel +p16254 +I6 +sVstraits +p16255 +I4 +sVcollusion +p16256 +I32 +sVfalsify +p16257 +I32 +sVtwice +p16258 +I36 +sVerupt +p16259 +I32 +sVshots +p16260 +I32 +sVstemple +p16261 +I12 +sVruins +p16262 +I32 +sVailments +p16263 +I32 +sVmergers +p16264 +I36 +sVadjustable-rate +p16265 +I32 +sVdumagami +p16266 +I10 +sVhagan +p16267 +I8 +sVrail-car +p16268 +I32 +sVswept +p16269 +I32 +sVthwarting +p16270 +I32 +sVliquor +p16271 +I34 +sVproteon +p16272 +I4 +sVnew$ +p16273 +I4 +sVwage-price +p16274 +I32 +sVresist +p16275 +I32 +sVcampbell +p16276 +I6 +sVinnocuous +p16277 +I32 +sVforeign-currency +p16278 +I32 +sVbed +p16279 +I32 +sVresigning +p16280 +I32 +sVcorrupt +p16281 +I32 +sVdisturbing +p16282 +I32 +sVrarity +p16283 +I32 +sVcleocin +p16284 +I4 +sVcombustion +p16285 +I32 +sVcapacity +p16286 +I108 +sVinstallations +p16287 +I32 +sVtemptation +p16288 +I32 +sVhomeowner +p16289 +I32 +sVpropulsion +p16290 +I32 +sVfeline +p16291 +I32 +sVcai +p16292 +I4 +sVmachinists +p16293 +I36 +sVbetty-jo +p16294 +I2 +sVfinancial-futures +p16295 +I32 +sVmug +p16296 +I32 +sVde-americanized +p16297 +I32 +sVapproach +p16298 +I32 +sVimplantable +p16299 +I32 +sVdiscovery +p16300 +I32 +sVreiterate +p16301 +I32 +sVmillion-ton +p16302 +I32 +sVbrigade +p16303 +I32 +sVbargains +p16304 +I32 +sVjose +p16305 +I4 +sVpurity +p16306 +I32 +sVconfusion +p16307 +I36 +sVweak +p16308 +I38 +sg40 +I46 +sVboss +p16309 +I44 +sVcredit-research +p16310 +I32 +sVsoutheast +p16311 +I14 +sVmnco +p16312 +I12 +sVhokum +p16313 +I32 +sVcontamination +p16314 +I32 +sVnews +p16315 +I38 +sVcharity-ball +p16316 +I32 +sVfaster-than-expected +p16317 +I32 +sVblasted +p16318 +I32 +sVimprove +p16319 +I32 +sVadapting +p16320 +I32 +sVgovernment-appointed +p16321 +I32 +sVprotect +p16322 +I32 +sVreferral +p16323 +I32 +sVyoshihara +p16324 +I12 +sVfranc-denominated +p16325 +I32 +sVjennings +p16326 +I12 +sVcredit-card +p16327 +I42 +sVprecipitous +p16328 +I32 +sVsultry +p16329 +I32 +sVparticipating +p16330 +I34 +sVplayers +p16331 +I36 +sVmerging +p16332 +I32 +sVgames +p16333 +I100 +sVsupplanting +p16334 +I32 +sVfaces +p16335 +I36 +sVsne +p16336 +I8 +sVexpense +p16337 +I32 +sVlenses +p16338 +I32 +sVflair +p16339 +I32 +sVhelyar +p16340 +I4 +sVjurisdiction +p16341 +I32 +sVmarsh +p16342 +I12 +sVgoodrich +p16343 +I12 +sVsullivan +p16344 +I12 +sVelf +p16345 +I4 +sVbetting +p16346 +I32 +sVbeckoning +p16347 +I32 +sVanti-discrimination +p16348 +I32 +sVepidemic +p16349 +I32 +sVgruneich +p16350 +I4 +sVs.c.-based +p16351 +I4 +sVkaren +p16352 +I4 +sVviruses +p16353 +I32 +sVevanston +p16354 +I4 +sVdissipating +p16355 +I32 +sVmajestic +p16356 +I34 +sVele +p16357 +I4 +sVbureaucratic +p16358 +I32 +sVconference +p16359 +I36 +sVaback +p16360 +I32 +sVolmstead +p16361 +I4 +sVincomparable +p16362 +I32 +sVbeef +p16363 +I32 +sVimage-tarnishing +p16364 +I32 +sVbikinis +p16365 +I32 +sVworn-out +p16366 +I32 +sVbinge +p16367 +I32 +sVfaltering +p16368 +I32 +sVbeen +p16369 +I36 +sVquickly +p16370 +I36 +sVbeneficiary +p16371 +I32 +sVconfident +p16372 +I32 +sVbeer +p16373 +I100 +sVtrampled +p16374 +I32 +sVexpected +p16375 +I36 +sVcaptives +p16376 +I32 +sVwarehoused +p16377 +I32 +sVcontainers +p16378 +I32 +sVrefuted +p16379 +I32 +sVex-grenfell +p16380 +I4 +sVfleeting +p16381 +I32 +sVanchors +p16382 +I32 +sVpublisher +p16383 +I32 +sVdrugs +p16384 +I32 +sVrepublicans +p16385 +I4 +sVsearch +p16386 +I44 +sVuncommon +p16387 +I32 +sVenterprises +p16388 +I44 +sVcraft +p16389 +I32 +sVbudged +p16390 +I32 +sVcatch +p16391 +I36 +sVkrauss +p16392 +I4 +sVpatronizing +p16393 +I32 +sVpeer +p16394 +I32 +sVdeliberations +p16395 +I32 +sVpre-aids +p16396 +I32 +sVbizet +p16397 +I4 +sVapprehension +p16398 +I32 +sVwfc +p16399 +I8 +sVheartland +p16400 +I36 +sVoptimists +p16401 +I32 +sVlessen +p16402 +I32 +sVkentucky +p16403 +I6 +sVlesser +p16404 +I34 +sVenmity +p16405 +I32 +sVweren +p16406 +I32 +sVugliest +p16407 +I32 +sVteachers +p16408 +I46 +sVstopping +p16409 +I34 +sVunisys +p16410 +I4 +sVtransfering +p16411 +I32 +sVprecede +p16412 +I32 +sVprocedure +p16413 +I36 +sVhangars +p16414 +I40 +sVpronouncing +p16415 +I32 +sVprovocative +p16416 +I32 +sVfurthering +p16417 +I32 +sVbrewer +p16418 +I32 +sVtrustee-like +p16419 +I32 +sVoswego +p16420 +I4 +sVbundesrat +p16421 +I4 +sVaccessories +p16422 +I32 +sVanatoly +p16423 +I4 +sVbrewed +p16424 +I32 +sVexperts +p16425 +I34 +sVroadways +p16426 +I32 +sVexterior +p16427 +I32 +sVeditorials +p16428 +I32 +sVpathology +p16429 +I32 +sVdrug-industry +p16430 +I32 +sVsurcharge +p16431 +I32 +sVcontaining +p16432 +I32 +sVbirinyi +p16433 +I12 +sVpyrotechnics +p16434 +I32 +sVnike +p16435 +I4 +sVsuggest +p16436 +I32 +sVcrates +p16437 +I32 +sVindependent-production +p16438 +I32 +sVlinked +p16439 +I32 +sVlauding +p16440 +I32 +sVcomplex +p16441 +I36 +sVinventory +p16442 +I42 +sVcarnation +p16443 +I4 +sVmillie +p16444 +I4 +sVseveral +p16445 +I46 +sVafric +p16446 +I12 +sVharming +p16447 +I32 +sVinventors +p16448 +I32 +sVyouth +p16449 +I32 +sVsatellite +p16450 +I36 +sVvelasco +p16451 +I4 +sVpeaks +p16452 +I32 +sVmaneaty +p16453 +I12 +sVunbearable +p16454 +I32 +sVtheodore +p16455 +I6 +sVtroika +p16456 +I32 +sVpick +p16457 +I32 +sVmicrophone +p16458 +I32 +sVbuyback +p16459 +I36 +sVgreeted +p16460 +I32 +sVsuburb +p16461 +I32 +sVafraid +p16462 +I32 +sVbungling +p16463 +I32 +sVcharacters +p16464 +I32 +sVsemi-negative +p16465 +I32 +sVworkings +p16466 +I32 +sVamortization +p16467 +I32 +sVinsisted +p16468 +I32 +sVranzino +p16469 +I4 +sVcycle +p16470 +I32 +sVcensures +p16471 +I4 +sVojai +p16472 +I4 +sVhearth +p16473 +I32 +sVspecialize +p16474 +I32 +sVshortly +p16475 +I34 +sVrussians +p16476 +I4 +sVmushroom +p16477 +I38 +sVgovernment-recognized +p16478 +I32 +sVcharlie +p16479 +I4 +sVforceful +p16480 +I32 +sVj&l +p16481 +I4 +sVjunkyard +p16482 +I32 +sVlitigator +p16483 +I32 +sVocean +p16484 +I40 +sVdimon +p16485 +I4 +sVsavings +p16486 +I36 +sVlce +p16487 +I4 +sVimpediment +p16488 +I32 +sVgreatest +p16489 +I32 +sVdetained +p16490 +I32 +sVmother +p16491 +I32 +sVhearts +p16492 +I32 +sVjean +p16493 +I6 +sVsubmarine +p16494 +I32 +sVkhoo-controlled +p16495 +I4 +sVoutnumbered +p16496 +I32 +sVseasonal +p16497 +I32 +sVpower-train +p16498 +I32 +sVassembling +p16499 +I32 +sVdeparted +p16500 +I32 +sVproposed +p16501 +I104 +sVunemployment +p16502 +I46 +sVshapiro +p16503 +I12 +sVewall +p16504 +I32 +sVlaptop +p16505 +I32 +sVplain-talking +p16506 +I32 +sVproposes +p16507 +I44 +sVgrades +p16508 +I36 +sVboveri +p16509 +I4 +sVmeta +p16510 +I4 +sVpurchasing +p16511 +I36 +sVfood-store +p16512 +I32 +sVincontrovertible +p16513 +I32 +sVbreaching +p16514 +I32 +sVenteprises +p16515 +I4 +sVstrenuously +p16516 +I32 +sVglitches +p16517 +I32 +sVeli +p16518 +I4 +sVmonitored +p16519 +I32 +sVgreenwich +p16520 +I4 +sVelm +p16521 +I4 +sVniggers +p16522 +I32 +sVcherry +p16523 +I8 +sVbuses +p16524 +I32 +sVnow-canceled +p16525 +I32 +sVpharmacy +p16526 +I4 +sVloan-rescheduling +p16527 +I32 +sVbrainstorming +p16528 +I32 +sVbraverman +p16529 +I12 +sVallegis +p16530 +I4 +sVtechnological +p16531 +I34 +sVels +p16532 +I4 +sVlci +p16533 +I4 +sVinterprets +p16534 +I32 +sVhumanity +p16535 +I32 +sVgave +p16536 +I32 +sVlower-level +p16537 +I32 +sVanti-missile +p16538 +I32 +sVc.v. +p16539 +I4 +sVcasting +p16540 +I32 +sVskeptics +p16541 +I34 +sVlow-income +p16542 +I32 +sVadvances +p16543 +I38 +sVbreaks +p16544 +I32 +sVcoryphees +p16545 +I32 +sVright-wing +p16546 +I32 +sVaddicts +p16547 +I32 +sVreyna +p16548 +I8 +sVgags +p16549 +I32 +sVupturn +p16550 +I32 +sVcultural +p16551 +I32 +sVexxon +p16552 +I2 +sVdescending +p16553 +I32 +sVsumitomo-group +p16554 +I4 +sVoverregulation +p16555 +I32 +sVbattled +p16556 +I32 +sVjudge +p16557 +I46 +sVappearing +p16558 +I32 +sVrods +p16559 +I32 +sVadvanced +p16560 +I46 +sVapart +p16561 +I36 +sVamok +p16562 +I32 +sVwhen-issued +p16563 +I32 +sVnora +p16564 +I4 +sVintertwined +p16565 +I32 +sVblacklisted +p16566 +I32 +sVgift +p16567 +I32 +sVzeal +p16568 +I32 +sVcontradict +p16569 +I32 +sVgifted +p16570 +I32 +sVorlando +p16571 +I12 +sVself-imposed +p16572 +I32 +sVdivers +p16573 +I32 +sVspecific +p16574 +I32 +sVrenamed +p16575 +I32 +sVbroadcaster +p16576 +I32 +sVoffices +p16577 +I100 +sVofficer +p16578 +I98 +sVarbitrary +p16579 +I32 +sVamos +p16580 +I12 +sVsatiated +p16581 +I32 +sVballoting +p16582 +I32 +sViroquois +p16583 +I4 +sVtilley +p16584 +I12 +sVhunt +p16585 +I44 +sVshort-maturity +p16586 +I32 +sVsuccessfully +p16587 +I32 +sVproudly +p16588 +I32 +sVjennifer +p16589 +I2 +sVclucks +p16590 +I32 +sVclubs +p16591 +I32 +sVadieu +p16592 +I32 +sVmeters +p16593 +I32 +sVelection +p16594 +I36 +sVdispleasure +p16595 +I32 +sVescape +p16596 +I32 +sVadvertise +p16597 +I32 +sVwrite-in +p16598 +I32 +sVdoorstep +p16599 +I32 +sVgraze +p16600 +I32 +sVop-ed +p16601 +I32 +sVembodied +p16602 +I32 +sVsentenced +p16603 +I32 +sVextinction +p16604 +I32 +sVcooper +p16605 +I14 +sVcombat +p16606 +I32 +sVsep. +p16607 +I2 +sVricher +p16608 +I36 +sVicc +p16609 +I4 +sVmemos +p16610 +I36 +sVear +p16611 +I32 +sVcompanions +p16612 +I32 +sVicg +p16613 +I4 +sVjolt +p16614 +I32 +sVice +p16615 +I36 +sVtotals +p16616 +I40 +sVcng +p16617 +I4 +sVcooped +p16618 +I32 +sVnewsprint +p16619 +I36 +sVperiod-vaulting +p16620 +I32 +sVbanxquote +p16621 +I4 +sVcnn +p16622 +I4 +sVfoote +p16623 +I4 +sVmystifies +p16624 +I32 +sVeffluent +p16625 +I32 +sVshamir +p16626 +I14 +sVchristmas +p16627 +I4 +sVespionage +p16628 +I32 +sVmosquito +p16629 +I4 +sVcore +p16630 +I32 +sVgovett +p16631 +I4 +sVdropped +p16632 +I32 +sVcorn +p16633 +I36 +sVtruer +p16634 +I40 +sVoverexposure +p16635 +I32 +sVdisappeared +p16636 +I32 +sVdiscount +p16637 +I44 +sVstaunchly +p16638 +I32 +sVtwa +p16639 +I4 +sVnewcomer +p16640 +I32 +sVinflections +p16641 +I32 +sVpermitted +p16642 +I32 +sVchapter +p16643 +I36 +sVharmful +p16644 +I32 +sVlimitation +p16645 +I32 +sVcensus +p16646 +I12 +sVeaves +p16647 +I12 +sVoverproducing +p16648 +I32 +sVcowboy +p16649 +I32 +sVattacks +p16650 +I32 +sVbennes +p16651 +I6 +sVplum +p16652 +I32 +sVburbank +p16653 +I4 +sVnuclear-weapons +p16654 +I32 +sVplunging +p16655 +I32 +sVle +p16656 +I34 +sVdinner +p16657 +I44 +sVmisleading +p16658 +I36 +sVensure +p16659 +I32 +sVlachenbruch +p16660 +I4 +sVsteadily +p16661 +I32 +sVefforts +p16662 +I102 +sVmmm +p16663 +I8 +sVreporterof +p16664 +I4 +sVcoal-management +p16665 +I32 +sVduke +p16666 +I4 +sVprimitive +p16667 +I32 +sVhighest-paid +p16668 +I32 +sVdials +p16669 +I32 +sVfroze +p16670 +I32 +sVrye +p16671 +I4 +sVpresence +p16672 +I32 +sVcivil +p16673 +I44 +sVpuzzle +p16674 +I32 +sVcoincidentally +p16675 +I32 +sVobtaining +p16676 +I32 +sVobscene +p16677 +I32 +sVanathema +p16678 +I32 +sVaccommodate +p16679 +I32 +sVentrepreneur +p16680 +I32 +sVahp +p16681 +I12 +sVfinely +p16682 +I32 +sVbats +p16683 +I32 +sVranalli +p16684 +I8 +sVdissenting +p16685 +I32 +sVbeehives +p16686 +I32 +sVupkeep +p16687 +I32 +sVemigrate +p16688 +I32 +sVcorroborating +p16689 +I32 +sVexisted +p16690 +I32 +sVrely +p16691 +I32 +sValarmed +p16692 +I32 +sVtips +p16693 +I32 +sVucc +p16694 +I8 +sVpearl +p16695 +I4 +sVthick-steel-plate +p16696 +I32 +sVindispensable +p16697 +I32 +sVbankcard +p16698 +I4 +sVwhy +p16699 +I38 +sVvirgin +p16700 +I4 +sVanderson +p16701 +I12 +sVfought +p16702 +I32 +sVtowing +p16703 +I32 +sVcrews +p16704 +I36 +sVfairness +p16705 +I32 +sVgin +p16706 +I32 +sVgil +p16707 +I4 +sVoil-well +p16708 +I32 +sVlumbermen +p16709 +I36 +sVquestionable +p16710 +I32 +sVhead +p16711 +I100 +sVmedium +p16712 +I32 +sVamateur +p16713 +I32 +sVabrams +p16714 +I4 +sVattempted +p16715 +I32 +sVheal +p16716 +I32 +sVdifferences +p16717 +I34 +sVdiscourage +p16718 +I32 +sVacute +p16719 +I32 +sVpayable +p16720 +I32 +sVheat +p16721 +I36 +sVilluminating +p16722 +I4 +sVuncle +p16723 +I36 +sVsatisfactorily +p16724 +I32 +sVsolar +p16725 +I32 +sVtacky +p16726 +I32 +sVinsider-trading +p16727 +I36 +sVremoved +p16728 +I32 +sVdump +p16729 +I32 +sVprice/earnings +p16730 +I32 +sVattesting +p16731 +I32 +sVreconstituted +p16732 +I32 +sVcounsel +p16733 +I96 +sVportions +p16734 +I36 +sVcity-based +p16735 +I4 +sVrenominating +p16736 +I32 +sVversions +p16737 +I32 +sVmuster +p16738 +I32 +sVquadrennial +p16739 +I32 +sVlopping +p16740 +I32 +sVhigh-powered +p16741 +I32 +sVbids +p16742 +I34 +sVdonald +p16743 +I6 +sVporky +p16744 +I4 +sVruined +p16745 +I32 +sVhigher-salaried +p16746 +I32 +sVutah-based +p16747 +I4 +sVphosphate +p16748 +I4 +sVsimplifying +p16749 +I32 +sVsubmitting +p16750 +I32 +sVwrongdoers +p16751 +I32 +sVusher +p16752 +I32 +sVzodiac +p16753 +I4 +sVlimited-service +p16754 +I32 +sVarw +p16755 +I8 +sVpanicky +p16756 +I32 +sVpenal +p16757 +I32 +sVtrim +p16758 +I32 +sVinfinet +p16759 +I6 +sVimpropriety +p16760 +I32 +sVintermittent +p16761 +I32 +sVknees +p16762 +I32 +sVwealthy +p16763 +I32 +sVpawing +p16764 +I2 +sVkaufman +p16765 +I14 +sVpugnacious +p16766 +I32 +sVcardillo +p16767 +I4 +sVsometime +p16768 +I34 +sVaffordability +p16769 +I32 +sVpuat +p16770 +I4 +sVhamm +p16771 +I8 +sVtrip +p16772 +I36 +sVconstructed +p16773 +I32 +sVpipe +p16774 +I32 +sVradically +p16775 +I32 +sVnl +p16776 +I4 +sVfaithful +p16777 +I32 +sVpledging +p16778 +I8 +sVno +p16779 +I110 +sVhart +p16780 +I2 +sVwhereas +p16781 +I34 +sVwhen +p16782 +I110 +sVproceedings +p16783 +I32 +sVtim +p16784 +I6 +sVreadonly +p16785 +I32 +sVfujitsu +p16786 +I6 +sValleghany +p16787 +I6 +sVpapers +p16788 +I36 +sVtie +p16789 +I32 +sVmackinsey +p16790 +I4 +sVboller/coates/spadaro +p16791 +I4 +sVnu +p16792 +I8 +sVpanay +p16793 +I4 +sVundeniably +p16794 +I32 +sVpicture +p16795 +I36 +sVincestuous +p16796 +I32 +sVpermitting +p16797 +I32 +sVreconsider +p16798 +I36 +sVphoenix +p16799 +I14 +sVloan-loss +p16800 +I32 +sVliquidate +p16801 +I32 +sVmasco +p16802 +I14 +sVfootball +p16803 +I36 +sVuniformly +p16804 +I32 +sVsiegler +p16805 +I4 +sVtwain +p16806 +I32 +sVchimpanzee +p16807 +I32 +sVdischarge +p16808 +I32 +sVspy +p16809 +I36 +sVsaxophonist +p16810 +I32 +sVyevtushenko +p16811 +I4 +sVdeisz +p16812 +I4 +sVyounger +p16813 +I32 +sVfaster +p16814 +I40 +sVn. +p16815 +I4 +sVaustralians +p16816 +I4 +sVdeep-seated +p16817 +I32 +sVvigorously +p16818 +I32 +sVyacht +p16819 +I4 +sVmemorial +p16820 +I36 +sVwithhold +p16821 +I32 +sVcathleen +p16822 +I2 +sVvietnam +p16823 +I6 +sVremarked +p16824 +I32 +sVserious +p16825 +I36 +sVnuclei +p16826 +I32 +sVstacks +p16827 +I32 +sVprice-slashing +p16828 +I32 +sVmismanaged +p16829 +I32 +sVcoach +p16830 +I36 +sVremarkable +p16831 +I32 +sVimpression +p16832 +I32 +sVbrokerages +p16833 +I36 +sVrob +p16834 +I32 +sValternatives +p16835 +I32 +sVfocus +p16836 +I36 +sVdeliveries +p16837 +I32 +sVleads +p16838 +I96 +sVroy +p16839 +I6 +sVmarion +p16840 +I4 +sVbaine +p16841 +I4 +sVemployee-compensation +p16842 +I32 +sVagaricus +p16843 +I32 +sVate +p16844 +I32 +sVcolleen +p16845 +I2 +sVremarkably +p16846 +I32 +sVdisplaying +p16847 +I32 +sVrow +p16848 +I36 +sVnicotine-stained +p16849 +I32 +sVprotest +p16850 +I36 +sVchocolate-chunk +p16851 +I32 +sVeverything +p16852 +I36 +sVtele-communications +p16853 +I14 +sVbulging +p16854 +I32 +sVicy +p16855 +I32 +sVfairy-tale +p16856 +I32 +sVpassage +p16857 +I32 +sVenvironment +p16858 +I40 +sVcharge +p16859 +I40 +sVasking +p16860 +I32 +sVpromoting +p16861 +I32 +sVweakening +p16862 +I32 +sVring-shaped +p16863 +I32 +sVbatus +p16864 +I4 +sVsing +p16865 +I32 +sVgoodyear +p16866 +I14 +sVprop +p16867 +I32 +sVoverwrought +p16868 +I32 +sVshoeshine +p16869 +I32 +sVmethyl +p16870 +I32 +sVfabulously +p16871 +I32 +sVlie-detector +p16872 +I32 +sVbroadly +p16873 +I32 +sVmillers +p16874 +I4 +sVcharnel +p16875 +I32 +sVtrident +p16876 +I4 +sVanyway +p16877 +I32 +sVuntenable +p16878 +I32 +sVartwork +p16879 +I32 +sVcook +p16880 +I4 +sVemphasized +p16881 +I32 +sVcash-laden +p16882 +I32 +sVcool +p16883 +I32 +sVdenounced +p16884 +I32 +sVtortillas +p16885 +I32 +sVclouds +p16886 +I4 +sVhour +p16887 +I32 +sVlevel +p16888 +I100 +sVembarrassment +p16889 +I32 +sVposts +p16890 +I44 +sVhawaii +p16891 +I4 +sVculminating +p16892 +I32 +sVstandards +p16893 +I36 +sVcouched +p16894 +I32 +sVholliston +p16895 +I4 +sVasset-management +p16896 +I32 +sVcnh +p16897 +I4 +sVphillip +p16898 +I6 +sVquick +p16899 +I46 +sVlever +p16900 +I32 +sVred-faced +p16901 +I32 +sVeroding +p16902 +I32 +sVpublic-sector +p16903 +I32 +sVworrell +p16904 +I12 +sVpork +p16905 +I38 +sVspecializes +p16906 +I32 +sVsays +p16907 +I110 +sVtougher +p16908 +I32 +sVtrend +p16909 +I32 +sVinjunction +p16910 +I32 +sVpore +p16911 +I32 +sVcash-strapped +p16912 +I32 +sVsteelmakers +p16913 +I32 +sVwidened +p16914 +I40 +sVmich. +p16915 +I4 +sVworkplace-related +p16916 +I32 +sVdried +p16917 +I32 +sVcomforting +p16918 +I32 +sVottoman +p16919 +I4 +sVaugment +p16920 +I32 +sVknowlton +p16921 +I12 +sVtoughen +p16922 +I36 +sVchicken +p16923 +I36 +sVsubstitute +p16924 +I32 +sVdrinks +p16925 +I32 +sVcommodity-chip +p16926 +I32 +sVdistaste +p16927 +I32 +sVendangering +p16928 +I32 +sVstressful +p16929 +I32 +sVconstitution +p16930 +I44 +sVcontracted +p16931 +I40 +sVc.o.m.b. +p16932 +I6 +sVdebate +p16933 +I32 +sVbuick +p16934 +I8 +sVdeleted +p16935 +I32 +sVescorted +p16936 +I32 +sVspurring +p16937 +I32 +sVgoes +p16938 +I32 +sVreply +p16939 +I32 +sVamounting +p16940 +I32 +sVdiscotheques +p16941 +I32 +sVseaman +p16942 +I32 +sVpose +p16943 +I36 +sVevolved +p16944 +I32 +sVc.i.t. +p16945 +I4 +sVunexpired +p16946 +I32 +sVhigher-than-expected +p16947 +I32 +sVhairs +p16948 +I32 +sVsuperstitions +p16949 +I38 +sVwater +p16950 +I36 +sVpioneered +p16951 +I32 +sVfluke +p16952 +I32 +sVentertain +p16953 +I32 +sVbaseball +p16954 +I32 +sVtwentieth +p16955 +I4 +sVgroups +p16956 +I36 +sVwaynesboro +p16957 +I4 +sVconstructive +p16958 +I32 +sVnaylor +p16959 +I12 +sVsupplying +p16960 +I32 +sVunfinished +p16961 +I32 +sVunidentified +p16962 +I32 +sVdorin +p16963 +I4 +sVbygone +p16964 +I32 +sVsheriff +p16965 +I36 +sVhealthy +p16966 +I32 +sVchalmers +p16967 +I4 +sVrethink +p16968 +I32 +sVhadn +p16969 +I32 +sVguilty +p16970 +I44 +sVoutlays +p16971 +I40 +sVtanner +p16972 +I4 +sVlaw-abiding +p16973 +I32 +sVjed +p16974 +I4 +sVdescended +p16975 +I32 +sVexams +p16976 +I32 +sVhoopsters +p16977 +I4 +sVnoticeably +p16978 +I32 +sVseward +p16979 +I12 +sVrafael +p16980 +I4 +sVking +p16981 +I38 +sVlowers +p16982 +I36 +sVemerge +p16983 +I36 +sVdarby +p16984 +I4 +sVmccormick +p16985 +I10 +sVsurgical/critical +p16986 +I4 +sVsoybeans +p16987 +I36 +sVcredited +p16988 +I32 +sVcriers +p16989 +I32 +sVmaximizing +p16990 +I32 +sVbettner +p16991 +I4 +sVshark +p16992 +I36 +sVgouging +p16993 +I32 +sVmorale +p16994 +I36 +sVplo +p16995 +I4 +sVbribery +p16996 +I32 +sVpreventing +p16997 +I32 +sVballets +p16998 +I34 +sVshelley +p16999 +I4 +sVisles +p17000 +I4 +sVironically +p17001 +I10 +sVdecatur +p17002 +I2 +sVshorter-maturities +p17003 +I32 +sVrussell +p17004 +I6 +sVfuror +p17005 +I32 +sVearner +p17006 +I32 +sVwonderful +p17007 +I32 +sVconfounded +p17008 +I32 +sVthird-quarter +p17009 +I32 +sVgruenberg +p17010 +I4 +sVvariously +p17011 +I32 +sVstored +p17012 +I32 +sVhandles +p17013 +I32 +sVmsl +p17014 +I6 +sVandy +p17015 +I4 +sVgartner +p17016 +I4 +sVfrothy +p17017 +I32 +sVmemory +p17018 +I46 +sVlump +p17019 +I32 +sVmicron +p17020 +I4 +sVaustralian +p17021 +I14 +sVsymmetrical +p17022 +I32 +sVtoday +p17023 +I46 +sVendorsing +p17024 +I32 +sVmilford +p17025 +I12 +sVprods +p17026 +I32 +sVreworking +p17027 +I32 +sVconductor +p17028 +I32 +sVsessions +p17029 +I32 +sVspiced +p17030 +I32 +sVflying +p17031 +I34 +sValasdair +p17032 +I4 +sVlamboley +p17033 +I4 +sVtagamet +p17034 +I6 +sVchocolate +p17035 +I36 +sVcasey +p17036 +I14 +sVfuel +p17037 +I36 +sVplayroom +p17038 +I32 +sVbeers +p17039 +I32 +sVthenceforward +p17040 +I32 +sVshafts +p17041 +I32 +sVcases +p17042 +I36 +sVfianna +p17043 +I4 +sVinhabit +p17044 +I32 +sVinsights +p17045 +I32 +sVautumn +p17046 +I32 +sVedible +p17047 +I32 +sVrealigned +p17048 +I32 +sVbrobeck +p17049 +I12 +sVjulius +p17050 +I6 +sVlocal +p17051 +I38 +sVmodified +p17052 +I32 +sVonboard +p17053 +I32 +sVjudd +p17054 +I4 +sVdistricts +p17055 +I32 +sVms. +p17056 +I14 +sVminimum +p17057 +I32 +sVbugs +p17058 +I8 +sVnauman +p17059 +I4 +sVseven-page +p17060 +I32 +sVcounterbid +p17061 +I32 +sVferry +p17062 +I32 +sVmodifier +p17063 +I32 +sVunconditional +p17064 +I32 +sVlighthearted +p17065 +I32 +sVdeservedly +p17066 +I32 +sVperformer +p17067 +I32 +sVdesks +p17068 +I32 +sVnursing +p17069 +I32 +sVfigure +p17070 +I32 +sVdownfall +p17071 +I32 +sVchickasha +p17072 +I4 +sVcritic +p17073 +I32 +sVdiebold +p17074 +I8 +sVunemployment-insurance +p17075 +I32 +sVperformed +p17076 +I32 +sVfirst-generation +p17077 +I32 +sVmemotec +p17078 +I14 +sVi.m.s. +p17079 +I4 +sVquacks +p17080 +I32 +sVprovoke +p17081 +I32 +sVconversely +p17082 +I2 +sVswedish +p17083 +I14 +sVprice-fixing +p17084 +I32 +sVrequirements +p17085 +I32 +sVrevising +p17086 +I4 +sVcoalitions +p17087 +I32 +sVharsco +p17088 +I12 +sVsailboat +p17089 +I32 +sVsecured +p17090 +I32 +sVrosen +p17091 +I4 +sVmismanagement +p17092 +I32 +sVzwyer +p17093 +I4 +sVregistering +p17094 +I32 +sVsoady +p17095 +I8 +sVvital +p17096 +I36 +sVcardinal +p17097 +I4 +sVfourth +p17098 +I38 +sVplus +p17099 +I36 +sVsubsidiaries +p17100 +I36 +sVebnc +p17101 +I4 +sVtbs +p17102 +I8 +sVspringfield +p17103 +I4 +sVetched +p17104 +I32 +sVnarrowly +p17105 +I32 +sVlevy +p17106 +I44 +sVdiagnosing +p17107 +I32 +sVparamount +p17108 +I36 +sVky. +p17109 +I4 +sVmckerrow +p17110 +I4 +sVinformation +p17111 +I100 +sVbroad +p17112 +I36 +sVbluhdorn +p17113 +I4 +sVlogistical +p17114 +I32 +sVscoff +p17115 +I32 +sVmet-coil +p17116 +I2 +sVsought-after +p17117 +I32 +sVcrashed +p17118 +I32 +sVcontingency +p17119 +I32 +sVbirthday +p17120 +I36 +sVtipped +p17121 +I32 +sVrepresentations +p17122 +I32 +sVrenovation +p17123 +I32 +sVsteal +p17124 +I32 +sVdoor-to-door-delivery +p17125 +I32 +sVdisheartening +p17126 +I32 +sVsyndicates +p17127 +I32 +sVbranches +p17128 +I32 +sVdrained +p17129 +I32 +sVcommodity +p17130 +I46 +sVdavidoff +p17131 +I12 +sVinform +p17132 +I32 +sVmalaise +p17133 +I32 +sVsyndicated +p17134 +I32 +sVbmws +p17135 +I4 +sVimminent +p17136 +I32 +sVinvests +p17137 +I32 +sVunitek +p17138 +I4 +sVlamented +p17139 +I32 +sVrefund +p17140 +I36 +sVexclusive +p17141 +I32 +sVcomfort +p17142 +I32 +sVacquiescent +p17143 +I32 +sVfurnished +p17144 +I32 +sVundervalued +p17145 +I32 +sVconstituents +p17146 +I32 +sVspigot +p17147 +I32 +sVcoordinating +p17148 +I36 +sVmainly +p17149 +I32 +sVmuckrakers +p17150 +I32 +sVobjectionable +p17151 +I32 +sVtasted +p17152 +I32 +sVducklings +p17153 +I32 +sVpenetrate +p17154 +I32 +sVamdur +p17155 +I4 +sVeaf +p17156 +I4 +sVrapport +p17157 +I32 +sVgoodwill +p17158 +I32 +sVstock-index +p17159 +I32 +sVblocked +p17160 +I32 +sVemits +p17161 +I32 +sVleases +p17162 +I32 +sVgte +p17163 +I14 +sVwallace +p17164 +I12 +sVdeterminations +p17165 +I34 +sVhandgun +p17166 +I32 +sVcomic +p17167 +I32 +sVcheerleaders +p17168 +I32 +sVglowing +p17169 +I32 +sVlow-cost +p17170 +I32 +sVplatform +p17171 +I32 +sVoffers +p17172 +I36 +sVmillon +p17173 +I4 +sVgtx +p17174 +I8 +sVcoordinated +p17175 +I32 +sVendless +p17176 +I32 +sVloophole +p17177 +I32 +sVhappened +p17178 +I32 +sVoakland +p17179 +I4 +sVshp +p17180 +I8 +sVqualifies +p17181 +I32 +sVweathers +p17182 +I4 +sVappraised +p17183 +I32 +sVanti-nazi +p17184 +I32 +sVradicals +p17185 +I32 +sVsmall-volume +p17186 +I32 +sVsight +p17187 +I32 +sVdelighted +p17188 +I32 +sVcountrywide +p17189 +I8 +sVwarranted +p17190 +I32 +sVqualified +p17191 +I32 +sVhamilton +p17192 +I4 +sVtwo-count +p17193 +I32 +sVdismisses +p17194 +I36 +sVhistorically +p17195 +I34 +sVfeature +p17196 +I32 +sVcar-parts +p17197 +I32 +sVpost-big +p17198 +I32 +sVbaldrige +p17199 +I4 +sVcampuses +p17200 +I32 +sVrescind +p17201 +I32 +sVd.h. +p17202 +I4 +sVsuperlatives +p17203 +I32 +sVterm +p17204 +I32 +sVequality +p17205 +I32 +sVname +p17206 +I36 +sVstabilize +p17207 +I36 +sVopera +p17208 +I36 +sVclutch +p17209 +I32 +sVabalone +p17210 +I38 +sVadvent +p17211 +I32 +sVlaborers +p17212 +I32 +sVslumps +p17213 +I32 +sVvt. +p17214 +I4 +sVpossibilities +p17215 +I32 +sVrealistic +p17216 +I32 +sVrhetorical +p17217 +I32 +sVbullion +p17218 +I2 +sVtribune +p17219 +I4 +sVj.k. +p17220 +I4 +sVschroder +p17221 +I4 +sVrethinking +p17222 +I32 +sVsteel-fabricating +p17223 +I32 +sVnettlesome +p17224 +I32 +sVailment +p17225 +I32 +sVasbestos-related +p17226 +I32 +sVpopulated +p17227 +I32 +sVhiccups +p17228 +I32 +sVbenito +p17229 +I4 +sVaplenty +p17230 +I32 +sVindianapolis +p17231 +I12 +sVgaps +p17232 +I32 +sVhaul +p17233 +I32 +sVawful +p17234 +I32 +sVbegun +p17235 +I38 +sVdie +p17236 +I32 +sVdistributor +p17237 +I32 +sVgalactic +p17238 +I32 +sVlambasted +p17239 +I32 +sVsuzanne +p17240 +I4 +sVobsession +p17241 +I32 +sVadequately +p17242 +I32 +sValvin +p17243 +I4 +sVintended +p17244 +I100 +sVabdication +p17245 +I32 +sVsplashy +p17246 +I32 +sVultimately +p17247 +I34 +sVparking-brake +p17248 +I32 +sVoutfitting +p17249 +I32 +sVfactors +p17250 +I38 +sVprofit +p17251 +I46 +sVtensions +p17252 +I32 +sVoklahoma +p17253 +I12 +sVindustrial-talc +p17254 +I32 +sVgoodwin +p17255 +I4 +sVfactory +p17256 +I32 +sVcancels +p17257 +I8 +sVtreading +p17258 +I32 +sVattracted +p17259 +I32 +sVsyntech +p17260 +I14 +sVkent +p17261 +I6 +sVmiscast +p17262 +I32 +sVbkn +p17263 +I8 +sVshe +p17264 +I46 +sVmd.-based +p17265 +I4 +sVeagle +p17266 +I4 +sVsubtracts +p17267 +I32 +sVattended +p17268 +I32 +sVtheory +p17269 +I32 +sVhull +p17270 +I32 +sVdispatched +p17271 +I32 +sVisotope +p17272 +I32 +sVchesebrough-pond +p17273 +I12 +sVreimposing +p17274 +I32 +sVunfriendly +p17275 +I40 +sVbumpers +p17276 +I32 +sVfree-market +p17277 +I36 +sVquestioning +p17278 +I32 +sVinconsistent +p17279 +I32 +sVrolls-royce +p17280 +I4 +sVpeelers +p17281 +I32 +sVa&m +p17282 +I4 +sVkelp +p17283 +I32 +sVmadonna-meets-the-duchess-of-windsor +p17284 +I4 +sVnivard-flornoy +p17285 +I4 +sVimpose +p17286 +I36 +sVdirk +p17287 +I4 +sVanmc +p17288 +I6 +sVshake-ups +p17289 +I32 +sVmotion +p17290 +I36 +sVturn +p17291 +I32 +sVplace +p17292 +I36 +sVwriv-tv +p17293 +I2 +sVswing +p17294 +I40 +sVcharleston +p17295 +I14 +sVwidow +p17296 +I4 +sVdiscontinued +p17297 +I32 +sVorigin +p17298 +I32 +sVsuspend +p17299 +I96 +sVmerrill +p17300 +I14 +sVextinguished +p17301 +I32 +sVsurviving +p17302 +I32 +sVrevenue +p17303 +I110 +sVbudweiser +p17304 +I4 +sVtreating +p17305 +I32 +sVfaculty +p17306 +I32 +sVsymbolic +p17307 +I32 +sVmcknew +p17308 +I12 +sVoversaw +p17309 +I32 +sVoverblown +p17310 +I32 +sVclumsy +p17311 +I32 +sVsoaring +p17312 +I32 +sVnoyce +p17313 +I4 +sVcommissioners +p17314 +I32 +sVco-head +p17315 +I32 +sVshortchange +p17316 +I32 +sVexpenditure +p17317 +I32 +sVgrowers +p17318 +I32 +sVarray +p17319 +I32 +sVcontinent +p17320 +I32 +sVgeorge +p17321 +I14 +sVengineer +p17322 +I32 +sVrented +p17323 +I32 +sVin-state +p17324 +I32 +sVgiven +p17325 +I42 +sVnecessarily +p17326 +I32 +sVconsultations +p17327 +I32 +sVdistrict +p17328 +I108 +sVstuck +p17329 +I32 +sVelkay +p17330 +I4 +sVtrillion +p17331 +I32 +sVeurope +p17332 +I14 +sVcullen +p17333 +I4 +sVplastic +p17334 +I32 +sVbahamas +p17335 +I4 +sVreturns +p17336 +I44 +sVconservation +p17337 +I36 +sVlobbyists +p17338 +I32 +sVconvention +p17339 +I36 +sVlotteries +p17340 +I32 +sVlegally +p17341 +I32 +sVwhite +p17342 +I46 +sVgives +p17343 +I32 +sVhud +p17344 +I2 +sVexploring +p17345 +I32 +sVhug +p17346 +I40 +sVwrongdoing +p17347 +I32 +sVhub +p17348 +I36 +sVcope +p17349 +I32 +sVrevue +p17350 +I4 +sVseason +p17351 +I32 +sVcirculated +p17352 +I32 +sValan +p17353 +I6 +sVhut +p17354 +I4 +sVreleased +p17355 +I32 +sVhuw +p17356 +I8 +sVarticulately +p17357 +I32 +sVquirky +p17358 +I32 +sVshirley +p17359 +I4 +sVlaurdan +p17360 +I4 +sVfreeze +p17361 +I32 +sVholder +p17362 +I44 +sVbundesbank +p17363 +I4 +sVspecify +p17364 +I32 +sVpopulation +p17365 +I100 +sVwide +p17366 +I32 +sVunfortunately +p17367 +I34 +sVeight-foot +p17368 +I32 +sVback-to-basics +p17369 +I32 +sVcurently +p17370 +I32 +sVbikers +p17371 +I32 +sVrequire +p17372 +I32 +sVresemble +p17373 +I32 +sVdiplomatic +p17374 +I32 +sVconstanza +p17375 +I4 +sVdata-storing +p17376 +I32 +sVspokeswoman +p17377 +I32 +sVbrown-forman +p17378 +I4 +sVcomputer +p17379 +I38 +sVcoat +p17380 +I32 +sVcards +p17381 +I36 +sVpoisoning +p17382 +I32 +sVmarines +p17383 +I4 +sVoutcome +p17384 +I32 +sVoath +p17385 +I4 +sVand +p17386 +I126 +sVinterest-rate +p17387 +I32 +sVdrahuschak +p17388 +I4 +sVstock-swap +p17389 +I32 +sVana +p17390 +I4 +sVchloe +p17391 +I4 +sVsagging +p17392 +I32 +sVann +p17393 +I14 +sVconfessed +p17394 +I32 +sVworcester +p17395 +I4 +sVreno +p17396 +I12 +sVmateo +p17397 +I4 +sVguyford +p17398 +I8 +sVredford +p17399 +I4 +sVmater +p17400 +I36 +sVlitan +p17401 +I8 +sVsuspense +p17402 +I32 +sVrent +p17403 +I32 +sVnominating +p17404 +I32 +sVwell-received +p17405 +I32 +sVexchanging +p17406 +I32 +sVsells +p17407 +I44 +sVwyomissing +p17408 +I8 +sVconfesses +p17409 +I32 +sVany +p17410 +I46 +sVweldon +p17411 +I8 +sVprosperity +p17412 +I32 +sVconversion +p17413 +I32 +sVlarceny +p17414 +I32 +sVpapandreou +p17415 +I12 +sVtranscription +p17416 +I32 +sVideas +p17417 +I36 +sVwaldholz +p17418 +I4 +sVwade +p17419 +I36 +sVdining +p17420 +I32 +sVemphasis +p17421 +I32 +sVblacklisting +p17422 +I32 +sVgideon +p17423 +I4 +sVhatton +p17424 +I12 +sVmot +p17425 +I4 +sVstrengths +p17426 +I32 +sVblunt +p17427 +I36 +sVinvestor-protection +p17428 +I32 +sVurge +p17429 +I36 +sVsure +p17430 +I38 +sVmultiple +p17431 +I32 +sVparty-plan +p17432 +I32 +sVprobed +p17433 +I4 +sVindelible +p17434 +I32 +sVsherman +p17435 +I12 +sVbetrayal +p17436 +I36 +sVclearer +p17437 +I32 +sVfalls +p17438 +I36 +sVfca +p17439 +I4 +sVchamps +p17440 +I32 +sVfcc +p17441 +I14 +sVvitality +p17442 +I32 +sVstormed +p17443 +I32 +sVfreshman +p17444 +I32 +sVlibrarian +p17445 +I32 +sVegyptian +p17446 +I4 +sVcleared +p17447 +I36 +sVsurface-to-surface +p17448 +I32 +sVlasser +p17449 +I12 +sVprobes +p17450 +I32 +sVtax-overhaul +p17451 +I32 +sVcook-off +p17452 +I32 +sVneuro +p17453 +I4 +sVrosalie +p17454 +I6 +sVtax-cut +p17455 +I32 +sVconsidered +p17456 +I34 +sVseafood +p17457 +I32 +sVlater +p17458 +I46 +sVoreffice +p17459 +I8 +sVtriple-b-plus +p17460 +I32 +sVtrafficking +p17461 +I32 +sVhear +p17462 +I32 +sVsenior +p17463 +I100 +sVdenationalized +p17464 +I32 +sVbogdanich +p17465 +I4 +sVcatalyst +p17466 +I4 +sVslope +p17467 +I4 +sVperpetrated +p17468 +I32 +sVillusory +p17469 +I32 +sVoften-ignored +p17470 +I32 +sVthen-standard +p17471 +I32 +sVcheat +p17472 +I32 +sVdecoder +p17473 +I32 +sVcheap +p17474 +I36 +sVfour-city +p17475 +I32 +sVscanditoy +p17476 +I4 +sVtroy +p17477 +I40 +sVspaces +p17478 +I32 +sVsustained +p17479 +I32 +sVnli +p17480 +I8 +sVsilos +p17481 +I32 +sVdundee +p17482 +I4 +sVhaskins +p17483 +I4 +sVtrot +p17484 +I32 +sVblue-eyed +p17485 +I32 +sVtight-lipped +p17486 +I32 +sVprincipled +p17487 +I32 +sVfavor +p17488 +I32 +sVsemi-obscene +p17489 +I32 +sVredoute +p17490 +I4 +sVstate +p17491 +I110 +sVpro-iran +p17492 +I32 +sVcrime +p17493 +I36 +sVexamples +p17494 +I34 +sVswamped +p17495 +I32 +sVpolicy-setting +p17496 +I32 +sVexplicitly +p17497 +I32 +sVmdest +p17498 +I12 +sVhaughey +p17499 +I12 +sVcautioned +p17500 +I32 +sVholding-company +p17501 +I32 +sVwool +p17502 +I32 +sVdreaded +p17503 +I32 +sVinventor +p17504 +I32 +sVnarrows +p17505 +I36 +sVhoyt +p17506 +I4 +sVowes +p17507 +I32 +sVberton +p17508 +I4 +sVearly-loss +p17509 +I32 +sVjazz +p17510 +I46 +sVbroadest +p17511 +I32 +sVchicken-restaurant +p17512 +I32 +sVamstrad +p17513 +I14 +sVu.s.-soviet +p17514 +I4 +sVlighter +p17515 +I32 +sVrendition +p17516 +I32 +sVhigh-quality +p17517 +I32 +sVhedge +p17518 +I32 +sVinstalled +p17519 +I32 +sVrereading +p17520 +I8 +sVpublic-works +p17521 +I32 +sVtourists +p17522 +I32 +sVreveal +p17523 +I32 +sVregarding +p17524 +I32 +sVinterco +p17525 +I4 +sVborohydride +p17526 +I32 +sVreser +p17527 +I12 +sValuminum +p17528 +I36 +sVfrustrated +p17529 +I34 +sVdramas +p17530 +I32 +sVobliterate +p17531 +I32 +sVnaked +p17532 +I36 +sVjokes +p17533 +I32 +sVembassy +p17534 +I46 +sVpredicted +p17535 +I32 +sVnetto +p17536 +I4 +sVscott +p17537 +I4 +sVregistry +p17538 +I32 +sVpants +p17539 +I32 +sVdiscussing +p17540 +I36 +sVbidu +p17541 +I4 +sVdeterring +p17542 +I32 +sVcomanche +p17543 +I4 +sVignored +p17544 +I32 +sVx-ray +p17545 +I4 +sVvariability +p17546 +I32 +sVencourages +p17547 +I32 +sVviolated +p17548 +I96 +sVreplies +p17549 +I32 +sVclosures +p17550 +I32 +sVbargain +p17551 +I36 +sVconnections +p17552 +I32 +sVcollege +p17553 +I46 +sVslashing +p17554 +I32 +sVignores +p17555 +I32 +sVparking +p17556 +I32 +sVapologies +p17557 +I32 +sVstanley +p17558 +I14 +sVlng +p17559 +I4 +sVless-favored +p17560 +I32 +sVsmiling +p17561 +I32 +sVsunworld +p17562 +I14 +sVexam +p17563 +I32 +sVsurfaces +p17564 +I32 +sVmadison +p17565 +I4 +sVdetect +p17566 +I36 +sVm.d.c. +p17567 +I4 +sVmortgage +p17568 +I36 +sVfarmers +p17569 +I96 +sVfederal +p17570 +I110 +sVsubsequent +p17571 +I32 +sVreview +p17572 +I44 +sVknappik +p17573 +I4 +sVcirculating +p17574 +I32 +sVcommitments +p17575 +I36 +sVweapons +p17576 +I96 +sVoutside +p17577 +I102 +sVcharters +p17578 +I32 +sVanti-apartheid +p17579 +I38 +sVsurfaced +p17580 +I32 +sVthen-usual +p17581 +I32 +sVok. +p17582 +I4 +sVcasseb +p17583 +I4 +sVtoying +p17584 +I4 +sVarrival +p17585 +I32 +sVmultiplied +p17586 +I32 +sVreceivers +p17587 +I32 +sVoriginated +p17588 +I64 +sVscavengers +p17589 +I32 +sVcarolee +p17590 +I2 +sVtrace +p17591 +I32 +sVinseparable +p17592 +I32 +sVguitar +p17593 +I32 +sVzoot +p17594 +I32 +sVdensely +p17595 +I32 +sVdiners +p17596 +I36 +sVunusually +p17597 +I32 +sVharshly +p17598 +I32 +sVcities +p17599 +I38 +sVcome +p17600 +I36 +sVliggio +p17601 +I4 +sVtriboro +p17602 +I4 +sVreaction +p17603 +I32 +sVlatch +p17604 +I32 +sVacquiring +p17605 +I32 +sVberri +p17606 +I4 +sVlibya +p17607 +I4 +sVefficiency +p17608 +I32 +sVsuccesses +p17609 +I36 +sVregion +p17610 +I32 +sVtermed +p17611 +I32 +sVquiet +p17612 +I36 +sVcontract +p17613 +I36 +sVprompted +p17614 +I32 +sVmanagua +p17615 +I4 +sVcolumnist +p17616 +I32 +sVberry +p17617 +I4 +sVleggett +p17618 +I8 +sVmessel +p17619 +I8 +sVgargles +p17620 +I32 +sVnon-oil +p17621 +I36 +sVrailway +p17622 +I36 +sVadjoin +p17623 +I32 +sVcompensating +p17624 +I32 +sVduty +p17625 +I100 +sVpakistan +p17626 +I6 +sVparatungstate +p17627 +I32 +sVafterwards +p17628 +I32 +sVpox +p17629 +I32 +sVcolor +p17630 +I36 +sVcontinuation +p17631 +I32 +sVnovices +p17632 +I32 +sVrobotics +p17633 +I36 +sVcolony +p17634 +I32 +sVperiod +p17635 +I36 +sVinsist +p17636 +I32 +sVsampling +p17637 +I36 +sVsatisfaction +p17638 +I32 +sVhoard +p17639 +I32 +sVpole +p17640 +I32 +sVwerner +p17641 +I4 +sVjammed +p17642 +I32 +sVassertions +p17643 +I34 +sVgate-side +p17644 +I32 +sVapproval +p17645 +I110 +sVpolo +p17646 +I36 +sVmultibusiness +p17647 +I32 +sVendeavor +p17648 +I32 +sVpoll +p17649 +I32 +sVtwo-year +p17650 +I32 +sVixiz +p17651 +I4 +sVmoore +p17652 +I12 +sVturkey +p17653 +I38 +sViacocca +p17654 +I12 +sVwished +p17655 +I32 +sVa.d. +p17656 +I4 +sVsaudis +p17657 +I4 +sVhoward +p17658 +I14 +sVexempt +p17659 +I36 +sVescalated +p17660 +I32 +sVpetrodollars +p17661 +I32 +sVsubscriber +p17662 +I32 +sVdeposited +p17663 +I32 +sVdeclining +p17664 +I36 +sVpeaceful +p17665 +I32 +sVmade-for-television +p17666 +I32 +sVfeaturing +p17667 +I32 +sVhardly +p17668 +I36 +sVmujahedeen +p17669 +I4 +sVmisunderstandings +p17670 +I32 +sVengine +p17671 +I36 +sVdirection +p17672 +I32 +sVcarlough +p17673 +I8 +sVindirect +p17674 +I32 +sVrobbed +p17675 +I32 +sVreimburse +p17676 +I32 +sVblessing +p17677 +I32 +sVandrew +p17678 +I6 +sVinnkeeper +p17679 +I32 +sVlabib +p17680 +I4 +sVandrei +p17681 +I4 +sVcolo. +p17682 +I4 +sVminister +p17683 +I36 +sVbackers +p17684 +I32 +sVeaters +p17685 +I4 +sVcapitulation +p17686 +I32 +sVcareful +p17687 +I32 +sVirrelevant +p17688 +I32 +sVspirit +p17689 +I32 +sVpilot +p17690 +I32 +sVcase +p17691 +I36 +sVper-capita +p17692 +I10 +sVhughes +p17693 +I14 +sVprompting +p17694 +I32 +sVdiligent +p17695 +I32 +sVamend +p17696 +I32 +sVcolumbia-registered +p17697 +I4 +sVj.p. +p17698 +I14 +sVembodying +p17699 +I32 +sVcash +p17700 +I38 +sVarnold +p17701 +I14 +sVmicrosoft +p17702 +I14 +sVprime-1 +p17703 +I4 +sVcast +p17704 +I32 +sVprime-3 +p17705 +I4 +sVunhealthy +p17706 +I32 +sVshops +p17707 +I36 +sVreaganites +p17708 +I4 +sVcasy +p17709 +I8 +sVslippers +p17710 +I32 +sVpower-circuit +p17711 +I4 +sVcolleague +p17712 +I32 +sVchildless +p17713 +I32 +sVnyt +p17714 +I8 +sVcoupled +p17715 +I42 +sVelgie +p17716 +I4 +sVcrowned +p17717 +I32 +sVprayer +p17718 +I32 +sVtelephone +p17719 +I38 +sVdissident +p17720 +I32 +sVcouples +p17721 +I32 +sVsomeone +p17722 +I34 +sVconverts +p17723 +I36 +sVyear-round +p17724 +I32 +sVmercoil +p17725 +I4 +sVcapping +p17726 +I32 +sVironic +p17727 +I32 +sVrefiners +p17728 +I64 +sVshopkeeper +p17729 +I32 +sVdistiller +p17730 +I32 +sVgermalists +p17731 +I32 +sVparticipant +p17732 +I32 +sVvivid +p17733 +I32 +sVauthor +p17734 +I32 +sVmalveaux +p17735 +I12 +sVgranted +p17736 +I38 +sVpostwar +p17737 +I32 +sVreminded +p17738 +I32 +sVswiss-registered +p17739 +I4 +sVblood-analysis +p17740 +I32 +sVshifts +p17741 +I32 +sVnauslar +p17742 +I12 +sVmanila +p17743 +I6 +sVbuys +p17744 +I36 +sVreminder +p17745 +I32 +sVinsurers +p17746 +I36 +sVevents +p17747 +I38 +sVhorizon +p17748 +I32 +sVweek +p17749 +I38 +sVm&a +p17750 +I4 +sVspurted +p17751 +I32 +sVcase-by-case +p17752 +I32 +sVnge +p17753 +I4 +sVni +p17754 +I8 +sVdrugged +p17755 +I32 +sVnest +p17756 +I36 +sVrefusal +p17757 +I32 +sVpetronius +p17758 +I4 +sVdrives +p17759 +I36 +sVproducers +p17760 +I102 +sVhawkeye +p17761 +I14 +sVmacroeconomic +p17762 +I32 +sVprospered +p17763 +I32 +sVkremlins +p17764 +I32 +sVstatue +p17765 +I32 +sVchanging +p17766 +I36 +sVcptc +p17767 +I4 +sVbarish +p17768 +I4 +sVcartoon +p17769 +I32 +sVvowed +p17770 +I32 +sVelectromagnetism +p17771 +I32 +sVrelies +p17772 +I32 +sVreimposition +p17773 +I32 +sVbreakdowns +p17774 +I32 +sVboehringer +p17775 +I6 +sVrenters +p17776 +I32 +sVweakened +p17777 +I32 +sVpennsylvania +p17778 +I14 +sVbourbon-pecan +p17779 +I32 +sVdesist +p17780 +I32 +sVrosalind +p17781 +I2 +sVphysics +p17782 +I36 +sVstrawberry +p17783 +I32 +sVwithout +p17784 +I98 +sVrelief +p17785 +I34 +sVcomponents +p17786 +I32 +sVdeflated +p17787 +I32 +sVsingle-b +p17788 +I32 +sVtermination +p17789 +I32 +sVmodel +p17790 +I36 +sVreward +p17791 +I32 +sVtempted +p17792 +I32 +sVcommercials +p17793 +I32 +sVbodies +p17794 +I32 +sVjustify +p17795 +I32 +sVwald +p17796 +I4 +sVsoftwood +p17797 +I96 +sVconform +p17798 +I32 +sVtip +p17799 +I40 +sVguided +p17800 +I32 +sVactions +p17801 +I32 +sVclot +p17802 +I36 +sVentrusting +p17803 +I32 +sVviolent +p17804 +I32 +sVcease +p17805 +I32 +sVliberalized +p17806 +I32 +sVharrison +p17807 +I6 +sVpolish +p17808 +I36 +sVsatin +p17809 +I32 +sVroxani +p17810 +I4 +sVcaptured +p17811 +I32 +sVrochelle +p17812 +I4 +sVblow +p17813 +I36 +sVannouncement +p17814 +I32 +sVlaf +p17815 +I4 +sVdragnet +p17816 +I32 +sVnumerical +p17817 +I32 +sVliters +p17818 +I32 +sVrose +p17819 +I44 +sVcaterers +p17820 +I6 +sVseems +p17821 +I32 +sVexcept +p17822 +I32 +sVchurns +p17823 +I32 +sVall-irish +p17824 +I32 +sVcattle-on-feed +p17825 +I32 +sVanti-aircraft +p17826 +I32 +sVsetting +p17827 +I32 +sVbloc +p17828 +I36 +sVrosy +p17829 +I36 +sVsamples +p17830 +I32 +sVpoised +p17831 +I32 +sVsucked +p17832 +I32 +sVzccbs +p17833 +I4 +sVexceeds +p17834 +I32 +sVross +p17835 +I12 +sVscheduled +p17836 +I32 +sVestablishments +p17837 +I32 +sVcarpeting +p17838 +I32 +sVkills +p17839 +I32 +sVkirby +p17840 +I4 +sVmugged +p17841 +I4 +sVfirst-ranked +p17842 +I32 +sVinordinate +p17843 +I32 +sVtruffles +p17844 +I38 +sVvirginia +p17845 +I12 +sVfredericks +p17846 +I8 +sVloaned +p17847 +I32 +sVdofor +p17848 +I12 +sVinflation +p17849 +I46 +sVbrezhnev +p17850 +I4 +sVschedules +p17851 +I32 +sVlingerie +p17852 +I32 +sVaccepted +p17853 +I42 +sVcolorful +p17854 +I32 +sVlimited-partnership +p17855 +I32 +sVfurniture +p17856 +I100 +sVbonding +p17857 +I32 +sVwalt +p17858 +I12 +sVdepot +p17859 +I4 +sVstandstill +p17860 +I32 +sVcoursed +p17861 +I32 +sVparticle +p17862 +I32 +sVkennedy +p17863 +I12 +sVout-of-court +p17864 +I32 +sVerosion +p17865 +I32 +sVreduces +p17866 +I36 +sVstrictly +p17867 +I32 +sVjohann +p17868 +I4 +sVshelf +p17869 +I32 +sVsanity +p17870 +I32 +sVlubin +p17871 +I12 +sVico +p17872 +I4 +sVdonations +p17873 +I32 +sVsubcommittees +p17874 +I32 +sVscrymgeour +p17875 +I12 +sVwaiving +p17876 +I32 +sVrecalls +p17877 +I32 +sVtower +p17878 +I44 +sVcallan +p17879 +I8 +sVediger +p17880 +I8 +sVreduced +p17881 +I96 +sVprofit-making +p17882 +I32 +sVwbi +p17883 +I8 +sVorate +p17884 +I32 +sVshunned +p17885 +I32 +sVdeduct +p17886 +I32 +sVleningrad +p17887 +I6 +sVjoking +p17888 +I32 +sVsubsidize +p17889 +I32 +sVnikkei +p17890 +I4 +sVcurran +p17891 +I4 +sVleeson +p17892 +I4 +sVoverheated +p17893 +I32 +sVcompetition +p17894 +I46 +sVnumber-crunching +p17895 +I32 +sVicn +p17896 +I14 +sVdrake +p17897 +I4 +sVbylaws +p17898 +I32 +sVcowboys +p17899 +I4 +sVintact +p17900 +I32 +sVtop-secret +p17901 +I32 +sVportables +p17902 +I32 +sVx-rayed +p17903 +I4 +sVprovided +p17904 +I96 +sVsingapore-based +p17905 +I4 +sVcaribbean +p17906 +I4 +sVmood +p17907 +I32 +sVcourses +p17908 +I32 +sVepiphanies +p17909 +I32 +sVundervaluation +p17910 +I32 +sVportend +p17911 +I32 +sVconnolly +p17912 +I12 +sVlegal +p17913 +I44 +sVmoon +p17914 +I32 +sVzagorski +p17915 +I4 +sVhanif +p17916 +I4 +sVbuddha +p17917 +I4 +sVtrays +p17918 +I32 +sVprovides +p17919 +I32 +sVprovider +p17920 +I32 +sVcompulsion +p17921 +I32 +sVquitting +p17922 +I32 +sVporter +p17923 +I4 +sVfreed +p17924 +I32 +sVpre-paid +p17925 +I32 +sVwelcome +p17926 +I32 +sVcratered +p17927 +I32 +sVwhite-collar +p17928 +I32 +sVlehder +p17929 +I4 +sVinspect +p17930 +I32 +sVparfet +p17931 +I8 +sVbank-secrecy +p17932 +I32 +sVslaughter +p17933 +I32 +sVkleenex +p17934 +I4 +sVseven-year +p17935 +I32 +sVbank-affiliated +p17936 +I32 +sVfabled +p17937 +I32 +sg122 +I14 +sVintrauterine +p17938 +I32 +sVbeaches +p17939 +I32 +sVpersonnel-related +p17940 +I32 +sVon +p17941 +I110 +sVom +p17942 +I8 +sVsubdued +p17943 +I32 +sVfillings +p17944 +I32 +sVdixons +p17945 +I14 +sVoh +p17946 +I14 +sVsurged +p17947 +I40 +sVof +p17948 +I126 +sVcreditworthy +p17949 +I32 +sVparalysis +p17950 +I32 +sVdiscussed +p17951 +I32 +sVreinforcing +p17952 +I32 +sVseven-up +p17953 +I12 +sVcreepers +p17954 +I32 +sVself-fulfilling +p17955 +I40 +sVmedicare +p17956 +I4 +sVstand +p17957 +I32 +sVdisintegrate +p17958 +I32 +sVconcentrations +p17959 +I32 +sVgregory +p17960 +I12 +sVdiscusses +p17961 +I4 +sVraw-material +p17962 +I36 +sVor +p17963 +I102 +sVbloodless +p17964 +I32 +sVsqn +p17965 +I8 +sVtribe +p17966 +I32 +sVladies +p17967 +I4 +sVcambridge +p17968 +I4 +sVreactions +p17969 +I32 +sVbinns +p17970 +I4 +sVinstruments +p17971 +I36 +sVrevolutionaries +p17972 +I32 +sVpick-up +p17973 +I32 +sVspeculates +p17974 +I32 +sVmas +p17975 +I8 +sVengendered +p17976 +I32 +sVaccounts +p17977 +I36 +sVconservancy +p17978 +I32 +sVdetermine +p17979 +I32 +sVgary +p17980 +I14 +sVspeculated +p17981 +I32 +sVsyndicator +p17982 +I32 +sVdank +p17983 +I32 +sVpullman +p17984 +I12 +sVtheoretically +p17985 +I2 +sVmental +p17986 +I32 +sVinterest-only +p17987 +I32 +sVgradison +p17988 +I4 +sVbackwater +p17989 +I32 +sVsuperpowers +p17990 +I32 +sVdistinctions +p17991 +I32 +sVneurosurgical +p17992 +I32 +sVthere +p17993 +I46 +sVhazards +p17994 +I32 +sValleged +p17995 +I32 +sVout-of-favor +p17996 +I32 +sVchristianity +p17997 +I4 +sVstrict +p17998 +I34 +sVsidesteps +p17999 +I32 +sVdesirability +p18000 +I32 +sVdeteriorating +p18001 +I32 +sVexpatriate +p18002 +I32 +sValleges +p18003 +I44 +sVvalley +p18004 +I4 +sVpotpourri +p18005 +I32 +sVg-5 +p18006 +I4 +sVexam-preparation +p18007 +I32 +sVt3100s +p18008 +I4 +sVmunicipalities +p18009 +I32 +sVsayer +p18010 +I4 +sVrelic +p18011 +I32 +sVburry +p18012 +I8 +sVfundamentals +p18013 +I32 +sVhouari +p18014 +I4 +sVregard +p18015 +I32 +sVcabinet +p18016 +I32 +sVjus +p18017 +I4 +sVsofaer +p18018 +I8 +sVswathed +p18019 +I32 +sVgrumman +p18020 +I6 +sVstrenuous +p18021 +I32 +sVaircruisers +p18022 +I6 +sVgrungy +p18023 +I32 +sVsemi-annual +p18024 +I32 +sVpromote +p18025 +I36 +sVwrlt-fm +p18026 +I4 +sVshannon +p18027 +I4 +sVlonger +p18028 +I36 +sVsubcontractors +p18029 +I32 +sVsuperstation +p18030 +I32 +sVapplying +p18031 +I32 +sVbullet +p18032 +I4 +sVwholesale +p18033 +I36 +sVexorbitant +p18034 +I32 +sVbalance-of-power +p18035 +I32 +sVwillis +p18036 +I4 +sVglucksman +p18037 +I4 +sVmaseng +p18038 +I4 +sVl.a. +p18039 +I4 +sVc-123 +p18040 +I4 +sVsleazy +p18041 +I32 +sVlife-insurance +p18042 +I32 +sVstrassels +p18043 +I8 +sVcreeping +p18044 +I32 +sVtriple-a +p18045 +I32 +sVstrongly +p18046 +I32 +sVtoilet +p18047 +I32 +sVwilloughby +p18048 +I4 +sVpersonal-injury +p18049 +I32 +sVcontributors +p18050 +I34 +sVcbe +p18051 +I8 +sVtaste +p18052 +I32 +sVlancaster +p18053 +I4 +sVtotaling +p18054 +I40 +sVfelix +p18055 +I2 +sVminneapolis +p18056 +I12 +sVryder +p18057 +I4 +sVhealth-threatening +p18058 +I32 +sVcbs +p18059 +I14 +sVbritain +p18060 +I14 +sVintro +p18061 +I32 +sVdiscoloring +p18062 +I32 +sVabelson +p18063 +I4 +sVmitzvahs +p18064 +I32 +sVpolitics +p18065 +I32 +sVcboe +p18066 +I12 +sVtate +p18067 +I4 +sVincorrect +p18068 +I32 +sVuncovered +p18069 +I32 +sVstumbled +p18070 +I32 +sVeurosecurities +p18071 +I4 +sVrubbed +p18072 +I32 +sVkrug +p18073 +I12 +sVidiot +p18074 +I32 +sVdeserve +p18075 +I32 +sVpost-split +p18076 +I32 +sVdiarrhea +p18077 +I32 +sVresentful +p18078 +I32 +sVrubber +p18079 +I44 +sVroses +p18080 +I34 +sVnarrowing +p18081 +I36 +sVigc +p18082 +I12 +sVtax-deferred +p18083 +I32 +sVfrydenlund +p18084 +I12 +sVminicomputer +p18085 +I32 +sVsupervisory +p18086 +I32 +sVtrash +p18087 +I36 +sVdismayed +p18088 +I32 +sVcypress +p18089 +I6 +sVmaxxum +p18090 +I4 +sVpreoccupation +p18091 +I32 +sVpassenger-car +p18092 +I32 +sVrequested +p18093 +I32 +sVbriefly +p18094 +I32 +sVreleasing +p18095 +I32 +sVgutfeld +p18096 +I4 +sVclassmate +p18097 +I32 +sVilan +p18098 +I4 +sVseparate +p18099 +I32 +sVsymbol +p18100 +I36 +sVfinale +p18101 +I32 +sVcontradicted +p18102 +I32 +sVinitiatives +p18103 +I32 +sVcarnegie +p18104 +I4 +sVincludes +p18105 +I36 +sVhardware +p18106 +I36 +sVperry +p18107 +I14 +sVnucleus +p18108 +I4 +sVtwenty-first +p18109 +I4 +sVuprisings +p18110 +I32 +sVincluded +p18111 +I32 +sVcreditor +p18112 +I40 +sVbrass +p18113 +I36 +sVstocks +p18114 +I110 +sVmelamed +p18115 +I12 +sVintimacy +p18116 +I32 +sVhwp +p18117 +I8 +sVpsychology +p18118 +I32 +sVthematic +p18119 +I32 +sVbooked +p18120 +I32 +sVrage +p18121 +I32 +sVapplause +p18122 +I32 +sVcalls +p18123 +I100 +sVwife +p18124 +I32 +sVinvest +p18125 +I32 +sVunmitigated +p18126 +I32 +sVdickstein +p18127 +I4 +sVcurve +p18128 +I4 +sVfomon +p18129 +I12 +sVphotos +p18130 +I32 +sVbattery-powered +p18131 +I32 +sVrefinances +p18132 +I32 +sVdirectors +p18133 +I110 +sVhmo +p18134 +I4 +sVfizzle +p18135 +I32 +sVtreason +p18136 +I32 +sVapparel +p18137 +I36 +sVsensed +p18138 +I32 +sVkingsborough +p18139 +I4 +sVsongs +p18140 +I32 +sVeagle-picher +p18141 +I10 +sValn +p18142 +I8 +sVneighbors +p18143 +I32 +sVall +p18144 +I46 +sVterrence +p18145 +I4 +sVchinese +p18146 +I4 +sVswirly +p18147 +I32 +sVald +p18148 +I4 +sVlack +p18149 +I32 +sVseals +p18150 +I32 +sVearners +p18151 +I32 +sVconcept +p18152 +I46 +sVpty +p18153 +I4 +sVhme +p18154 +I8 +sVdish +p18155 +I34 +sVfollow +p18156 +I34 +sVlong-run +p18157 +I32 +sVsettlement +p18158 +I44 +sVdecisions +p18159 +I32 +sVeight-year +p18160 +I32 +sVjerome +p18161 +I4 +sVdeferral +p18162 +I32 +sVwigton +p18163 +I12 +sVglimpse +p18164 +I32 +sVapartment +p18165 +I32 +sVron +p18166 +I12 +sVlining +p18167 +I32 +sVinstinctively +p18168 +I32 +sVswitched +p18169 +I32 +sVelaborately +p18170 +I32 +sVparticipants +p18171 +I34 +sVopportunities +p18172 +I32 +sVremoval +p18173 +I32 +sVbends +p18174 +I32 +sVwrite-off +p18175 +I32 +sVpeace-loving +p18176 +I32 +sVprogram +p18177 +I34 +sVdairy +p18178 +I32 +sVdepending +p18179 +I34 +sVmalaysia +p18180 +I4 +sVvarious-purpose +p18181 +I32 +sVlawmakers +p18182 +I34 +sVafrikaans-language +p18183 +I4 +sVdefuse +p18184 +I32 +sVbalance-of-payments +p18185 +I32 +sVflowed +p18186 +I32 +sVactivities +p18187 +I36 +sVwoman +p18188 +I36 +sVincorporate +p18189 +I32 +sVworse +p18190 +I32 +sVsong +p18191 +I36 +sVfar +p18192 +I102 +sVhardgoods +p18193 +I4 +sVbrewers +p18194 +I32 +sVnegev +p18195 +I4 +sVkinburn +p18196 +I4 +sVtheresienstadt +p18197 +I4 +sVsloan +p18198 +I12 +sVpsychologist +p18199 +I32 +sVsons +p18200 +I4 +sVworst +p18201 +I32 +sVfao +p18202 +I4 +sVmore-favorable +p18203 +I32 +sVindexation +p18204 +I32 +sVfab +p18205 +I4 +sVsony +p18206 +I4 +sVticket +p18207 +I32 +sVfaa +p18208 +I12 +sVarchaic +p18209 +I32 +sVreadied +p18210 +I32 +sVe.m. +p18211 +I4 +sVextended-stay +p18212 +I32 +sVsentimental +p18213 +I32 +sVgod-fearing +p18214 +I4 +sVmagical +p18215 +I32 +sVbollinger +p18216 +I10 +sVstimulus +p18217 +I32 +sVlillie +p18218 +I8 +sVunattainable +p18219 +I32 +sVlist +p18220 +I32 +sVprolonged +p18221 +I32 +sVfrontrunners +p18222 +I32 +sVgrandfather +p18223 +I32 +sVngo +p18224 +I4 +sVdisposes +p18225 +I32 +sVhighway +p18226 +I36 +sVrenouncing +p18227 +I32 +sVlisa +p18228 +I4 +sVbecker +p18229 +I4 +sVbecket +p18230 +I8 +sVingelheim +p18231 +I4 +sVtyger +p18232 +I4 +sVspur-of-the-moment +p18233 +I32 +sVtel +p18234 +I4 +sVescalation +p18235 +I32 +sVten +p18236 +I34 +sVprofessing +p18237 +I32 +sVtea +p18238 +I64 +sVsloppy +p18239 +I32 +sVreins +p18240 +I32 +sVbreakers +p18241 +I32 +sVtex +p18242 +I12 +sVwilshe +p18243 +I4 +sVrate +p18244 +I108 +sVberrill +p18245 +I4 +sVdesign +p18246 +I36 +sVpandemonium +p18247 +I32 +sVnbl +p18248 +I4 +sVnbc +p18249 +I12 +sVbemoaned +p18250 +I32 +sVtronic +p18251 +I4 +sVaphrodisiac +p18252 +I32 +sVclassification +p18253 +I32 +sVgunn +p18254 +I12 +sVspeculator +p18255 +I32 +sVsue +p18256 +I36 +sVimported +p18257 +I32 +sVdemure +p18258 +I32 +sVsun +p18259 +I46 +sVsum +p18260 +I40 +sVcircumstance +p18261 +I32 +sVanniversary +p18262 +I32 +sVoverload +p18263 +I32 +sVsuh +p18264 +I32 +sVhardship +p18265 +I32 +sVfaltered +p18266 +I32 +sVversion +p18267 +I32 +sVpulpit +p18268 +I32 +sVsup +p18269 +I4 +sVdisbursed +p18270 +I32 +sVracing +p18271 +I32 +sVguns +p18272 +I32 +sVmultitude +p18273 +I32 +sVroanoke +p18274 +I12 +sVsegmentation +p18275 +I32 +sVtoes +p18276 +I32 +sVchristian +p18277 +I4 +sVmidrange +p18278 +I32 +sVudayan +p18279 +I4 +sVtags +p18280 +I32 +sVeligibility +p18281 +I32 +sVraked +p18282 +I32 +sVsupposedly +p18283 +I32 +sVrevamping +p18284 +I40 +sVjeyaretnam +p18285 +I12 +sVwilfred +p18286 +I4 +sVshouldn +p18287 +I96 +sVhopelessness +p18288 +I32 +sVandrews +p18289 +I4 +sVberkeley +p18290 +I4 +sVdirections +p18291 +I32 +sVskidded +p18292 +I32 +sVobserving +p18293 +I32 +sVwilf +p18294 +I8 +sVthrift +p18295 +I36 +sVmikhail +p18296 +I4 +sVmarbury +p18297 +I4 +sVnaval +p18298 +I40 +sVhigh-school +p18299 +I32 +sVextraordinary +p18300 +I32 +sVdiming +p18301 +I32 +sVdouble-digit +p18302 +I32 +sVallows +p18303 +I96 +sVinnkeepers +p18304 +I32 +sVaustralia-based +p18305 +I8 +sVinfringe +p18306 +I32 +sVhonoring +p18307 +I32 +sVcalder +p18308 +I4 +sVhorrified +p18309 +I32 +sVrunoff +p18310 +I32 +sVpulmonary +p18311 +I32 +sVreshufflings +p18312 +I32 +sVoptions +p18313 +I36 +sVconditioning +p18314 +I32 +sVarms-control +p18315 +I96 +sVtightness +p18316 +I32 +sVmembers +p18317 +I38 +sVkimball +p18318 +I8 +sVsuddenly +p18319 +I34 +sVsemiconductors +p18320 +I38 +sVbathers +p18321 +I32 +sVborovoy +p18322 +I8 +sVscreens +p18323 +I32 +sVsemester +p18324 +I32 +sVfootwear +p18325 +I32 +sVspaciousness +p18326 +I32 +sVcontemplating +p18327 +I32 +sVappliances +p18328 +I36 +sVcoatings +p18329 +I32 +sVfla. +p18330 +I4 +sVherring +p18331 +I32 +sVdieter +p18332 +I4 +sVshareowner +p18333 +I4 +sVpetroles +p18334 +I4 +sVproceed +p18335 +I32 +sVfaint +p18336 +I32 +sVirritate +p18337 +I32 +sVpiggyback +p18338 +I32 +sVcantata +p18339 +I4 +sVconspiring +p18340 +I32 +sVfinkielstain +p18341 +I12 +sVcentronics +p18342 +I14 +sVauction-market +p18343 +I32 +sVminot +p18344 +I4 +sVdissatisfied +p18345 +I32 +sVmcgraw-edison +p18346 +I4 +sVbranded +p18347 +I32 +sVmarkets +p18348 +I110 +sVminor +p18349 +I38 +sVhorses +p18350 +I36 +sVflat +p18351 +I36 +sVisrael +p18352 +I14 +sVmellon +p18353 +I4 +sVknows +p18354 +I36 +sVlight-years +p18355 +I32 +sVdefinition +p18356 +I32 +sVcompromising +p18357 +I32 +sVoperators +p18358 +I32 +sVproblem +p18359 +I40 +sVhynes +p18360 +I12 +sVterror +p18361 +I2 +sVantibiotics +p18362 +I32 +sVfloyd +p18363 +I6 +sVbrookings +p18364 +I2 +sVbasically +p18365 +I36 +sVfrew +p18366 +I12 +sVknown +p18367 +I34 +sVlife-sized +p18368 +I32 +sVtavris +p18369 +I4 +sVfive-member +p18370 +I32 +sVapia +p18371 +I8 +sVcommercially +p18372 +I32 +sVpresumed +p18373 +I32 +sVshareholder-solicitation +p18374 +I32 +sVberth +p18375 +I32 +sVrichest +p18376 +I32 +sVteicher +p18377 +I4 +sVsalvador +p18378 +I4 +sVsonnenblick +p18379 +I4 +sVequation +p18380 +I32 +sVmetzenbaum +p18381 +I4 +sVwatchfully +p18382 +I32 +sVirritations +p18383 +I32 +sVbesides +p18384 +I42 +sVoverstepped +p18385 +I32 +sVdebated +p18386 +I32 +sVfitzwater +p18387 +I12 +sVv +p18388 +I4 +sVunfairness +p18389 +I32 +sVmalls +p18390 +I32 +sVoakland-based +p18391 +I4 +sVsomoza +p18392 +I4 +sVtennis +p18393 +I36 +sVomit +p18394 +I32 +sVembarrassing +p18395 +I32 +sVchallenging +p18396 +I32 +sVbrown +p18397 +I46 +sVwingding +p18398 +I32 +sVlocating +p18399 +I32 +sVmethodist +p18400 +I4 +sVsitcom +p18401 +I32 +sVexpiring +p18402 +I32 +sVcoerce +p18403 +I32 +sVmarche +p18404 +I32 +sVappointees +p18405 +I32 +sVdisclosures +p18406 +I32 +sVhourlong +p18407 +I32 +sVdesignate +p18408 +I32 +sVairplane +p18409 +I32 +sVswung +p18410 +I40 +sVallege +p18411 +I32 +sVoffspring +p18412 +I32 +sVthird-generation +p18413 +I32 +sVfederation +p18414 +I4 +sVinfluenced +p18415 +I32 +sVlingering +p18416 +I32 +sVcourt +p18417 +I108 +sVgoal +p18418 +I36 +sVdesperation +p18419 +I32 +sVrather +p18420 +I38 +sVbreaking +p18421 +I34 +sVperegrine +p18422 +I32 +sVjohannesburg +p18423 +I4 +sVoccasionally +p18424 +I34 +sVstemming +p18425 +I32 +sVspeeding +p18426 +I32 +sVactivator +p18427 +I32 +sVrapaciousness +p18428 +I32 +sVbuzzword +p18429 +I32 +sVexplains +p18430 +I32 +sVheadstrong +p18431 +I32 +sVshoo-in +p18432 +I32 +sVacknowledging +p18433 +I40 +sVsimplicity +p18434 +I32 +sVsandwich +p18435 +I32 +sVokay +p18436 +I32 +sVemulate +p18437 +I32 +sVweaknesses +p18438 +I32 +sVanimator +p18439 +I32 +sVreflect +p18440 +I96 +sVcatalog +p18441 +I32 +sVdisable +p18442 +I32 +sVlighting +p18443 +I32 +sVadventure +p18444 +I32 +sVstratified +p18445 +I32 +sVtrademark +p18446 +I32 +sVsupply-and-demand +p18447 +I32 +sVrinehart +p18448 +I4 +sVcutoff +p18449 +I32 +sVrban +p18450 +I4 +sVproclaimed +p18451 +I32 +sVtrucks +p18452 +I36 +sVshort +p18453 +I36 +sVchiefly +p18454 +I32 +sVwomanish +p18455 +I32 +sVrationalize +p18456 +I32 +sVdevote +p18457 +I32 +sVk-12 +p18458 +I4 +sVprefers +p18459 +I32 +sVoverreaction +p18460 +I32 +sVj.r. +p18461 +I2 +sVdeparture +p18462 +I36 +sVsupervision +p18463 +I32 +sVheight +p18464 +I32 +sVshortening +p18465 +I32 +sVshore +p18466 +I32 +sVextrapolation +p18467 +I32 +sVshade +p18468 +I32 +sVchronar +p18469 +I8 +sVpink-marble +p18470 +I32 +sVrentals +p18471 +I32 +sVft. +p18472 +I4 +sVhalf-dozen +p18473 +I32 +sVballoon +p18474 +I32 +sVturnover +p18475 +I32 +sVcarmelo +p18476 +I4 +sVjewel-like +p18477 +I32 +sVargyll +p18478 +I6 +sVlawn-care +p18479 +I32 +sVmuddling-through +p18480 +I32 +sVcopper +p18481 +I36 +sVseptember +p18482 +I4 +sVdeveloped +p18483 +I32 +sVflowers +p18484 +I32 +sVinsuring +p18485 +I2 +sVmajor +p18486 +I46 +sVproverbial +p18487 +I32 +sVoutraged +p18488 +I32 +sVlogan +p18489 +I4 +sVscientist +p18490 +I32 +sVthomson +p18491 +I4 +sVmilwaukee +p18492 +I12 +sVanti-sandinista +p18493 +I32 +sVstride +p18494 +I32 +sVavenue +p18495 +I36 +sVairing +p18496 +I32 +sVinquiries +p18497 +I32 +sVislam +p18498 +I4 +sVvastola +p18499 +I8 +sVdisagreed +p18500 +I32 +sVstyle +p18501 +I32 +sVabbes +p18502 +I4 +sVslipped +p18503 +I40 +sVrunup +p18504 +I32 +sVclashed +p18505 +I32 +sVsusceptible +p18506 +I32 +sVfernand +p18507 +I8 +sVcan-sealing +p18508 +I32 +sVfate +p18509 +I32 +sVretailing +p18510 +I40 +sVclashes +p18511 +I32 +sVresort +p18512 +I32 +sVinterleukin-2 +p18513 +I32 +sVphelps-stokes +p18514 +I4 +sVdisagrees +p18515 +I32 +sVelbit +p18516 +I4 +sVstephen +p18517 +I14 +sVlipper +p18518 +I14 +sVtenancy +p18519 +I32 +sVmight +p18520 +I100 +sValter +p18521 +I36 +sVargentine +p18522 +I4 +sVspeakes +p18523 +I4 +sVwouldn +p18524 +I38 +sVasbestosis +p18525 +I32 +sVreturn +p18526 +I36 +sVgenerously +p18527 +I32 +sVadoption +p18528 +I32 +sVhunter +p18529 +I36 +sVpredator +p18530 +I32 +sVimitators +p18531 +I32 +sVinch +p18532 +I32 +sVunacceptably +p18533 +I32 +sVhas-been +p18534 +I32 +sVmilestone +p18535 +I32 +sVcommunities +p18536 +I36 +sVbancorp +p18537 +I4 +sVasbestos-containing +p18538 +I32 +sVginning +p18539 +I32 +sVmazanec +p18540 +I8 +sVlow-fare +p18541 +I32 +sValgerian +p18542 +I4 +sVcharacterizes +p18543 +I32 +sVdelicate +p18544 +I36 +sVyear-to-year +p18545 +I32 +sVreservists +p18546 +I32 +sVraytheon +p18547 +I10 +sVsix-year-old +p18548 +I32 +sVintricacy +p18549 +I32 +sVdebacle +p18550 +I32 +sVmastered +p18551 +I32 +sVletting +p18552 +I32 +sVinherent +p18553 +I32 +sVtransportable +p18554 +I32 +sVlast-ditch +p18555 +I32 +sVintolerable +p18556 +I32 +sVbrannigan +p18557 +I4 +sVcharacterized +p18558 +I32 +sVembraced +p18559 +I32 +sVroebuck +p18560 +I4 +sVweighs +p18561 +I44 +sVsteeply +p18562 +I32 +sVper-minute +p18563 +I32 +sVweight +p18564 +I32 +sVgeneration +p18565 +I36 +sVschlumberger +p18566 +I14 +sVgreenmail +p18567 +I32 +sVdomtar +p18568 +I4 +sVcampground +p18569 +I32 +sVexpect +p18570 +I36 +sVemigrated +p18571 +I32 +sVexchange-market +p18572 +I32 +sVbernado +p18573 +I4 +sVinflated +p18574 +I32 +sVbraided +p18575 +I32 +sVunconventional +p18576 +I32 +sValcohol +p18577 +I36 +sVwondered +p18578 +I32 +sVloudly +p18579 +I32 +sVclandestine +p18580 +I32 +sVinduces +p18581 +I32 +sVhydraulic +p18582 +I32 +sVsure-fire +p18583 +I32 +sVuncompromising +p18584 +I32 +sVhealth +p18585 +I38 +sVhill +p18586 +I12 +sVshipment +p18587 +I32 +sVefac +p18588 +I4 +sVun-american +p18589 +I4 +sVinduced +p18590 +I32 +sVthimbleful +p18591 +I32 +sVcost-cutting +p18592 +I36 +sVg-man +p18593 +I4 +sVall-night +p18594 +I32 +sVfiber +p18595 +I32 +sVwisconsin +p18596 +I14 +sVnon-recoverable +p18597 +I32 +sVfriday +p18598 +I14 +sVguess +p18599 +I32 +sVdiploma +p18600 +I32 +sVtractors +p18601 +I32 +sVexperimenting +p18602 +I32 +sVmore-modest +p18603 +I32 +sVcookie +p18604 +I4 +sVexecute +p18605 +I32 +sVfour-month +p18606 +I32 +sVrandall +p18607 +I4 +sVellsberg +p18608 +I4 +sVautomation +p18609 +I32 +sVgenerate +p18610 +I32 +sVshut-off +p18611 +I32 +sVjew +p18612 +I4 +sVfiat +p18613 +I12 +sVproprietors +p18614 +I32 +sVguiliani +p18615 +I8 +sVechelons +p18616 +I32 +sVlikened +p18617 +I32 +sVovercrowded +p18618 +I32 +sVdown-home +p18619 +I32 +sVsylvester +p18620 +I4 +sVfrankel +p18621 +I4 +sVprejudice +p18622 +I32 +sVweaver +p18623 +I12 +sVthreat +p18624 +I32 +sVpre-schoolers +p18625 +I32 +sVconsequence +p18626 +I32 +sVuncriticized +p18627 +I32 +sVcuisine +p18628 +I32 +sVfallen +p18629 +I32 +sVthrows +p18630 +I32 +sVconstituencies +p18631 +I32 +sVfeed +p18632 +I36 +sVconnotation +p18633 +I32 +sVforeign-policy +p18634 +I32 +sVdistasteful +p18635 +I32 +sVfeel +p18636 +I36 +sVthreatening +p18637 +I32 +sVchurning +p18638 +I32 +sVfancy +p18639 +I32 +sVtraveled +p18640 +I32 +sVfeet +p18641 +I32 +sVsympathy +p18642 +I32 +sVsailor +p18643 +I32 +sVplummet +p18644 +I32 +sVnotify +p18645 +I32 +sVsystemhouse +p18646 +I4 +sVfees +p18647 +I38 +sVbland +p18648 +I32 +sVslower +p18649 +I32 +sVabrogated +p18650 +I32 +sVpasses +p18651 +I32 +sVstory +p18652 +I36 +sVimpairing +p18653 +I2 +sVtouchstones +p18654 +I32 +sVtemperature +p18655 +I32 +sVutilization +p18656 +I32 +sVgourmet +p18657 +I36 +sVleading +p18658 +I42 +sVfinanced +p18659 +I96 +sVtwo-week +p18660 +I32 +sVhangs +p18661 +I32 +sVpassed +p18662 +I32 +sVkilobytes +p18663 +I32 +sVmaui +p18664 +I4 +sVpiedmont +p18665 +I14 +sVfinances +p18666 +I32 +sVrecovered +p18667 +I32 +sVtemptations +p18668 +I32 +sVmainstay +p18669 +I32 +sVoversupply +p18670 +I32 +sVrecord-setting +p18671 +I32 +sVmikael +p18672 +I4 +sVpipelines +p18673 +I4 +sVoption +p18674 +I44 +sVrift +p18675 +I32 +sVworsens +p18676 +I32 +sVlitigated +p18677 +I32 +sVhotel +p18678 +I110 +sVchattanooga +p18679 +I8 +sVmodernizes +p18680 +I32 +sVluckily +p18681 +I8 +sVtreasures +p18682 +I32 +sVnon-competitive +p18683 +I32 +sVworrying +p18684 +I96 +sVvindication +p18685 +I32 +sVsecond-biggest +p18686 +I32 +sVconvinced +p18687 +I32 +sVversatility +p18688 +I32 +sVreliever +p18689 +I32 +sVworld-renowned +p18690 +I32 +sVkind +p18691 +I36 +sVhoughton +p18692 +I4 +sVdouble +p18693 +I32 +sVgiudici +p18694 +I4 +sVslowed +p18695 +I32 +sVaims +p18696 +I32 +sVoutrageous +p18697 +I36 +sVnaj +p18698 +I4 +sVcuff +p18699 +I12 +sVdoubly +p18700 +I32 +sVtimbre +p18701 +I32 +sVgoing-away +p18702 +I32 +sVdana +p18703 +I4 +sVjanney +p18704 +I4 +sVarsenal +p18705 +I38 +sVliabilities +p18706 +I32 +sVobstacles +p18707 +I36 +sVscarcity +p18708 +I4 +sVoutstanding +p18709 +I32 +sVstrengthen +p18710 +I32 +sVimports +p18711 +I102 +sVsuspicious +p18712 +I32 +sVkline +p18713 +I4 +sVdecadent +p18714 +I32 +sVtranscriptions +p18715 +I32 +sValike +p18716 +I32 +sVglen +p18717 +I4 +sVbigelow +p18718 +I4 +sVnon-discretionary +p18719 +I32 +sVfreeing +p18720 +I32 +sVpmn +p18721 +I8 +sVheightening +p18722 +I32 +sVrok +p18723 +I8 +sVdefects +p18724 +I32 +sVwilson +p18725 +I14 +sVnights +p18726 +I32 +sVrochester +p18727 +I4 +sVdrunk +p18728 +I32 +sVcheck +p18729 +I32 +sVimf +p18730 +I4 +sVrudani +p18731 +I4 +sVinterferes +p18732 +I32 +sVbelittle +p18733 +I32 +sVefh +p18734 +I8 +sVtick +p18735 +I32 +sVchairman +p18736 +I110 +sVfinding +p18737 +I36 +sVcontractual +p18738 +I32 +sVinterfered +p18739 +I32 +sVfree-wheeling +p18740 +I32 +sVexploit +p18741 +I32 +sVmiyazawa +p18742 +I4 +sVforeman +p18743 +I8 +sVadded +p18744 +I38 +sVelectric +p18745 +I110 +sVwarnings +p18746 +I32 +sVshufro +p18747 +I4 +sVamal +p18748 +I4 +sVmeasures +p18749 +I32 +sVreach +p18750 +I36 +sVscreenings +p18751 +I32 +sVarchitects +p18752 +I36 +sVsubsidy +p18753 +I32 +sVreact +p18754 +I36 +sVcigarette +p18755 +I36 +sVcoastal +p18756 +I4 +sVschulz-koehn +p18757 +I4 +sVshareholder +p18758 +I32 +sVenduring +p18759 +I32 +sVundertaken +p18760 +I32 +sVnothing +p18761 +I40 +sVseasons +p18762 +I32 +sVmeasured +p18763 +I32 +sVachievement +p18764 +I36 +sVstands +p18765 +I32 +sVpatterned +p18766 +I32 +sVpolyethylene +p18767 +I36 +sVdissolver +p18768 +I68 +sVdealers +p18769 +I34 +sVself-respecting +p18770 +I32 +sVwindows +p18771 +I36 +sVstylish +p18772 +I32 +sVpaving +p18773 +I32 +sVweary-looking +p18774 +I32 +sVwichita +p18775 +I12 +sVyeutter +p18776 +I12 +sVhousing-finance +p18777 +I32 +sVtraditional +p18778 +I32 +sVhentoff +p18779 +I12 +sVdissolved +p18780 +I32 +sVaquifers +p18781 +I32 +sVterzi +p18782 +I12 +sVliberate +p18783 +I32 +sVinstitutions +p18784 +I100 +sVlying +p18785 +I32 +sVpainewebber +p18786 +I6 +sVrte +p18787 +I10 +sVvaunted +p18788 +I32 +sVprogramming +p18789 +I32 +sVguittard +p18790 +I4 +sVcdn +p18791 +I8 +sVmemorandum +p18792 +I32 +sVcalifornia-santa +p18793 +I4 +sVchucking +p18794 +I32 +sVrts +p18795 +I4 +sVfelon +p18796 +I32 +sVhowls +p18797 +I32 +sVoil-price +p18798 +I32 +sVcosting +p18799 +I4 +sVenormously +p18800 +I32 +sVevenhanded +p18801 +I32 +sVsecuring +p18802 +I32 +sVtransformation +p18803 +I32 +sVconfinement +p18804 +I32 +sVfour-day +p18805 +I32 +sVpenalty +p18806 +I36 +sVabiding +p18807 +I32 +sVground-based +p18808 +I32 +sVtcw +p18809 +I8 +sVcarmine +p18810 +I4 +sVrock-bottom +p18811 +I32 +sVyr. +p18812 +I4 +sVcassandras +p18813 +I4 +sVatv +p18814 +I4 +sVdiscuss +p18815 +I40 +sVblustein +p18816 +I4 +sVresponses +p18817 +I32 +sVshepherd +p18818 +I12 +sVinformation-providing +p18819 +I32 +sVhis +p18820 +I46 +sVfounding +p18821 +I32 +sVgains +p18822 +I38 +sVcost-savings +p18823 +I32 +sVbabble +p18824 +I32 +sVcompiled +p18825 +I40 +sVuglich +p18826 +I4 +sValicia +p18827 +I4 +sVmortgage-backed +p18828 +I32 +sVfurnaces +p18829 +I32 +sVhia +p18830 +I12 +sVhaggling +p18831 +I32 +sVtvla +p18832 +I8 +sVhid +p18833 +I32 +sVfastest +p18834 +I32 +sVindustrywide +p18835 +I32 +sVada +p18836 +I4 +sVave. +p18837 +I4 +sVreprint +p18838 +I32 +sVcs-1 +p18839 +I6 +sVhim +p18840 +I96 +sVfalsgraf +p18841 +I4 +sVmcdowall +p18842 +I12 +sVmilitants +p18843 +I32 +sVgrievances +p18844 +I32 +sVbudapest +p18845 +I8 +sVcommensurate +p18846 +I32 +sVdiversifications +p18847 +I32 +sVstapleton +p18848 +I4 +sVmedicines +p18849 +I32 +sVwatched +p18850 +I32 +sVhullabaloo +p18851 +I32 +sVinvestigate +p18852 +I32 +sVmistakes +p18853 +I32 +sVcartoons +p18854 +I4 +sVactivity +p18855 +I36 +sVsustainable +p18856 +I32 +sVguinea +p18857 +I32 +sVvincent +p18858 +I4 +sVwheeling +p18859 +I12 +sVprecaution +p18860 +I32 +sVsnowstorm +p18861 +I32 +sVwrote +p18862 +I36 +sVseven-day +p18863 +I32 +sVbars +p18864 +I32 +sVindustry/government/residents +p18865 +I32 +sVart +p18866 +I38 +sVbart +p18867 +I4 +sVarv +p18868 +I8 +sVachieved +p18869 +I32 +sVintelligence +p18870 +I102 +sVlow-priced +p18871 +I32 +sVadvertised +p18872 +I32 +sVenjoyed +p18873 +I32 +sVarb +p18874 +I32 +sVarc +p18875 +I8 +sVbare +p18876 +I2 +sVare +p18877 +I110 +sVframingham +p18878 +I4 +sVchambers +p18879 +I32 +sVrigdon +p18880 +I4 +sVgreece +p18881 +I6 +sVarm +p18882 +I104 +sVdeclined +p18883 +I104 +sVaro +p18884 +I4 +sVnssi +p18885 +I4 +sVspirited +p18886 +I32 +sVbeni +p18887 +I4 +sVlearns +p18888 +I32 +sVthreats +p18889 +I32 +sVprescriptions +p18890 +I32 +sVinside-information +p18891 +I32 +sVfontana +p18892 +I4 +sVdistinctive +p18893 +I32 +sVprofilic +p18894 +I32 +sVdrooping +p18895 +I32 +sVunions +p18896 +I34 +sVvarious +p18897 +I34 +sVnucleoside +p18898 +I32 +sVorbiting +p18899 +I32 +sVconsecutive +p18900 +I32 +sVviewership +p18901 +I2 +sVnumerous +p18902 +I34 +sVcorruption +p18903 +I32 +sVcancelling +p18904 +I32 +sVscullin +p18905 +I4 +sVatrc +p18906 +I4 +sVkorea +p18907 +I4 +sVrecently +p18908 +I114 +sVcreating +p18909 +I32 +sVtoilets +p18910 +I32 +sVinitially +p18911 +I96 +sVasarco +p18912 +I2 +sVsold +p18913 +I100 +sVattention +p18914 +I32 +sVfrommer +p18915 +I12 +sVgeneral-purpose +p18916 +I32 +sVaspin +p18917 +I12 +sVsucceed +p18918 +I32 +sVimporters +p18919 +I10 +sVopposition +p18920 +I38 +sVfranchise +p18921 +I32 +sVnav +p18922 +I8 +sVfranchisee +p18923 +I32 +sVfranchised +p18924 +I32 +sVpcar +p18925 +I4 +sVdonate +p18926 +I32 +sg238 +I36 +sVwalnut-sized +p18927 +I32 +sVprescription +p18928 +I32 +sVlicense +p18929 +I36 +sVoversee +p18930 +I32 +sVsmall-business +p18931 +I32 +sVfour-nation +p18932 +I32 +sVanti-climactic +p18933 +I32 +sVriddled +p18934 +I32 +sVroman +p18935 +I4 +sVbecame +p18936 +I96 +sVredemptions +p18937 +I4 +sVcontext +p18938 +I32 +sVunseated +p18939 +I32 +sVcomdata +p18940 +I14 +sVtra +p18941 +I4 +sVfinds +p18942 +I36 +sVassault +p18943 +I32 +sVflies +p18944 +I32 +sVprofessorial +p18945 +I32 +sVslower-than-expected +p18946 +I32 +sVknocking +p18947 +I32 +sVreasons +p18948 +I36 +sVsweet +p18949 +I36 +sVsweep +p18950 +I32 +sVoh-god-if-i-pull-this-one-off-i +p18951 +I4 +sVimproper +p18952 +I36 +sVstorybook +p18953 +I32 +sVportsmouth +p18954 +I4 +sVdevelopment-park +p18955 +I32 +sVcelebrations +p18956 +I4 +sVsporkin +p18957 +I12 +sVrave +p18958 +I32 +sVslots +p18959 +I32 +sVacrid +p18960 +I32 +sVacolytes +p18961 +I32 +sVsimpler +p18962 +I32 +sVbolster +p18963 +I36 +sVdecline +p18964 +I36 +sVcaspar +p18965 +I4 +sVgypsum +p18966 +I36 +sVbookings +p18967 +I32 +sVenhancements +p18968 +I32 +sVdun +p18969 +I12 +sVincomes +p18970 +I32 +sVbertrand +p18971 +I4 +sVhoops +p18972 +I32 +sVdeployment +p18973 +I32 +sVswb +p18974 +I4 +sVpolitical +p18975 +I98 +sVdue +p18976 +I108 +sVstrategy +p18977 +I36 +sVpc +p18978 +I4 +sVreduction +p18979 +I32 +sVpd +p18980 +I4 +sVfried-chicken +p18981 +I32 +sVbrick +p18982 +I32 +sVwaste-water +p18983 +I32 +sVpn +p18984 +I8 +sVchandler +p18985 +I8 +sVpl +p18986 +I4 +sVpm +p18987 +I4 +sVinstitutionalized +p18988 +I32 +sVreferee +p18989 +I32 +sVflight +p18990 +I32 +sVbrother +p18991 +I32 +sVbuck +p18992 +I4 +sVlitchfield +p18993 +I4 +sVfirefighters +p18994 +I32 +sVderivative-action +p18995 +I32 +sVprecision +p18996 +I32 +sVconjures +p18997 +I32 +sVthen-secret +p18998 +I32 +sVmaneuverings +p18999 +I32 +sVbrokers +p19000 +I34 +sVdemand +p19001 +I102 +sVexemption +p19002 +I32 +sVnorthrup +p19003 +I4 +sVtreadway +p19004 +I4 +sVtoga +p19005 +I32 +sVplants +p19006 +I36 +sVstolen +p19007 +I32 +sVadvocating +p19008 +I32 +sVtoiling +p19009 +I32 +sVsw. +p19010 +I4 +sVfrozen +p19011 +I32 +sVwertheim +p19012 +I6 +sVridden +p19013 +I32 +sVanti-smoking +p19014 +I32 +sVsmile +p19015 +I32 +sVunprecedented +p19016 +I32 +sVparachutes +p19017 +I32 +sVhomework +p19018 +I32 +sVbehavior +p19019 +I32 +sVmalcontents +p19020 +I32 +sVmordant +p19021 +I32 +sVshake +p19022 +I32 +sVp. +p19023 +I4 +sVengineers +p19024 +I32 +sVeschewing +p19025 +I32 +sVshortened +p19026 +I32 +sVduquesne +p19027 +I14 +sVblond +p19028 +I34 +sVsonic +p19029 +I4 +sVenriching +p19030 +I32 +sVdublin +p19031 +I12 +sVsettles +p19032 +I44 +sVleans +p19033 +I32 +sVromilly +p19034 +I2 +sVdisappointing +p19035 +I34 +sVrio +p19036 +I12 +sVawakening +p19037 +I32 +sVrim +p19038 +I4 +sVfrantic +p19039 +I32 +sVlodged +p19040 +I32 +sVrid +p19041 +I32 +sVexiting +p19042 +I32 +sVanguish +p19043 +I32 +sVethnicity +p19044 +I32 +sVpanasonic +p19045 +I4 +sVpeopled +p19046 +I32 +sVlengthy +p19047 +I32 +sVconfirms +p19048 +I32 +sVstimulates +p19049 +I32 +sVslow-moving +p19050 +I32 +sVlengths +p19051 +I36 +sVarch-rival +p19052 +I32 +sVquarterlies +p19053 +I32 +sVpropping +p19054 +I32 +sVone-quarter +p19055 +I32 +sVdelicious +p19056 +I32 +sVwidely +p19057 +I34 +sVpeoples +p19058 +I32 +sVlerner +p19059 +I8 +sVadvise +p19060 +I32 +sVspears +p19061 +I12 +sVprerequisite +p19062 +I32 +sVhigher +p19063 +I38 +sVarrives +p19064 +I32 +sVbiochemist +p19065 +I32 +sVperception +p19066 +I32 +sVcocolat +p19067 +I4 +sVrestraint +p19068 +I32 +sVpainless +p19069 +I32 +sVnegotiate +p19070 +I40 +sVflows +p19071 +I32 +sVholidays +p19072 +I32 +sVflown +p19073 +I32 +sVimpede +p19074 +I32 +sVmunich +p19075 +I4 +sVcontractors +p19076 +I32 +sVbartlett +p19077 +I4 +sVrobust +p19078 +I40 +sVknack +p19079 +I32 +sVjanice +p19080 +I4 +sVbuybacks +p19081 +I8 +sVbreach-of-contract +p19082 +I32 +sVlower +p19083 +I46 +sVsemans +p19084 +I8 +sVnew-car +p19085 +I32 +sVmrgo +p19086 +I4 +sVcheek +p19087 +I12 +sVbriefcases +p19088 +I32 +sVanybody +p19089 +I32 +sVanalysis +p19090 +I32 +sVdeliverable +p19091 +I32 +sVcheer +p19092 +I32 +sVbutyl +p19093 +I32 +sVmachinery +p19094 +I38 +sVvirazole +p19095 +I4 +sVbounced +p19096 +I32 +sVhogwash +p19097 +I32 +sVkawanishi +p19098 +I4 +sVbureaucracies +p19099 +I32 +sVcompressor +p19100 +I32 +sVabilities +p19101 +I32 +sVunseen +p19102 +I32 +sVurgent-care +p19103 +I32 +sVnazaire +p19104 +I8 +sVpolled +p19105 +I32 +sValtruistic +p19106 +I32 +sVcompetitive +p19107 +I32 +sVahe +p19108 +I12 +sVbancroft +p19109 +I14 +sVrepealing +p19110 +I32 +sVhammered +p19111 +I32 +sVquestions +p19112 +I32 +sVimmediately +p19113 +I32 +sVregardless +p19114 +I42 +sVreliance +p19115 +I46 +sVsecond-ranked +p19116 +I32 +sVsaunders +p19117 +I4 +sVprofitable +p19118 +I34 +sVtables +p19119 +I32 +sVillusions +p19120 +I32 +sVashton-tate# +p19121 +I8 +sVadvisers +p19122 +I36 +sVworkers +p19123 +I102 +sVfbt +p19124 +I4 +sVexclusively +p19125 +I32 +sVcontractor +p19126 +I32 +sVndunduma +p19127 +I4 +sVtremolite +p19128 +I32 +sVlabor-management +p19129 +I32 +sVinducing +p19130 +I32 +sVsingle-digit +p19131 +I32 +sVcameramen +p19132 +I32 +sVviolations +p19133 +I32 +sVminstar +p19134 +I8 +sVreinstate +p19135 +I32 +sVchaparral +p19136 +I4 +sVfinder +p19137 +I32 +sVassociations +p19138 +I32 +sVcomplaint +p19139 +I36 +sVvendor +p19140 +I32 +sVcomplains +p19141 +I32 +sVclabir +p19142 +I14 +sVsupply-side +p19143 +I32 +sVadvocate +p19144 +I36 +sVlibyan +p19145 +I4 +sVmanatee +p19146 +I4 +sVentangled +p19147 +I32 +sVencased +p19148 +I32 +sVswimming +p19149 +I32 +sVimmunology +p19150 +I36 +sVsharpened +p19151 +I32 +sVjacksonville +p19152 +I4 +sVmoody +p19153 +I14 +sVskeptical +p19154 +I32 +sVmodifications +p19155 +I32 +sVnameplate +p19156 +I32 +sVmarian +p19157 +I2 +sVshaped +p19158 +I32 +sVcogeneration +p19159 +I32 +sVadmittedly +p19160 +I32 +sVcommanders +p19161 +I32 +sVmarlin +p19162 +I4 +sVignore +p19163 +I34 +sVcollect +p19164 +I32 +sVarthur +p19165 +I4 +sVearings +p19166 +I32 +sVgasoline-tax +p19167 +I32 +sVkookaburra +p19168 +I6 +sVessential +p19169 +I32 +sVgodiva +p19170 +I4 +sVl-dopa +p19171 +I4 +sVecology +p19172 +I4 +sVdefinitively +p19173 +I32 +sVfgsv +p19174 +I4 +sVhinted +p19175 +I32 +sVpolicy-makers +p19176 +I32 +sVarrived +p19177 +I32 +sVglobal +p19178 +I34 +sVunderstood +p19179 +I32 +sVcandy +p19180 +I36 +sVnewsletter +p19181 +I32 +sVmodernize +p19182 +I32 +sVfading +p19183 +I36 +sVstately +p19184 +I32 +sVgradually +p19185 +I36 +sVsunbathing +p19186 +I32 +sVried +p19187 +I12 +sVauto-parts +p19188 +I32 +sVharbingers +p19189 +I32 +sVseller +p19190 +I32 +sVpotty +p19191 +I4 +sVmachine-style +p19192 +I32 +sVseverence +p19193 +I32 +sVbankruptcy-law +p19194 +I32 +sVticking +p19195 +I32 +sVinnovation +p19196 +I32 +sVanne +p19197 +I4 +sVprod +p19198 +I32 +sVbrookfield +p19199 +I8 +sVanna +p19200 +I4 +sVclarinetist +p19201 +I32 +sVflavors +p19202 +I32 +sVstock-manipulation +p19203 +I32 +sVjumps +p19204 +I32 +sVmartin +p19205 +I14 +sVrefused +p19206 +I32 +sValoft +p19207 +I32 +sVtinker +p19208 +I12 +sVrefuses +p19209 +I36 +sVschumann +p19210 +I4 +sVblue-and-yellow +p19211 +I32 +sVraider +p19212 +I32 +sVintense +p19213 +I36 +sVvaccine +p19214 +I32 +sVunconfirmed +p19215 +I32 +sVroundup +p19216 +I4 +sVpipeline +p19217 +I32 +sVcautious +p19218 +I40 +sVseeped +p19219 +I32 +sVyawn +p19220 +I32 +sVwashingtonian +p19221 +I4 +sVtortuous +p19222 +I32 +sVcompleting +p19223 +I32 +sVfiring +p19224 +I32 +sVarguello +p19225 +I4 +sVvinnell +p19226 +I4 +sVdedham +p19227 +I4 +sVrange +p19228 +I32 +sVmilitia +p19229 +I32 +sVlouis-based +p19230 +I8 +sVpurists +p19231 +I2 +sVnanometrics +p19232 +I10 +sVdwight +p19233 +I8 +sVyouthful +p19234 +I32 +sVcomplementing +p19235 +I32 +sVcredible +p19236 +I32 +sVtherein +p19237 +I32 +sVscorns +p19238 +I32 +sVt.pwa +p19239 +I8 +sVmoss +p19240 +I4 +sVplethora +p19241 +I32 +sVfoothold +p19242 +I32 +sVbaa-3 +p19243 +I4 +sVconquest +p19244 +I4 +sVjohns +p19245 +I12 +sVrothman +p19246 +I4 +sVu.s.-assigned +p19247 +I4 +sVmidterm +p19248 +I32 +sVathens +p19249 +I12 +sVpmi +p19250 +I8 +sVpurporting +p19251 +I32 +sVbailly +p19252 +I4 +sVartifice +p19253 +I32 +sVdrifted +p19254 +I32 +sVinventories +p19255 +I34 +sVcredibly +p19256 +I32 +sVresilience +p19257 +I32 +sVintraday +p19258 +I32 +sVsuggestion +p19259 +I32 +sVbusinessses +p19260 +I32 +sVwhims +p19261 +I32 +sVconceivably +p19262 +I32 +sVterritories +p19263 +I32 +sVbbec +p19264 +I8 +sVala.-based +p19265 +I4 +sVhirsch +p19266 +I4 +sVquestion +p19267 +I32 +sVsurnames +p19268 +I32 +sVlong +p19269 +I46 +sVobsessive +p19270 +I32 +sVvendors +p19271 +I32 +sVcreditwatch +p19272 +I4 +sVprettier +p19273 +I32 +sVupheld +p19274 +I32 +sVconceivable +p19275 +I32 +sVsections +p19276 +I32 +sVauthored +p19277 +I32 +sVpool-playing +p19278 +I32 +sVfiles +p19279 +I40 +sVmountains +p19280 +I36 +sVplunge +p19281 +I36 +sVrefined +p19282 +I32 +sVcriteria +p19283 +I32 +sVsuccumbed +p19284 +I32 +sVkemal +p19285 +I4 +sVfisheries +p19286 +I32 +sVrepeatedly +p19287 +I32 +sVdelta +p19288 +I14 +sVtoronto-based +p19289 +I4 +sVorsini +p19290 +I8 +sVexpressivity +p19291 +I32 +sValtered +p19292 +I8 +sVjunior +p19293 +I34 +sVraising +p19294 +I44 +sVgroupings +p19295 +I32 +sVattribute +p19296 +I32 +sVadhesives +p19297 +I32 +sVproperty-casualty +p19298 +I32 +sVtpa +p19299 +I4 +sVconsist +p19300 +I32 +sVfulfilling +p19301 +I32 +sVcharacteristic +p19302 +I32 +sVgyohten +p19303 +I4 +sVdeclarations +p19304 +I32 +sVcapitalized +p19305 +I32 +sVbarring +p19306 +I36 +sVpar +p19307 +I32 +sVredress +p19308 +I32 +sVdiagrams +p19309 +I32 +sVco-managing +p19310 +I32 +sVfluctuations +p19311 +I32 +sVfried +p19312 +I44 +sVlabant +p19313 +I8 +sVcalled +p19314 +I38 +sVpurcell +p19315 +I4 +sVmodeled +p19316 +I32 +sVstockbrokers +p19317 +I32 +sVassociated +p19318 +I38 +sVworthwhile +p19319 +I32 +sVstick +p19320 +I32 +sVsoars +p19321 +I8 +sVko +p19322 +I4 +sVbluechip +p19323 +I32 +sVcm&m +p19324 +I4 +sVentrance +p19325 +I32 +sVkathryn +p19326 +I4 +sVdivisive +p19327 +I32 +sVwarning +p19328 +I32 +sVcourier +p19329 +I32 +sVreactivated +p19330 +I32 +sVrally +p19331 +I36 +sVhigher-quality +p19332 +I32 +sVgraham +p19333 +I14 +sVphased +p19334 +I32 +sVsteeper +p19335 +I32 +sVindependents +p19336 +I32 +sVproofs +p19337 +I32 +sVlemon +p19338 +I32 +sVpeach +p19339 +I36 +sVtentative +p19340 +I40 +sVrains +p19341 +I32 +sVneglecting +p19342 +I32 +sVendurance +p19343 +I32 +sVpeace +p19344 +I36 +sVthree-month +p19345 +I32 +sVscrutinizes +p19346 +I32 +sVclub +p19347 +I36 +sVone-on-one +p19348 +I32 +sVdefrauding +p19349 +I32 +sVgra +p19350 +I4 +sVmcdonnell +p19351 +I6 +sVurquhart +p19352 +I4 +sVabducted +p19353 +I32 +sVsoviets +p19354 +I4 +sVnice +p19355 +I36 +sVdale +p19356 +I6 +sVoffice-temporary +p19357 +I32 +sVbournonville +p19358 +I4 +sVusers +p19359 +I36 +sVbantam +p19360 +I4 +sVresents +p19361 +I32 +sVtrade-deficit +p19362 +I32 +sVbackbone +p19363 +I32 +sVproblems +p19364 +I40 +sVbreasts +p19365 +I32 +sVhelping +p19366 +I32 +sVbarren +p19367 +I32 +sVgenerated +p19368 +I32 +sVmacintosh +p19369 +I4 +sVallowing +p19370 +I34 +sVflirtation +p19371 +I32 +sVfyffe +p19372 +I4 +sVfertilizer +p19373 +I32 +sVposters +p19374 +I32 +sVtwo-series +p19375 +I32 +sVfeiner +p19376 +I8 +sVcomanches +p19377 +I4 +sVsuffers +p19378 +I32 +sVdingell +p19379 +I12 +sVkeflex +p19380 +I4 +sVyardsticks +p19381 +I32 +sVoutsells +p19382 +I32 +sVvow +p19383 +I32 +sVdepartments +p19384 +I32 +sVdragged +p19385 +I32 +sVimpatient +p19386 +I32 +sVwaxing +p19387 +I32 +sVchocolaty +p19388 +I32 +sVattaining +p19389 +I32 +sVkarma +p19390 +I32 +sVnarrative +p19391 +I32 +sVashton +p19392 +I4 +sVharcourt +p19393 +I4 +sVstandoff +p19394 +I32 +sVintentional +p19395 +I32 +sVweighty +p19396 +I32 +sVonce +p19397 +I46 +sVfnbf +p19398 +I8 +sVdelaware +p19399 +I14 +sVgant +p19400 +I8 +sVissued +p19401 +I96 +sVmass-production +p19402 +I32 +sVgmfanuc +p19403 +I10 +sVresistance +p19404 +I36 +sVsteve +p19405 +I4 +sVdispel +p19406 +I32 +sVedp +p19407 +I12 +sVdirectorate +p19408 +I32 +sVangeles-based +p19409 +I4 +sVgang +p19410 +I32 +sVlast-minute +p19411 +I32 +sVwinds +p19412 +I32 +sVacquistion +p19413 +I32 +sVbradlees +p19414 +I4 +sVadjustment +p19415 +I32 +sVcontributions +p19416 +I32 +sVprophecy +p19417 +I4 +sVissues +p19418 +I36 +sVanglia +p19419 +I8 +sVtheorist +p19420 +I32 +sVsimon +p19421 +I12 +sVcarley +p19422 +I8 +sVuphold +p19423 +I32 +sVdetergent +p19424 +I32 +sVspecial-interest +p19425 +I32 +sVdisposal +p19426 +I32 +sVw.va. +p19427 +I4 +sVdissidents +p19428 +I32 +sVanglin +p19429 +I4 +sVlanguages +p19430 +I32 +sVautomatic-focus +p19431 +I32 +sVwyden +p19432 +I4 +sVstable +p19433 +I32 +sVrealities +p19434 +I32 +sVhinduism +p19435 +I4 +sVantique +p19436 +I32 +sVinclude +p19437 +I32 +sVfences +p19438 +I32 +sVdramatically +p19439 +I32 +sVboustany +p19440 +I4 +sVstaley +p19441 +I8 +sVconfirmation +p19442 +I40 +sVseized +p19443 +I32 +sVmainstream +p19444 +I32 +sVmisinterpretation +p19445 +I32 +sVorganizations +p19446 +I32 +sVgina +p19447 +I2 +sVcalifornia-based +p19448 +I4 +sVengineered +p19449 +I32 +sVemoluments +p19450 +I32 +sVcurrency-exchange +p19451 +I32 +sValden +p19452 +I12 +sVcemeteries +p19453 +I32 +sVellsworth +p19454 +I4 +sVfour-wheel-drive +p19455 +I32 +sVbosses +p19456 +I32 +sVdrinking +p19457 +I32 +sVevaporation +p19458 +I32 +sVtutu +p19459 +I4 +sVauto-buying +p19460 +I32 +sVtrilling +p19461 +I32 +sVjerrold +p19462 +I4 +sVinfocorp +p19463 +I4 +sVfremantle +p19464 +I4 +sVwell-placed +p19465 +I32 +sVfast-paced +p19466 +I32 +sVnotes +p19467 +I100 +sVunderscores +p19468 +I32 +sVcriminal-sentencing +p19469 +I32 +sVrt.a +p19470 +I12 +sVdeals +p19471 +I36 +sVbrutal +p19472 +I32 +sVminimizing +p19473 +I32 +sVdemonstrated +p19474 +I32 +sVoutgrowths +p19475 +I32 +sVroscoe +p19476 +I4 +sValltime +p19477 +I32 +sVoutdo +p19478 +I32 +sVunderscored +p19479 +I32 +sVnoted +p19480 +I32 +sVconcluded +p19481 +I32 +sVhinder +p19482 +I32 +sVswofford +p19483 +I4 +sVsmaller +p19484 +I42 +sVplows +p19485 +I32 +sVrittereiser +p19486 +I12 +sVedina +p19487 +I8 +sVacceptability +p19488 +I32 +sVsensation +p19489 +I32 +sVturboprop +p19490 +I32 +sVfold +p19491 +I32 +sVcty +p19492 +I8 +sVtraveling +p19493 +I32 +sVconcludes +p19494 +I36 +sVbukovsky +p19495 +I4 +sVcft +p19496 +I4 +sVbuffeted +p19497 +I32 +sVawake +p19498 +I32 +sVmakers +p19499 +I110 +sVcfp +p19500 +I4 +sVmedieval +p19501 +I32 +sVuniversities +p19502 +I96 +sVkoenig +p19503 +I4 +sVbdg +p19504 +I4 +sVanc +p19505 +I4 +sVgainers +p19506 +I34 +sVunavailable +p19507 +I32 +sVcarthage +p19508 +I4 +sVconcessions +p19509 +I32 +sVbedeviled +p19510 +I32 +sVsale-leaseback +p19511 +I32 +sVkudos +p19512 +I32 +sVlabeled +p19513 +I32 +sVfind +p19514 +I36 +sVdangling +p19515 +I32 +sVwaiting +p19516 +I32 +sVinvestable +p19517 +I32 +sVgubernatorial +p19518 +I32 +sVcapital +p19519 +I46 +sVrelocate +p19520 +I32 +sVpost-colonial +p19521 +I32 +sVvonder +p19522 +I8 +sVnazis +p19523 +I4 +sVdeath-rate +p19524 +I32 +sVchose +p19525 +I32 +sVdegree +p19526 +I32 +sVmeg +p19527 +I4 +sVstoga +p19528 +I8 +sVmorrison-knudsen +p19529 +I8 +sVpushing +p19530 +I42 +sVunderwood +p19531 +I12 +sVotherwise-flattering +p19532 +I32 +sVslated +p19533 +I44 +sVyoungest +p19534 +I32 +sVexplore +p19535 +I32 +sVsluggishly +p19536 +I32 +sVseparation +p19537 +I32 +sVunremitting +p19538 +I32 +sVslates +p19539 +I4 +sVsexy +p19540 +I32 +sVincredible +p19541 +I32 +sVdenison +p19542 +I14 +sVsettling +p19543 +I34 +sVdismissals +p19544 +I32 +sVtranslate +p19545 +I32 +sVhorse-breeding +p19546 +I32 +sVmetro +p19547 +I14 +sVepidemiology +p19548 +I32 +sVdistressed +p19549 +I32 +sVpretoria +p19550 +I4 +sVlarger +p19551 +I32 +sVoversold +p19552 +I32 +sVcalvin +p19553 +I4 +sVleaving +p19554 +I38 +sVkilroy +p19555 +I4 +sVsuggests +p19556 +I32 +sVplacate +p19557 +I32 +sVplacements +p19558 +I32 +sVfarming +p19559 +I32 +sVolivier +p19560 +I6 +sVlambsdorff +p19561 +I4 +sVdeferred-compensation +p19562 +I32 +sVspices +p19563 +I32 +sVrelation +p19564 +I32 +sVpayoffs +p19565 +I32 +sVwinkler +p19566 +I4 +sVu.k. +p19567 +I12 +sVwriter +p19568 +I32 +sVberendt +p19569 +I12 +sVdeputy +p19570 +I38 +sVforbid +p19571 +I32 +sVfullerton +p19572 +I4 +sVblack-and-white +p19573 +I32 +sVmotoi +p19574 +I2 +sVapt +p19575 +I32 +sVdelano +p19576 +I4 +sVscaled +p19577 +I32 +sVherzog +p19578 +I4 +sVdeployed +p19579 +I32 +sVmetallurgical +p19580 +I32 +sVmotor +p19581 +I44 +sVduck +p19582 +I32 +sVapply +p19583 +I32 +sVboasts +p19584 +I32 +sVvolz +p19585 +I8 +sVuse +p19586 +I36 +sVfee +p19587 +I36 +sVfrom +p19588 +I110 +sVstream +p19589 +I32 +sVusa +p19590 +I12 +sVfive-country +p19591 +I32 +sVpaste +p19592 +I32 +sVusw +p19593 +I4 +sVfew +p19594 +I38 +sVbluth +p19595 +I4 +sVsnobbism +p19596 +I32 +sVexamination +p19597 +I32 +sVco-producer +p19598 +I32 +sVweeping +p19599 +I36 +sVdecember +p19600 +I14 +sVtimetable +p19601 +I32 +sVex-management +p19602 +I32 +sVchip +p19603 +I100 +sVcondon +p19604 +I12 +sVsort +p19605 +I32 +sVrapid-fire +p19606 +I32 +sVdash +p19607 +I32 +sVparliament +p19608 +I36 +sVjournalists +p19609 +I34 +sVroundtable +p19610 +I4 +sVdetail +p19611 +I32 +sVinclined +p19612 +I32 +sVequity +p19613 +I36 +sVheir +p19614 +I32 +sVwaukegan +p19615 +I8 +sVinfection +p19616 +I32 +sVcooperate +p19617 +I32 +sVheil +p19618 +I4 +sVmedical-technology +p19619 +I32 +sVrabbit +p19620 +I36 +sVdeflect +p19621 +I32 +sVfull-hearted +p19622 +I32 +sVsculptor +p19623 +I32 +sVwomen +p19624 +I38 +sVbridesmaid +p19625 +I32 +sVextension +p19626 +I36 +sVfare-restructuring +p19627 +I32 +sVparlow +p19628 +I12 +sVsaddle +p19629 +I36 +sVram +p19630 +I8 +sVstrategically +p19631 +I32 +sVhookup +p19632 +I32 +sVlumber +p19633 +I102 +sVhookups +p19634 +I32 +sVrefinanced +p19635 +I32 +sVaccrued +p19636 +I32 +sVposing +p19637 +I32 +sVrebuke +p19638 +I32 +sVpurports +p19639 +I32 +sVgastropod +p19640 +I32 +sVteacher-graduates +p19641 +I32 +sVproof +p19642 +I32 +sVbittersweet +p19643 +I32 +sVimpedes +p19644 +I32 +sVdistractions +p19645 +I32 +sVindulgence +p19646 +I32 +sVjobless +p19647 +I36 +sVtar +p19648 +I4 +sVspying +p19649 +I32 +sVtax +p19650 +I110 +sVsokolow +p19651 +I12 +sVcopolymer +p19652 +I4 +sVvillain +p19653 +I32 +sVcarrot +p19654 +I32 +sVhilton +p19655 +I6 +sVsomething +p19656 +I36 +sVchic +p19657 +I32 +sVenrique +p19658 +I4 +sVkoss +p19659 +I4 +sVdetainee +p19660 +I32 +sVsis +p19661 +I4 +sVsir +p19662 +I46 +sVunited +p19663 +I46 +sVsyndrome +p19664 +I32 +sVndx +p19665 +I4 +sVbuoyant +p19666 +I32 +sVsix +p19667 +I102 +sVjob-training +p19668 +I32 +sVstruggles +p19669 +I32 +sVinman +p19670 +I8 +sVcardin +p19671 +I4 +sVtraders +p19672 +I46 +sVbrian +p19673 +I14 +sVsia +p19674 +I12 +sVswear +p19675 +I32 +sVstrains +p19676 +I32 +sVdismissing +p19677 +I36 +sVluke +p19678 +I4 +sVinstead +p19679 +I106 +sVstruggled +p19680 +I32 +sVpanic +p19681 +I12 +sVsin +p19682 +I32 +sVsweat +p19683 +I32 +sVblustery +p19684 +I32 +sVparliamentary +p19685 +I32 +sVrestructured +p19686 +I32 +sVattend +p19687 +I32 +sVconfined +p19688 +I32 +sVtact +p19689 +I32 +sVhazard +p19690 +I32 +sVsalvaging +p19691 +I32 +sVcity-state +p19692 +I32 +sVabuse +p19693 +I32 +sVrestructures +p19694 +I8 +sVunpersuasive +p19695 +I32 +sVtaco +p19696 +I14 +sVbarricaded +p19697 +I32 +sVdata-processing +p19698 +I32 +sVgluts +p19699 +I32 +sVallots +p19700 +I32 +sVrutledge +p19701 +I8 +sVreadiness +p19702 +I32 +sVintellectual +p19703 +I32 +sVmajorities +p19704 +I32 +sVdeceiving +p19705 +I32 +sVsculptures +p19706 +I32 +sVelusiveness +p19707 +I32 +sVlight +p19708 +I36 +sVstore-closing +p19709 +I32 +sVinterrupted +p19710 +I32 +sVexport-guarantee +p19711 +I32 +sVemanuel +p19712 +I2 +sVmartine +p19713 +I4 +sVansa +p19714 +I4 +sVsupplication +p19715 +I32 +sVhonestly +p19716 +I32 +sVoutstripped +p19717 +I32 +sVsix-year +p19718 +I32 +sVtenure +p19719 +I32 +sVduplicating +p19720 +I32 +sVfingerprinted +p19721 +I32 +sVmartini +p19722 +I4 +sVneedham +p19723 +I4 +sVsprinkled +p19724 +I32 +sVkbh +p19725 +I4 +sVspreads +p19726 +I36 +sVsaturated +p19727 +I32 +sVstamped +p19728 +I32 +sVsanctioned +p19729 +I32 +sVreeling +p19730 +I32 +sVbrash +p19731 +I32 +sVtropics +p19732 +I32 +sVzayre +p19733 +I8 +sVreporters +p19734 +I36 +sVbrandao +p19735 +I4 +sVreptile +p19736 +I32 +sVbloedel +p19737 +I4 +sVinterpreted +p19738 +I32 +sVjoanne +p19739 +I4 +sVtire-worker +p19740 +I32 +sVpistols +p19741 +I32 +sVlooks +p19742 +I44 +sVgender +p19743 +I32 +sVunchecked +p19744 +I32 +sVboosts +p19745 +I44 +sVcontaminated +p19746 +I32 +sVportable +p19747 +I44 +sVsuperior +p19748 +I36 +sVsilk +p19749 +I32 +sVgerman-supplied +p19750 +I2 +sVotis +p19751 +I4 +sVniles +p19752 +I8 +sVdislocated +p19753 +I32 +sVgoading +p19754 +I32 +sVsunni +p19755 +I4 +sVlech +p19756 +I4 +sVnostalgia +p19757 +I32 +sVprudent +p19758 +I32 +sVwishner +p19759 +I4 +sVpermanent +p19760 +I32 +sVrestrain +p19761 +I32 +sVrestart +p19762 +I32 +sVreilly +p19763 +I4 +sVorange +p19764 +I14 +sVcovered +p19765 +I32 +sVholiday +p19766 +I46 +sVdefining +p19767 +I32 +sVwarrants +p19768 +I36 +sVpending +p19769 +I34 +sVfreeman +p19770 +I12 +sVviolating +p19771 +I32 +sVunavoidable +p19772 +I32 +sVcrash +p19773 +I32 +sVhorwitz +p19774 +I4 +sVorthodox +p19775 +I32 +sVsalad +p19776 +I32 +sVsyrup +p19777 +I32 +sVundoing +p19778 +I32 +sVmaterial +p19779 +I36 +sVstanding-room-only +p19780 +I32 +sVflew +p19781 +I36 +sVinvitations +p19782 +I32 +sVcampaigner +p19783 +I32 +sVbingham +p19784 +I4 +sVemerald +p19785 +I4 +sVimpaired +p19786 +I32 +sVrepublican +p19787 +I4 +sVinvestor +p19788 +I46 +sVfled +p19789 +I32 +sVlenin +p19790 +I4 +sVsuccessor +p19791 +I32 +sVarticles +p19792 +I32 +sVwrigley +p19793 +I4 +sVspeaks +p19794 +I32 +sVdirac +p19795 +I8 +sVwillems +p19796 +I4 +sVsa-7 +p19797 +I4 +sVprofound +p19798 +I32 +sVeased +p19799 +I34 +sVblytheville +p19800 +I4 +sVtrimmed +p19801 +I96 +sVhalf-step +p19802 +I32 +sVtechnology-based +p19803 +I32 +sVtrap +p19804 +I32 +sVtumult +p19805 +I32 +sVpromise +p19806 +I32 +sVbills +p19807 +I36 +sVerratic +p19808 +I32 +sVankara +p19809 +I6 +sVwstf +p19810 +I8 +sVstudios +p19811 +I36 +sVoestreich +p19812 +I12 +sVlilac +p19813 +I4 +sVfayva +p19814 +I4 +sVunshaken +p19815 +I32 +sVbarnett +p19816 +I12 +sVbout +p19817 +I32 +sVproduct +p19818 +I32 +sVrelated +p19819 +I36 +sVfraught +p19820 +I32 +sVdepositor +p19821 +I32 +sVlessening +p19822 +I32 +sVlobbied +p19823 +I32 +sVinterplay +p19824 +I32 +sVfirepower +p19825 +I32 +sVmanley +p19826 +I12 +sVour +p19827 +I38 +sVtefra +p19828 +I4 +sVadditions +p19829 +I32 +sVgriswold +p19830 +I8 +sVout +p19831 +I38 +sVcategory +p19832 +I36 +sVrespects +p19833 +I32 +sVvista-based +p19834 +I4 +sVmichigan-based +p19835 +I4 +sVsentiment +p19836 +I32 +sVgarcia +p19837 +I8 +sVarriving +p19838 +I32 +sVhyman +p19839 +I8 +sVdisarray +p19840 +I32 +sVchaos +p19841 +I32 +sVstrengthened +p19842 +I32 +sVvcr +p19843 +I4 +sVaversion +p19844 +I32 +sVdata-networking +p19845 +I32 +sVperforms +p19846 +I32 +sVexporting +p19847 +I36 +sVdeloitte +p19848 +I4 +sVhonorable +p19849 +I32 +sVyankee +p19850 +I4 +sVsupports +p19851 +I32 +sVlt. +p19852 +I4 +sVthrifts +p19853 +I40 +sVdisclose +p19854 +I32 +sVfun +p19855 +I36 +sVuncontrived +p19856 +I32 +sVallocations +p19857 +I32 +sVdictionary +p19858 +I32 +sVelixirs +p19859 +I32 +sVpours +p19860 +I32 +sVaverted +p19861 +I32 +sVthird-ranked +p19862 +I32 +sVmaintains +p19863 +I36 +sVdisk-drive +p19864 +I40 +sVpromptly +p19865 +I32 +sVprovident +p19866 +I4 +sVyork +p19867 +I4 +sVcoors +p19868 +I6 +sVconflicts +p19869 +I32 +sVsabre +p19870 +I4 +sVphilip +p19871 +I14 +sVstupidity +p19872 +I32 +sVobscure +p19873 +I32 +sVnon-technical +p19874 +I32 +sVrepairing +p19875 +I32 +sVage-old +p19876 +I32 +sVponce +p19877 +I4 +sVwashington-based +p19878 +I6 +sVltv +p19879 +I4 +sVogorodnikov +p19880 +I4 +sVislamic +p19881 +I4 +sVphrases +p19882 +I32 +sVreexamined +p19883 +I32 +sVsynthesized +p19884 +I32 +sVwermiel +p19885 +I4 +sVdune +p19886 +I32 +sVfeasible +p19887 +I32 +sVjourlet +p19888 +I4 +sVconversation +p19889 +I32 +sVdepriving +p19890 +I32 +sVseasonal-adjustment +p19891 +I32 +sVstill-centralized +p19892 +I32 +sVhence +p19893 +I34 +sVtrickling +p19894 +I32 +sVapproaching +p19895 +I32 +sVgeorgiadis +p19896 +I4 +sVphrased +p19897 +I32 +sVminoxidil +p19898 +I32 +sVtacked +p19899 +I32 +sVstumps +p19900 +I32 +sVplainly +p19901 +I32 +sVbouquet +p19902 +I32 +sVwurtsmith +p19903 +I4 +sVequitypurchase +p19904 +I32 +sVrealtors +p19905 +I32 +sVhitherto +p19906 +I32 +sVexpansion-related +p19907 +I32 +sVintuitively +p19908 +I32 +sVchoose +p19909 +I32 +sVbonner +p19910 +I4 +sVprobation +p19911 +I32 +sVimperial +p19912 +I36 +sVoutperformed +p19913 +I32 +sVheroes +p19914 +I32 +sVendemic +p19915 +I32 +sVdestinations +p19916 +I32 +sVcihlar +p19917 +I4 +sVjnj +p19918 +I8 +sVend-of-year +p19919 +I32 +sVpublication +p19920 +I32 +sVintention +p19921 +I32 +sVunknown +p19922 +I34 +sVoverdraft +p19923 +I32 +sVaccent +p19924 +I32 +sVeighth +p19925 +I4 +sVpriority +p19926 +I32 +sVtheir +p19927 +I38 +sVmazankowski +p19928 +I4 +sVmccrk +p19929 +I4 +sVyew +p19930 +I4 +sVchemotherapy +p19931 +I32 +sVarmonk +p19932 +I4 +sVmore-expensive +p19933 +I32 +sVboil +p19934 +I32 +sVmisunderstood +p19935 +I4 +sVseminars +p19936 +I32 +sVlufthansa +p19937 +I6 +sVshell +p19938 +I32 +sVx-rays +p19939 +I4 +sVmamelodi +p19940 +I4 +sVacademy +p19941 +I4 +sVreversed +p19942 +I32 +sVcondominium +p19943 +I32 +sVwaging +p19944 +I32 +sVwx +p19945 +I4 +sVslides +p19946 +I32 +sVreflecting +p19947 +I40 +sVacademe +p19948 +I32 +sVmattingly +p19949 +I12 +sVseneker +p19950 +I4 +sVjuly +p19951 +I6 +sVsex +p19952 +I32 +sVinstitution +p19953 +I36 +sVvague +p19954 +I32 +sVnoses +p19955 +I32 +sVyoder +p19956 +I4 +sVhearings +p19957 +I32 +sVsucceeded +p19958 +I32 +sVkickback +p19959 +I32 +sVs.s. +p19960 +I4 +sVisolation +p19961 +I32 +sVre-transmit +p19962 +I32 +sVbronze +p19963 +I32 +sVinfectious +p19964 +I36 +sVlimiting +p19965 +I32 +sVnemesis +p19966 +I32 +sVpatients +p19967 +I34 +sVthighbone +p19968 +I32 +sVfuehrer +p19969 +I4 +sVsec +p19970 +I14 +sVemmett +p19971 +I8 +sVsculpture +p19972 +I4 +sVtrumpets +p19973 +I4 +sVcreditors +p19974 +I36 +sVsankey +p19975 +I8 +sVtracts +p19976 +I32 +sVgas-turbine +p19977 +I32 +sVclip +p19978 +I32 +sVviolets +p19979 +I32 +sVexplicit +p19980 +I32 +sVcohen +p19981 +I12 +sVdenunzio +p19982 +I12 +sVhome-mortgage +p19983 +I32 +sVmogul +p19984 +I32 +sValfonso +p19985 +I4 +sVfiscal-year +p19986 +I34 +sVskokie +p19987 +I8 +sVunionizing +p19988 +I32 +sVatoned +p19989 +I32 +sVringed +p19990 +I32 +sVcatholic +p19991 +I4 +sVflorio +p19992 +I8 +sVangle +p19993 +I32 +sVroux +p19994 +I12 +sVallergies +p19995 +I32 +sVpre-game +p19996 +I32 +sVagency +p19997 +I46 +sVadmittance +p19998 +I32 +sVjacobson +p19999 +I8 +sVpr +p20000 +I4 +sVswelling +p20001 +I32 +sVprocter +p20002 +I4 +sVwhich +p20003 +I34 +sVu.s.a. +p20004 +I4 +sValienating +p20005 +I32 +sVunfreeze +p20006 +I32 +sVplea-bargaining +p20007 +I32 +sVmartha +p20008 +I4 +sVhp +p20009 +I4 +sVlugar +p20010 +I4 +sVfirst-quarter +p20011 +I32 +sVclash +p20012 +I32 +sVcdii +p20013 +I8 +sVpetrol +p20014 +I32 +sVcollaboration +p20015 +I32 +sVwho +p20016 +I108 +sVrelman +p20017 +I12 +sVaccountants +p20018 +I36 +sVgrievance +p20019 +I32 +sVwhr +p20020 +I8 +sVpop +p20021 +I32 +sVdeadpan +p20022 +I32 +sVwhx +p20023 +I8 +sVclass +p20024 +I36 +sVjean-louis +p20025 +I4 +sVstatute +p20026 +I32 +sVdeny +p20027 +I32 +sVrefreshing +p20028 +I32 +sVbrushed +p20029 +I32 +sVneighboring +p20030 +I32 +sVspeidell +p20031 +I4 +sVmishaps +p20032 +I32 +sVlooked +p20033 +I32 +sVvernacular +p20034 +I32 +sVcloaked +p20035 +I32 +sVhollow-cheeked +p20036 +I32 +sVfowler +p20037 +I12 +sVcontradictory +p20038 +I32 +sVswarming +p20039 +I32 +sVgain +p20040 +I44 +sVmk +p20041 +I8 +sVassuredly +p20042 +I32 +sVhl +p20043 +I12 +sVbalding +p20044 +I32 +sVn.c. +p20045 +I4 +sVchances +p20046 +I32 +sVelectoral +p20047 +I32 +sVagreed +p20048 +I96 +sVkildare +p20049 +I4 +sVa-from +p20050 +I64 +sVchapters +p20051 +I32 +sVedgar +p20052 +I12 +sVplanning +p20053 +I36 +sVdemocrats +p20054 +I14 +sVfear +p20055 +I32 +sVpowerhouse +p20056 +I32 +sVpleased +p20057 +I32 +sVt.j. +p20058 +I2 +sVsubtracting +p20059 +I32 +sVlitigation +p20060 +I32 +sVbottling +p20061 +I100 +sVdurant +p20062 +I4 +sVunanimously +p20063 +I32 +sVcraziness +p20064 +I32 +sVexacerbating +p20065 +I32 +sVkravis +p20066 +I4 +sVcost-conscious +p20067 +I32 +sVoperational +p20068 +I32 +sVroadblocks +p20069 +I32 +sVincantations +p20070 +I32 +sVpoliticized +p20071 +I32 +sVcandidates +p20072 +I40 +sVless-powerful +p20073 +I32 +sVfinancal +p20074 +I32 +sVneared +p20075 +I32 +sVmyriad +p20076 +I32 +sVpiano +p20077 +I32 +sVmargo +p20078 +I2 +sVthousands +p20079 +I38 +sVnonunion +p20080 +I36 +sVplazas +p20081 +I4 +sVspun +p20082 +I96 +sVprosecute +p20083 +I32 +sVsued +p20084 +I100 +sVabrasives +p20085 +I32 +sVskimp +p20086 +I32 +sVskims +p20087 +I32 +sVwatching +p20088 +I32 +sVplaintiff +p20089 +I32 +sVmidnight +p20090 +I32 +sVflirting +p20091 +I32 +sVrockford +p20092 +I6 +sVones +p20093 +I32 +sVsues +p20094 +I68 +sVwords +p20095 +I32 +sVpresley +p20096 +I4 +sVtactics +p20097 +I32 +sVbaluchis +p20098 +I4 +sVspur +p20099 +I32 +sVroutine +p20100 +I32 +sVghetto +p20101 +I4 +sVembezzlement +p20102 +I32 +sVchimpanzees +p20103 +I32 +sVfezzes +p20104 +I32 +sVmemorabilia +p20105 +I32 +sVbrain +p20106 +I32 +sVamfac +p20107 +I6 +sVsensors +p20108 +I32 +sVdifferential +p20109 +I32 +sVvied +p20110 +I32 +sVaffluent +p20111 +I32 +sVlow-profile +p20112 +I32 +sVslickers +p20113 +I4 +sVfund-raising +p20114 +I32 +sVacutely +p20115 +I32 +sVlaughs +p20116 +I32 +sVhalf-million +p20117 +I32 +sVeconometric +p20118 +I4 +sVgenerations +p20119 +I32 +sVview +p20120 +I36 +sVconversions +p20121 +I32 +sVknowing +p20122 +I36 +sVrequirement +p20123 +I36 +sVinventive +p20124 +I32 +sValfonse +p20125 +I2 +sVoccupations +p20126 +I32 +sVacquired +p20127 +I100 +sVpragmatic +p20128 +I36 +sVuacia +p20129 +I8 +sVnonferrous +p20130 +I32 +sVmechanicsburg +p20131 +I8 +sVvindicated +p20132 +I32 +sVmerits +p20133 +I32 +sVpaulson +p20134 +I12 +sVunfairly +p20135 +I32 +sVbabson +p20136 +I8 +sVacquirer +p20137 +I32 +sVacquires +p20138 +I44 +sVcloser +p20139 +I36 +sVcloses +p20140 +I32 +sVtelevised +p20141 +I32 +sVcloset +p20142 +I32 +sVwindfall +p20143 +I32 +sVebbed +p20144 +I32 +sVinvulnerable +p20145 +I32 +sVlandry +p20146 +I4 +sVbourj +p20147 +I4 +sVsuperb +p20148 +I32 +sVdls +p20149 +I8 +sVgenius +p20150 +I32 +sVmexicans +p20151 +I6 +sVconverted +p20152 +I32 +sVidentification +p20153 +I32 +sVclosed +p20154 +I44 +sVintimidated +p20155 +I32 +sVcrude +p20156 +I102 +sVchairmen +p20157 +I32 +sVlandro +p20158 +I4 +sVfrears +p20159 +I4 +sVbought +p20160 +I100 +sVpublishers +p20161 +I6 +sVrecipe +p20162 +I32 +sVweighing +p20163 +I32 +sVability +p20164 +I100 +sVh.f. +p20165 +I4 +sVopening +p20166 +I32 +sVseesaws +p20167 +I4 +sVbest-managed +p20168 +I32 +sVunsharklike +p20169 +I32 +sVbeverages +p20170 +I32 +sVagencies +p20171 +I32 +sVuncompleted +p20172 +I32 +sVamex +p20173 +I12 +sVjob +p20174 +I36 +sVtakeover +p20175 +I44 +sVrouged +p20176 +I32 +sVjoe +p20177 +I14 +sVmerchant-ivory +p20178 +I4 +sVjog +p20179 +I32 +sVprobing +p20180 +I36 +sVstutters +p20181 +I32 +sVmailbox +p20182 +I32 +sVswift +p20183 +I40 +sVforemen +p20184 +I32 +sVjon +p20185 +I6 +sVbarrett +p20186 +I12 +sVfinanciere +p20187 +I14 +sVpeacetime +p20188 +I32 +sVcontinent-wide +p20189 +I32 +sVsewerage +p20190 +I4 +sVgroup/business +p20191 +I4 +sVdilorenzo +p20192 +I4 +sVapril +p20193 +I4 +sVdeter +p20194 +I32 +sVgrain +p20195 +I32 +sVurging +p20196 +I32 +sVauctions +p20197 +I38 +sVbronx +p20198 +I4 +sVselectively +p20199 +I32 +sVgobain +p20200 +I4 +sVphotographer +p20201 +I32 +sVorganisation +p20202 +I4 +sVtrajectories +p20203 +I32 +sVgrounds +p20204 +I32 +sVwithdraws +p20205 +I8 +sVhydromatic +p20206 +I32 +sVunclear +p20207 +I32 +sVpremise +p20208 +I32 +sVwall +p20209 +I46 +sVshoving +p20210 +I32 +sVnarrower +p20211 +I34 +sVenvironments +p20212 +I32 +sVwalk +p20213 +I32 +sVpackaging +p20214 +I36 +sVshurkin +p20215 +I4 +sVmath +p20216 +I32 +sVmisapplied +p20217 +I32 +sVdividend +p20218 +I44 +sVrespect +p20219 +I32 +sVnarrowed +p20220 +I36 +sVflourish +p20221 +I32 +sVbottlers +p20222 +I32 +sVelectrocardiogram +p20223 +I32 +sVunhappiness +p20224 +I32 +sVprovinces +p20225 +I32 +sVbbk +p20226 +I4 +sVbbf +p20227 +I8 +sVhunters +p20228 +I36 +sVstoryteller +p20229 +I32 +sVcharts +p20230 +I32 +sVresponds +p20231 +I32 +sValters +p20232 +I4 +sVunspoken +p20233 +I32 +sVentrepeneurial +p20234 +I32 +sVagreements +p20235 +I32 +sVolson +p20236 +I12 +sVreservations +p20237 +I36 +sVfloats +p20238 +I32 +sVmonoclonal +p20239 +I32 +sVmarble-floored +p20240 +I32 +sVpuerto +p20241 +I4 +sVmike +p20242 +I14 +sVbeatrice +p20243 +I4 +sVresultant +p20244 +I32 +sVissue-oriented +p20245 +I32 +sVkoten +p20246 +I4 +sVhmt +p20247 +I12 +sVlap +p20248 +I32 +sVsufficient +p20249 +I34 +sVthrusting +p20250 +I32 +sVinjustices +p20251 +I32 +sVscrutiny +p20252 +I32 +sVoverture +p20253 +I36 +sVmckinley +p20254 +I8 +sVensuring +p20255 +I32 +sVvalue-added-tax +p20256 +I32 +sVcno +p20257 +I4 +sVlast +p20258 +I110 +sVoverturn +p20259 +I32 +sVpresent +p20260 +I32 +sVhmc +p20261 +I4 +sVkerchief +p20262 +I32 +sVcacophonous +p20263 +I32 +sVabandoned +p20264 +I96 +sVunlike +p20265 +I34 +sVmanagement-led +p20266 +I32 +sVfearful +p20267 +I32 +sVvanilla +p20268 +I32 +sVrestaurant +p20269 +I32 +sVbeats +p20270 +I32 +sVchoices +p20271 +I32 +sVwill +p20272 +I110 +sVmonrovia +p20273 +I4 +sVstunning +p20274 +I32 +sVcemetery +p20275 +I40 +sVinefficiency +p20276 +I32 +sVdepreciation +p20277 +I36 +sVwild +p20278 +I44 +sVmedicinal +p20279 +I32 +sVsachs/kidder +p20280 +I4 +sVwhirlpool +p20281 +I10 +sVrestoration +p20282 +I32 +sVyear-long +p20283 +I32 +sVbarely +p20284 +I32 +sVringing +p20285 +I36 +sVpatricia +p20286 +I6 +sg39 +I42 +sVunintelligent +p20287 +I32 +sVencouragement +p20288 +I32 +sVmid-afternoon +p20289 +I32 +sVpzl +p20290 +I4 +sVdraining +p20291 +I32 +sVaudiences +p20292 +I32 +sVdual +p20293 +I4 +sVpatti +p20294 +I4 +sVpza +p20295 +I4 +sVava +p20296 +I4 +sVnon-grocery +p20297 +I32 +sVjuan +p20298 +I4 +sVblount +p20299 +I12 +sVperhaps +p20300 +I46 +sVvintage +p20301 +I10 +sVfling +p20302 +I32 +sVradiation +p20303 +I32 +sVcross +p20304 +I44 +sVthatcherite +p20305 +I4 +sVsecond-highest +p20306 +I32 +sVmember +p20307 +I32 +sVadverse +p20308 +I32 +sVbuddhism +p20309 +I4 +sVsmugglers +p20310 +I32 +sVefficiencies +p20311 +I32 +sVlargest +p20312 +I100 +sVunits +p20313 +I102 +sVhazlitt +p20314 +I4 +sVgets +p20315 +I44 +sVdisciple +p20316 +I32 +sVtomatoes +p20317 +I32 +sVdifficult +p20318 +I32 +sVyoon +p20319 +I4 +sVreinterpretation +p20320 +I32 +sVcoached +p20321 +I32 +sVpremiere +p20322 +I32 +sVconceived +p20323 +I32 +sVdisagree +p20324 +I32 +sVconspired +p20325 +I32 +sVeditorial-features +p20326 +I32 +sVbeast +p20327 +I32 +sVcoaches +p20328 +I32 +sVlobster +p20329 +I32 +sVrefineries +p20330 +I32 +sVstudent +p20331 +I36 +sVmacdonald +p20332 +I12 +sVpedal +p20333 +I32 +sVhsc +p20334 +I8 +sVhambros +p20335 +I2 +sVlobby +p20336 +I32 +sVscaling +p20337 +I32 +sVceltic +p20338 +I6 +sVcorrespondent +p20339 +I32 +sVplowed +p20340 +I32 +sVapprove +p20341 +I44 +sVcontest +p20342 +I32 +sVbanded +p20343 +I32 +sVnow-dormant +p20344 +I32 +sVfighting +p20345 +I38 +sVsenior-college +p20346 +I32 +sVenglish +p20347 +I4 +sVtails +p20348 +I32 +sVdecliners +p20349 +I40 +sVinc. +p20350 +I12 +sVcontenders +p20351 +I32 +sVcities/abc +p20352 +I4 +sVtenth-largest +p20353 +I32 +sVexcessive +p20354 +I32 +sVhigh-risk +p20355 +I32 +sVrocket +p20356 +I32 +sVheavily +p20357 +I32 +sVgyrations +p20358 +I32 +sVtendering +p20359 +I32 +sVtcr +p20360 +I8 +sVobtain +p20361 +I32 +sVhorelick +p20362 +I12 +sVtiaa-cref +p20363 +I4 +sVcries +p20364 +I32 +sVbatteries +p20365 +I32 +sVrecollection +p20366 +I32 +sVfishing +p20367 +I32 +sVrocked +p20368 +I32 +sVtcf +p20369 +I4 +sVries +p20370 +I4 +sVbrad +p20371 +I4 +sVdqu +p20372 +I8 +sVrapid +p20373 +I32 +sVconsole +p20374 +I32 +sVfamily-life +p20375 +I32 +sVwelex +p20376 +I4 +sVprovision +p20377 +I32 +sVsupply +p20378 +I36 +sVsmith +p20379 +I12 +sVcapabilities +p20380 +I32 +sVsweetener +p20381 +I40 +sVcoliseum +p20382 +I32 +sVclyde +p20383 +I4 +sVother +p20384 +I110 +sVthen-mayor +p20385 +I32 +sVattractive +p20386 +I32 +sVusage +p20387 +I2 +sVvery-small-business +p20388 +I32 +sVsmart +p20389 +I36 +sVski +p20390 +I32 +sVback-office +p20391 +I32 +sVenact +p20392 +I32 +sVcrummy +p20393 +I32 +sVidentical +p20394 +I32 +sVsaturation +p20395 +I32 +sVsick +p20396 +I12 +sVprovisions +p20397 +I34 +sVanti-terrorist +p20398 +I32 +sVphase-down +p20399 +I32 +sVcpas +p20400 +I4 +sVtranquilizer +p20401 +I32 +sVcutthroat +p20402 +I32 +sVadolph +p20403 +I6 +sVprotesters +p20404 +I32 +sVcorresponds +p20405 +I32 +sVassert +p20406 +I32 +sVsiemens +p20407 +I6 +sVfirst-rate +p20408 +I32 +sVknow +p20409 +I36 +sVknot +p20410 +I32 +sVpress +p20411 +I36 +sVknox +p20412 +I4 +sVmsft +p20413 +I8 +sVlargest-selling +p20414 +I32 +sVtail +p20415 +I4 +sVteri +p20416 +I6 +sVga. +p20417 +I4 +sVmiami +p20418 +I14 +sVcounteroffer +p20419 +I32 +sVmother-in-law +p20420 +I40 +sVloses +p20421 +I4 +sVtaxpayers +p20422 +I36 +sVflow-of-funds +p20423 +I32 +sVovertures +p20424 +I32 +sVdancer +p20425 +I32 +sVhosts +p20426 +I32 +sVabsb +p20427 +I4 +sVjames +p20428 +I14 +sVrepressed +p20429 +I32 +sVoften-violent +p20430 +I32 +sVkawasaki +p20431 +I6 +sVwonders +p20432 +I32 +sVrazor-sharp +p20433 +I32 +sVmotor-hotel +p20434 +I32 +sVexceed +p20435 +I32 +sVbecause +p20436 +I110 +sVshabby +p20437 +I32 +sVsmoothly +p20438 +I32 +sVelevators +p20439 +I32 +sVscared +p20440 +I36 +sVflagrant +p20441 +I32 +sVconcentrate +p20442 +I32 +sVmeese +p20443 +I12 +sVsocialists +p20444 +I4 +sVplatforms +p20445 +I32 +sVgrowth +p20446 +I38 +sVexport +p20447 +I32 +sVtarnow +p20448 +I2 +sVopenness +p20449 +I32 +sVracking +p20450 +I32 +sVweatherly +p20451 +I12 +sVemployment +p20452 +I36 +sVscares +p20453 +I32 +sVdisrupting +p20454 +I32 +sVgraduation +p20455 +I36 +sVravaged +p20456 +I32 +sVleaf +p20457 +I32 +sVtotty +p20458 +I4 +sVlead +p20459 +I38 +sVseverance +p20460 +I32 +sVspoofs +p20461 +I32 +sVleak +p20462 +I32 +sVbreakthroughs +p20463 +I32 +sVlean +p20464 +I34 +sVmines +p20465 +I36 +sVthird-highest +p20466 +I32 +sVlear +p20467 +I14 +sVlarouche +p20468 +I6 +sVleap +p20469 +I32 +sVtax-act +p20470 +I32 +sVyork-based +p20471 +I4 +sVglacial +p20472 +I32 +sVworsen +p20473 +I32 +sVsylvania +p20474 +I4 +sVleader +p20475 +I36 +sVpricked +p20476 +I32 +sVrohr +p20477 +I14 +sVlocate +p20478 +I32 +sVacross-the-board +p20479 +I32 +sVschoolmasters +p20480 +I32 +sVacronym +p20481 +I32 +sVpasts +p20482 +I32 +sVnevada-las +p20483 +I4 +sVleased +p20484 +I32 +sVwesley +p20485 +I6 +sVmurdered +p20486 +I32 +sVconveyed +p20487 +I32 +sVsarre +p20488 +I4 +sVmcalister +p20489 +I4 +sVsilibis +p20490 +I4 +sVmiti +p20491 +I14 +sVpasta +p20492 +I32 +sVanalyses +p20493 +I32 +sVseagate +p20494 +I4 +sVpumps +p20495 +I32 +sVhalf-empty +p20496 +I32 +sVpuccini +p20497 +I4 +sVrare +p20498 +I36 +sVcarried +p20499 +I32 +sVvisions +p20500 +I32 +sVgetting +p20501 +I38 +sVcolumn +p20502 +I32 +sVuniverse +p20503 +I36 +sVspilled +p20504 +I32 +sVsgic +p20505 +I4 +sVdependence +p20506 +I96 +sVshipping +p20507 +I34 +sVsurge +p20508 +I36 +sVdependency +p20509 +I32 +sVcarries +p20510 +I32 +sVcarrier +p20511 +I46 +sVsighting +p20512 +I32 +sVcustomizing +p20513 +I32 +sVurges +p20514 +I36 +sVblithe +p20515 +I32 +sVadditives +p20516 +I32 +sVborrus +p20517 +I4 +sVwarranty +p20518 +I36 +sVindividually +p20519 +I32 +sVoutset +p20520 +I32 +sVown +p20521 +I36 +sVkinda +p20522 +I4 +sVsugary +p20523 +I32 +sVowe +p20524 +I32 +sVtravelers +p20525 +I36 +sVmaritime-union +p20526 +I2 +sVsaul +p20527 +I4 +sVclifton +p20528 +I2 +sVbusinesses-newspaper +p20529 +I32 +sVhover +p20530 +I32 +sVweather +p20531 +I32 +sVchamp +p20532 +I32 +sVregistration +p20533 +I32 +sVunproductive +p20534 +I32 +sVanimosity +p20535 +I32 +sVfired +p20536 +I32 +sVhitting +p20537 +I32 +sVgoldhammer +p20538 +I4 +sVvan +p20539 +I44 +sVlykes +p20540 +I4 +sVplatoon +p20541 +I4 +sVtexaco +p20542 +I14 +sVtransfer +p20543 +I32 +sVindictments +p20544 +I32 +sVhigh-end +p20545 +I32 +sVtourist +p20546 +I32 +sVmarina +p20547 +I4 +sVcontinental +p20548 +I14 +sVatkinson +p20549 +I4 +sVsolidify +p20550 +I32 +sVreproductive +p20551 +I32 +sVextravagant +p20552 +I32 +sVbreeding +p20553 +I32 +sVtarrytown +p20554 +I4 +sVuncontrollable +p20555 +I32 +sVstymied +p20556 +I32 +sVappoint +p20557 +I32 +sVmailer +p20558 +I4 +sVappointing +p20559 +I32 +sVredmond +p20560 +I4 +sVcollective +p20561 +I32 +sVtriggered +p20562 +I32 +sVfunds +p20563 +I46 +sVmob +p20564 +I36 +sVcommerciale +p20565 +I4 +sVmutter +p20566 +I32 +sVapproximates +p20567 +I32 +sVvolume +p20568 +I46 +sVmailed +p20569 +I32 +sVpercentage-point +p20570 +I32 +sVautomated +p20571 +I32 +sVnassau +p20572 +I4 +sVspruce-pine-fir +p20573 +I32 +sVsqueeze +p20574 +I32 +sVcapitalize +p20575 +I32 +sVintourist +p20576 +I4 +sVbradley +p20577 +I12 +sVmade +p20578 +I44 +sVva. +p20579 +I4 +sVinstructive +p20580 +I32 +sVwhether +p20581 +I42 +sVkurds +p20582 +I4 +sVrecede +p20583 +I32 +sVfunaro +p20584 +I12 +sVrecord +p20585 +I44 +sVbelow +p20586 +I36 +sVpersian +p20587 +I4 +sVruling +p20588 +I44 +sVinfants +p20589 +I32 +sVdemonstrate +p20590 +I32 +sVhand-wringing +p20591 +I32 +sVunfolding +p20592 +I32 +sVisaacs +p20593 +I8 +sVeagerness +p20594 +I32 +sVjenny +p20595 +I4 +sVinadequate +p20596 +I32 +sVhumphries +p20597 +I8 +sVremove +p20598 +I32 +sVfertilizers +p20599 +I32 +sVnapery +p20600 +I32 +sVsank +p20601 +I32 +sVboardwalk +p20602 +I32 +sVmyl +p20603 +I8 +sVet +p20604 +I32 +sVmainframes +p20605 +I32 +sVcouponing +p20606 +I32 +sVtrailing +p20607 +I32 +sVcounteract +p20608 +I32 +sVmyg +p20609 +I8 +sVsobriety +p20610 +I2 +sVmutual +p20611 +I46 +sVribavirin +p20612 +I32 +sVinside-trading +p20613 +I8 +sVeditorial-page +p20614 +I32 +sVchocolat +p20615 +I4 +sVpercent +p20616 +I40 +sVillinois +p20617 +I6 +sVnrc +p20618 +I12 +sVbook +p20619 +I36 +sVboom +p20620 +I38 +sVbranch +p20621 +I32 +sVdonohue +p20622 +I14 +sVhysteria +p20623 +I32 +sVrial +p20624 +I8 +sVdecorous +p20625 +I32 +sVcontacting +p20626 +I32 +sVconclusion +p20627 +I32 +sVwithstood +p20628 +I32 +sValbum +p20629 +I32 +sVjunk +p20630 +I32 +sVkinds +p20631 +I32 +sVagios +p20632 +I4 +sVwide-bodies +p20633 +I32 +sVmoguls +p20634 +I32 +sVjune +p20635 +I6 +sVcontends +p20636 +I32 +sVfrustrate +p20637 +I32 +sVrisked +p20638 +I32 +sVmargaret +p20639 +I4 +sVincome-tax +p20640 +I32 +sVbillion-plus +p20641 +I32 +sVearthly +p20642 +I32 +sVabout-to-boom +p20643 +I32 +sVcurrency-trading +p20644 +I32 +sVpriced +p20645 +I98 +sVincurred +p20646 +I32 +sVcliff +p20647 +I4 +sVasbestos-lawsuit +p20648 +I32 +sVranky +p20649 +I4 +sVpate +p20650 +I32 +sValloy +p20651 +I32 +sVprestowitz +p20652 +I4 +sVranks +p20653 +I40 +sVslap +p20654 +I32 +sVjewel +p20655 +I32 +sVemery +p20656 +I4 +sVrockingham +p20657 +I4 +sVintentionally +p20658 +I32 +sVt.nor +p20659 +I4 +sVmevacor +p20660 +I4 +sVsecurities-industry +p20661 +I2 +sVvolumes +p20662 +I32 +sVfending +p20663 +I32 +sVjawbone +p20664 +I32 +sVexpands +p20665 +I32 +sVfurthermore +p20666 +I34 +sVwhitney +p20667 +I4 +ssbsb. \ No newline at end of file diff --git a/lib/requirements.txt b/lib/requirements.txt index 8cb64dac5..3e9183a7c 100644 --- a/lib/requirements.txt +++ b/lib/requirements.txt @@ -3,6 +3,7 @@ asn1crypto==0.24.0 boto==2.49.0 boto3==1.9.67 botocore==1.12.67 +bs4==0.0.1 cached-property==1.5.1 certifi==2018.11.29 cffi==1.11.5 @@ -35,7 +36,7 @@ lightgbm==2.2.2 MarkupSafe==1.1.1 matplotlib==3.0.2 networkx==2.2 -nltk==3.4.3 +nltk==3.4.5 numexpr==2.6.2 numpy==1.18.1 opencv-python-headless==4.0.0.21 @@ -58,7 +59,7 @@ PyMySQL==0.9.3 pyparsing==2.3.0 python-dateutil==2.7.5 pytz==2018.7 -PyYAML==3.13 +PyYAML==5.1 redis==2.10.6 requests==2.20.1 s3transfer==0.1.13 @@ -75,7 +76,7 @@ statsmodels==0.9.0 texttable==0.9.1 tqdm==4.28.1 twkorean==0.1.5 -urllib3==1.24.1 +urllib3==1.24.2 websocket-client==0.55.0 xgboost==0.80 xlrd==1.2.0 diff --git a/pom.xml b/pom.xml index 151d8aada..2ae33b3fe 100644 --- a/pom.xml +++ b/pom.xml @@ -261,7 +261,7 @@ mysql mysql-connector-java - 5.1.41 + 8.0.16 org.postgresql @@ -292,7 +292,7 @@ com.google.guava guava - 20.0 + 24.1.1-jre joda-time @@ -346,7 +346,7 @@ org.quartz-scheduler quartz - 2.2.1 + 2.3.2 c3p0 @@ -426,17 +426,17 @@ com.fasterxml.jackson.core jackson-databind - 2.9.10 + 2.11.1 com.fasterxml.jackson.core jackson-core - 2.9.9 + 2.11.1 com.fasterxml.jackson.core jackson-annotations - 2.9.9 + 2.11.1 org.reflections @@ -461,7 +461,7 @@ com.fasterxml.jackson.module jackson-module-scala_2.11 - 2.9.5 + 2.11.1 org.apache.commons @@ -561,7 +561,7 @@ io.netty netty-all - 4.1.17.Final + 4.1.42.Final io.netty diff --git a/va-server/visual-analytics/app.js b/va-server/visual-analytics/app.js index 39a43d292..770314df2 100644 --- a/va-server/visual-analytics/app.js +++ b/va-server/visual-analytics/app.js @@ -111,6 +111,7 @@ app.use(__REQ_express.static(__REQ_path.join(__dirname, 'public'))); app.use(subPathUrl + '*/js/plugins/echarts', __REQ_express.static(__dirname + '/node_modules/echarts/dist/')); app.use(subPathUrl + '*/js/plugins/echarts-stat', __REQ_express.static(__dirname + '/node_modules/echarts-stat/dist/')); +app.use(subPathUrl + '*/js/plugins/echarts-wordcloud', __REQ_express.static(__dirname + '/node_modules/echarts-wordcloud/dist/')); app.use(subPathUrl + '*/js/plugins/d3', __REQ_express.static(__dirname + '/node_modules/d3/build/')); app.use(subPathUrl + '*/js/plugins/d3-tip', __REQ_express.static(__dirname + '/node_modules/d3-tip/')); diff --git a/va-server/visual-analytics/package.json b/va-server/visual-analytics/package.json index 1f8a0b872..f32d7268f 100644 --- a/va-server/visual-analytics/package.json +++ b/va-server/visual-analytics/package.json @@ -32,6 +32,7 @@ "dotenv": "2.0.0", "echarts": "4.1.0", "echarts-stat": "1.1.0", + "echarts-wordcloud": "^1.1.3", "ejs": "2.5.7", "element-ui": "2.4.2", "es6-promise": "4.2.4", diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.css b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.css index 404c0859d..8b4ad877d 100644 --- a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.css +++ b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.css @@ -1,4 +1,4 @@ -/* Brightics 2.0 Chart Build 190718 */ +/* Brightics 2.0 Chart Build 200703 */ .bcharts-adonis { display: flex; } @@ -15,29 +15,6 @@ flex-direction: column; } -.bcharts-adonis .jqx-tabs, .bo-container .jqx-tabs { - border: none; -} - -.bcharts-adonis .jqx-tabs-headerWrapper, .bo-container .jqx-tabs-headerWrapper { - border: none; -} - -.bcharts-adonis li.jqx-tabs-title, .bo-container li.jqx-tabs-title{ - border: 1px solid #DBDDE2; - padding-bottom: 7px; - margin-right: 0; - width: 76px; -} - -.bcharts-adonis li.jqx-tabs-title-selected-top, .bo-container li.jqx-tabs-title-selected-top { - border-top: 2px solid #6C79E9; - color: rgba(0, 0, 0, 0.8); - background-color: #FFFFFF; - padding-bottom: 6px; - border-bottom: 1px solid #FFF; -} - .bcharts-adonis-left { width: 260px; height: 100%; @@ -59,7 +36,7 @@ height: 100%; box-sizing: border-box; border: solid 1px #DBDDE2; - background: #f7f7f7; + background: #ffffff; margin-left: 8px; } @@ -70,11 +47,14 @@ } .bcharts-adonis-viewpart-header { - height: 54px; + height: 24px; box-sizing: border-box; - line-height: 54px; - text-align: center; + text-align: left; font-weight: bold; + color: #333333; + line-height: 24px; + font-size: 16px; + margin: 14px 0 14px 20px; } .bcharts-adonis-viewpart::before @@ -104,7 +84,7 @@ /*chart type*/ .bcharts-adonis-chart-selector { - padding-left: 30px; + padding-left: 40px; box-sizing: border-box; line-height: 30px; cursor: pointer; @@ -119,169 +99,167 @@ .bcharts-adonis-chart-selector::before { content: ''; - width: 30px; - height: 30px; - background-image: url('images/bcharts.png'); - background-position-y: -30px; + width: 40px; + height: 40px; position: absolute; top: 0; left: 0; } .bcharts-adonis-chart-selector[chart="scatter"]::before { - background-position-x: -60px; + background-image: url('images/chart-26/scatter.svg'); } .bcharts-adonis-chart-selector[chart="line"]::before { - background-position-x: -90px; + background-image: url('images/chart-26/line.svg'); } .bcharts-adonis-chart-selector[chart="column"]::before { - background-position-x: -120px; + background-image: url('images/chart-26/column.svg'); } .bcharts-adonis-chart-selector[chart="column-stacked"]::before { - background-position-x: -150px; + background-image: url('images/chart-26/column-stacked.svg'); } .bcharts-adonis-chart-selector[chart="column-stacked-100"]::before { - background-position-x: -180px; + background-image: url('images/chart-26/column-stacked-100.svg'); } .bcharts-adonis-chart-selector[chart="bar"]::before { - background-position-x: -210px; + background-image: url('images/chart-26/bar.svg'); } .bcharts-adonis-chart-selector[chart="bar-stacked"]::before { - background-position-x: -240px; + background-image: url('images/chart-26/bar-stacked.svg'); } .bcharts-adonis-chart-selector[chart="bar-stacked-100"]::before { - background-position-x: -270px; + background-image: url('images/chart-26/bar-stacked-100.svg'); } .bcharts-adonis-chart-selector[chart="area"]::before { - background-position-x: -300px; + background-image: url('images/chart-26/area.svg'); } .bcharts-adonis-chart-selector[chart="area-stacked"]::before { - background-position-x: -330px; + background-image: url('images/chart-26/area-stacked.svg'); } .bcharts-adonis-chart-selector[chart="area-stacked-100"]::before { - background-position-x: -360px; + background-image: url('images/chart-26/area-stacked-100.svg'); } .bcharts-adonis-chart-selector[chart="boxplot"]::before { - background-position-x: -390px; + background-image: url('images/chart-26/boxplot.svg'); } .bcharts-adonis-chart-selector[chart="heatmap"]::before { - background-position-x: -420px; + background-image: url('images/chart-26/heatmap.svg'); } .bcharts-adonis-chart-selector[chart="pie"]::before { - background-position-x: -450px; + background-image: url('images/chart-26/pie.svg'); } .bcharts-adonis-chart-selector[chart="network"]::before { - background-position-x: -480px; + background-image: url('images/chart-26/network.svg'); } .bcharts-adonis-chart-selector[chart="treemap"]::before { - background-position-x: -510px; + background-image: url('images/chart-26/treemap.svg'); } .bcharts-adonis-chart-selector[chart="decisionTree"]::before { - background-position-x: -540px; + background-image: url('images/chart-26/decisionTree.svg'); } .bcharts-adonis-chart-selector[chart="decisionTreeForBrightics"]::before { - background-position-x: -540px; + background-image: url('images/chart-26/decisionTree.svg'); } .bcharts-adonis-chart-selector[chart="table"]::before { - background-position-x: -570px; + background-image: url('images/chart-26/table.svg'); } .bcharts-adonis-chart-selector[chart="mcc"]::before { - background-position-x: -600px; + background-image: url('images/chart-26/mcc.svg'); } .bcharts-adonis-chart-selector[chart="dendrogram"]::before { - background-position-x: -630px; + background-image: url('images/chart-26/dendrogram.svg'); } .bcharts-adonis-chart-selector[chart="roccurve"]::before { - background-position-x: -660px; + background-image: url('images/chart-26/roccurve.svg'); } .bcharts-adonis-chart-selector[chart="correlation-matrix"]::before { - background-position-x: -690px; + background-image: url('images/chart-26/correlation-matrix.svg'); } .bcharts-adonis-chart-selector[chart="map"]::before { - background-position-x: -720px; + background-image: url('images/chart-26/map.svg'); } .bcharts-adonis-chart-selector[chart="biplot"]::before { - background-position-x: -750px; + background-image: url('images/chart-26/biplot.svg'); } .bcharts-adonis-chart-selector[chart="pos-neg-bar"]::before { - background-position-x: -780px; + background-image: url('images/chart-26/pos-neg-bar.svg'); } .bcharts-adonis-chart-selector[chart="radar"]::before { - background-position-x: -810px; + background-image: url('images/chart-26/radar.svg'); } .bcharts-adonis-chart-selector[chart="wordcloud"]::before { - background-position-x: -840px; + background-image: url('images/chart-26/wordcloud.svg'); } .bcharts-adonis-chart-selector[chart="complex"]::before { - background-position-x: -870px; + background-image: url('images/chart-26/complex.svg'); } .bcharts-adonis-chart-selector[chart="histogram"]::before { - background-position-x: -900px; + background-image: url('images/chart-26/histogram.svg'); } .bcharts-adonis-chart-selector[chart="bubble"]::before { - background-position-x: -930px; + background-image: url('images/chart-26/bubble.svg'); } .bcharts-adonis-chart-selector[chart="heatmap-matrix"]::before { - background-position-x: -960px; + background-image: url('images/chart-26/heatmap-matrix.svg'); } .bcharts-adonis-chart-selector[chart="qqplot"]::before { - background-position-x: -990px; + background-image: url('images/chart-26/qqplot.svg'); } .bcharts-adonis-chart-selector[chart="pairwise-scatter"]::before { - background-position-x: -1020px; + background-image: url('images/chart-26/pairwise-scatter.svg'); } .bcharts-adonis-chart-selector[chart="card"]::before { - background-position-x: -1050px; + background-image: url('images/chart-26/card.svg'); } .bcharts-adonis-chart-selector[chart="donut"]::before { - background-position-x: -1080px; + background-image: url('images/chart-26/donut.svg'); } .bcharts-adonis-chart-selector[chart="image-grid"]::before { - background-position-x: -1110px; + background-image: url('images/chart-26/image-grid.svg'); } -.selected .bcharts-adonis-chart-selector::before { - background-position-y: -60px; +.bcharts-adonis-chart-selector[chart="wordCloud"]::before { + background-image: url('images/chart-26/wordcloud.svg'); } .bcharts-adonis-chart-selector-16 { - padding: 0 2px 0 18px; + padding: 0 2px 0 25px; box-sizing: border-box; line-height: 16px; cursor: pointer; @@ -293,156 +271,158 @@ content: ''; width: 16px; height: 16px; - background-image: url('images/bcharts.png'); - background-position-y: -238px; position: absolute; top: 0; left: 0; } .bcharts-adonis-chart-selector-16[chart="column"]::before { - background-position-x: -60px; + background-image: url('images/chart-16/column.svg'); } .bcharts-adonis-chart-selector-16[chart="bar"]::before { - background-position-x: -76px; + background-image: url('images/chart-16/bar.svg'); } .bcharts-adonis-chart-selector-16[chart="line"]::before { - background-position-x: -92px; + background-image: url('images/chart-16/line.svg'); } .bcharts-adonis-chart-selector-16[chart="boxplot"]::before { - background-position-x: -108px; + background-image: url('images/chart-16/boxplot.svg'); } .bcharts-adonis-chart-selector-16[chart="scatter"]::before { - background-position-x: -124px; + background-image: url('images/chart-16/scatter.svg'); } .bcharts-adonis-chart-selector-16[chart="pie"]::before { - background-position-x: -140px; + background-image: url('images/chart-16/pie.svg'); } .bcharts-adonis-chart-selector-16[chart="table"]::before { - background-position-x: -156px; + background-image: url('images/chart-16/table.svg'); } .bcharts-adonis-chart-selector-16[chart="treemap"]::before { - background-position-x: -172px; + background-image: url('images/chart-16/treemap.svg'); } .bcharts-adonis-chart-selector-16[chart="network"]::before { - background-position-x: -188px; + background-image: url('images/chart-16/network.svg'); } .bcharts-adonis-chart-selector-16[chart="decisionTree"]::before { - background-position-x: -204px; + background-image: url('images/chart-16/decisionTree.svg'); } .bcharts-adonis-chart-selector-16[chart="decisionTreeForBrightics"]::before { - background-position-x: -204px; + background-image: url('images/chart-16/decisionTree.svg'); } .bcharts-adonis-chart-selector-16[chart="dendrogram"]::before { - background-position-x: -220px; + background-image: url('images/chart-16/dendrogram.svg'); } /*FIXME: correlation matrix img ->heatmap image*/ .bcharts-adonis-chart-selector-16[chart="heatmap"]::before { - background-position-x: -236px; + background-image: url('images/chart-16/heatmap.svg'); } .bcharts-adonis-chart-selector-16[chart="mcc"]::before { - background-position-x: -252px; + background-image: url('images/chart-16/mcc.svg'); } .bcharts-adonis-chart-selector-16[chart="roccurve"]::before { - background-position-x: -268px; + background-image: url('images/chart-16/roccurve.svg'); } .bcharts-adonis-chart-selector-16[chart="map"]::before { - background-position-x: -284px; + background-image: url('images/chart-16/map.svg'); } .bcharts-adonis-chart-selector-16[chart="biplot"]::before { - background-position-x: -300px; + background-image: url('images/chart-16/biplot.svg'); } .bcharts-adonis-chart-selector-16[chart="pos-neg-bar"]::before { - background-position-x: -316px; + background-image: url('images/chart-16/pos-neg-bar.svg'); } .bcharts-adonis-chart-selector-16[chart="bar-stacked"]::before { - background-position-x: -332px; + background-image: url('images/chart-16/bar-stacked.svg'); } .bcharts-adonis-chart-selector-16[chart="bar-stacked-100"]::before { - background-position-x: -348px; + background-image: url('images/chart-16/bar-stacked-100.svg'); } .bcharts-adonis-chart-selector-16[chart="column-stacked"]::before { - background-position-x: -364px; + background-image: url('images/chart-16/column-stacked.svg'); } .bcharts-adonis-chart-selector-16[chart="column-stacked-100"]::before { - background-position-x: -380px; + background-image: url('images/chart-16/column-stacked-100.svg'); } .bcharts-adonis-chart-selector-16[chart="area"]::before { - background-position-x: -396px; + background-image: url('images/chart-16/area.svg'); } .bcharts-adonis-chart-selector-16[chart="area-stacked"]::before { - background-position-x: -412px; + background-image: url('images/chart-16/area-stacked.svg'); } .bcharts-adonis-chart-selector-16[chart="area-stacked-100"]::before { - background-position-x: -428px; + background-image: url('images/chart-16/area-stacked-100.svg'); } .bcharts-adonis-chart-selector-16[chart="radar"]::before { - background-position-x: -444px; + background-image: url('images/chart-16/radar.svg'); } .bcharts-adonis-chart-selector-16[chart="wordcloud"]::before { - background-position-x: -460px; + background-image: url('images/chart-16/wordcloud.svg'); } .bcharts-adonis-chart-selector-16[chart="complex"]::before { - background-position-x: -476px; + background-image: url('images/chart-16/complex.svg'); } .bcharts-adonis-chart-selector-16[chart="histogram"]::before { - background-position-x: -492px; + background-image: url('images/chart-16/histogram.svg'); } .bcharts-adonis-chart-selector-16[chart="bubble"]::before { - background-position-x: -508px; + background-image: url('images/chart-16/bubble.svg'); } .bcharts-adonis-chart-selector-16[chart="heatmap-matrix"]::before { - background-position-x: -524px; + background-image: url('images/chart-16/heatmap-matrix.svg'); } .bcharts-adonis-chart-selector-16[chart="qqplot"]::before { - background-position-x: -540px; + background-image: url('images/chart-16/qqplot.svg'); } .bcharts-adonis-chart-selector-16[chart="pairwise-scatter"]::before { - background-position-x: -556px; + background-image: url('images/chart-16/pairwise-scatter.svg'); } .bcharts-adonis-chart-selector-16[chart="card"]::before { - background-position-x: -572px; + background-image: url('images/chart-16/card.svg'); } .bcharts-adonis-chart-selector-16[chart="donut"]::before { - background-position-x: -588px; + background-image: url('images/chart-16/donut.svg'); } .bcharts-adonis-chart-selector-16[chart="image-grid"]::before { - background-position-x: -604px; + background-image: url('images/chart-16/image-grid.svg'); +} + +.bcharts-adonis-chart-selector-16[chart="wordCloud"]::before { + background-image: url('images/chart-16/wordcloud.svg'); } .bos-col-1 { @@ -510,9 +490,8 @@ .bos-display-flex { display: flex; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + padding-top: 2px; + padding-bottom: 2px; } .bos-display-flex-center { @@ -533,6 +512,10 @@ justify-content: space-between; } +.bos-flex-row { + flex-direction: row; +} + .bos-flex-space-evenly { justify-content: space-evenly; } @@ -541,6 +524,10 @@ justify-content: center; } +.bos-flex-left { + justify-content: left; +} + .bos-flex-align-center { align-items: center; } @@ -565,24 +552,55 @@ flex: 4; } +.bos-flex-5 { + flex: 5; +} + +.bos-flex-6 { + flex: 6; +} + .bos-display-flex .bos-widget-header { - width: 70px; + width: 100%; display: flex; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; /*justify-content: center;*/ align-items: center; + font-size: 14px; + line-height: 30px; + /*color: #767676;*/ + /*padding-bottom: 8px;*/ } .bos-display-flex .bos-widget-header.half { - width: 35px; + width: 50%; +} + +.bos-display-flex .bos-widget-multi-label { + display: flex; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + align-items: center; + font-size: 14px; + line-height: 20px; + /*color: #767676;*/ +} + +.bos-display-flex .bos-widget-multi-label.half { + width: 50%; } .bos-text-overflow-hidden { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + font-size: 12px; + line-height: 18px; + color: #767676; + text-align: left; /*white-space: normal;*/ /*display: -webkit-box;*/ /*-webkit-line-clamp: 1;*/ @@ -597,7 +615,6 @@ .bos-flex-direction-column .bos-widget-header, .bos-widget-contents { flex-grow: 1; - padding: 2.5px 0; } .bos-border-only-bottom { @@ -615,6 +632,7 @@ height: 20px; box-sizing: border-box; flex-shrink: 0; + margin-right: 15px; } .bos-simple-circle { @@ -639,11 +657,21 @@ /*widget css START*/ +.bos-widget-header-label { + text-align: left; + justify-content: left; + display: left; + align-items: left; + width: 35px; +} + .bos-widget-label { text-align: center; justify-content: center; display: flex; align-items: center; + line-height: 20px; + color: #767676; } .bos-widget-inputbox { @@ -725,44 +753,41 @@ } .bos-border-color-red { - border-color: rgba(194, 6, 17, .65) !important; - border: 1px solid; + outline: 1px solid rgba(194, 6, 17, .65) !important; } .bos-border-color-blue { - border-color: rgba(98, 111, 219, 1.0) !important; - border: 1px solid; + outline: 1px solid #3420c3 !important; } .bos-dialogs-header { - font-family: Arial, helvetica, sans-serif; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; - - width: calc(100% - 20px) !important; - margin-left: 10px; - padding: 10px 0 5px 0; - + width: calc(100% - 4px) !important; + height: 34px !important; + margin: 6px 2px 6px 2px; + padding: 0; border-color: #d9d9d9; background-color: #fff; } -.bos-dialogs-header .jqx-window-close-button { - position: absolute; - right: 0; - top: 0 !important; - width: 18px !important; - height: 18px !important; - background-image: url(images/tool-close-18.png); - background-repeat: no-repeat; - background-position: 0 0; +.bos-dialogs-header .left{ + line-height: 34px; + margin-left: 10px; +} + +.bos-dialogs-header .right{ + padding-top: 7px; + padding-right: 15px; } .bos-dialogs-body { - font-family: Arial, helvetica, sans-serif; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif; width: 100%; height: 100%; position: relative; + padding: 0 !important; } .bos-font-bold { @@ -801,11 +826,11 @@ } .bos-widget-column-contents { - width: calc(100% - 70px); + width: 100%; } .bos-widget-column-unit { - font-family: Arial, helvetica, sans-serif; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif; font-size: 11px; position: relative; float: left; @@ -814,11 +839,7 @@ flex: 1; line-height: 34px; height: 100%; - background-color: white; - - border: 1px solid #CCCCCC; - border-radius: 17.5px; box-sizing: border-box; overflow: hidden; cursor: pointer; @@ -844,32 +865,66 @@ -moz-box-sizing: border-box; box-sizing: border-box; align-items: center; - height: 35px; - margin: 2px 0; + height: 30px; + margin-bottom: 5px; +} + +.bos-widget-column-unit-label { + width: 100%; + height: 30px; + box-sizing: border-box; + font-size: 14px; + font-family: 'NotoSansCJKkr', Arial; + display: block; + align-items: center; + justify-content: center; + text-align: left; + line-height: 30px; + padding: 0 10px; + + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + + border: 1px solid #cccccc; + background-color: #ffffff; + color: #959595; } -.bos-widget-column-unit-label, .bos-widget-datasource-unit-label { + width: 100%; + height: 30px; + box-sizing: border-box; + font-size: 14px; + font-family: 'NotoSansCJKkr', Arial; align-items: center; + justify-content: left; + line-height: 30px; + padding: 0 10px; + overflow: hidden; white-space: nowrap; text-overflow: ellipsis; - padding: 0 20px 0 8px; + border: 1px solid #cccccc; + background-color: #ffffff; + color: #959595; } .bos-column-unit-type { - min-width: 65px; - width: 65px; - height: 100%; + width: 40%; + height: 30px; box-sizing: border-box; - background-color: #E6E9FF; - color: #454758; - font-size: 12px; - font-family: Arial; + font-size: 14px; + font-family: 'NotoSansCJKkr', Arial; display: flex; align-items: center; justify-content: center; + line-height: 30px; + + border: 1px solid #3420c3; + background-color: #ebe9f9; + color: #3420c3; } .bos-widget-disable { @@ -894,22 +949,6 @@ margin: 3px 0 3px 1px; } -.bos-widget-button-group-container .jqx-button { - height: 30px; - background-color: #ffffff; -} - -.bos-widget-button-group-container .jqx-button:not(:first-child) { - border-left: none; - margin-left: 0 !important; -} - -.bos-widget-button-group-container .jqx-button.jqx-fill-state-pressed-office { - background-color: #8290FF; - border-color: #d9d9d9; - color: #ffffff; -} - .bos-aggregation-list-box { display: flex; -webkit-box-sizing: border-box; @@ -934,7 +973,12 @@ } .bo-control-container-contents .bos-widget-chart-selector { - max-width: calc(100% - 70px); + width: 100%; + max-width: 100%; + border-left: 0; + border-right: 0; + border-top: 0; + border-bottom: 1px solid #cccccc; } .bos-widget-chart-selector.bos-widget-chart-selector-readonly, @@ -945,7 +989,6 @@ .bos-widget-item-selector { height: 35px; - border-radius: 17.5px; padding: 3px 0; margin: 2px 0; } @@ -972,9 +1015,9 @@ box-sizing: border-box; flex-direction: column; flex: 1; - max-width: 270px; - margin: 3px 10px 0px 10px; + margin: 3px 0px 0px 0px; position: relative; + height: calc(100% - 20px); } .bos-widget-column-selector-list { @@ -986,51 +1029,44 @@ display: flex; flex-direction: row; align-items: center; - height: 25px; + height: 32px; cursor: pointer; - margin-right: 10px; overflow: hidden; + padding: 0 20px; } .bos-dialog-column-item-type { - width: 70px; - min-width: 70px; height: 21px; box-sizing: border-box; - margin-top: 2px; - margin-left: 2px; - border-radius: 9.5px; - background-color: #e6e9ff; - border: solid 1px #bdc0d6; display: flex; - justify-content: center; - align-items: center; - font-size: 11px; - text-align: center; -} - -.bos-dialog-column-item-type.bos-dialog-column-item-type-schema { - background-color: #828282; - color: #ffffff; + justify-content: right; + align-items: right; + font-size: 14px; + text-align: right; + color: #767676; } .bos-dialog-column-item-wrapper.selected { - background-color: #8190ff; + background-color: #ebe9f9; } .bos-dialog-column-item-label { - font-size: 12px; - padding-left: 10px; + font-size: 14px; + justify-content: left; + align-items: left; + text-align: left; + color: #333333; + line-height: 20px; + margin-right: auto; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } .bos-dialog-column-item-label.has-type { max-width: calc(100% - 80px); } -.selected .bos-dialog-column-item-label { - color: #ffffff; -} - .bos-aggregation-list-box .bos-dialog-column-item-wrapper { display: flex; align-items: center; @@ -1038,32 +1074,12 @@ font-size: 12px; } -.bos-aggregation-list-box .bos-dialog-column-item-wrapper.selected { - color: #ffffff; - -} - .bos-dialog-filter-container { box-sizing: border-box; - width: 100%; - padding: 5px 10px 5px 10px; -} - -input[type=search].jqx-input-office { - padding-right: 30px; - background: url(images/search-28.png) no-repeat; - background-position: center right; - font-size: 13px; - box-sizing: border-box; - min-width: 16px; - min-height: 16px; - margin: 0; - padding: 0; - padding-right: 10px; - padding-left: 10px; - border-width: 1px; - border-style: solid; - width: 100%; + width: calc(100% - 40px); + padding: 5px 0px; + margin: 0 20px; + border-bottom: 1px solid #cccccc; } .bos-dialog-column-item { @@ -1082,7 +1098,10 @@ input[type=search].jqx-input-office { .bos-widget-selector { box-sizing: border-box; - border: 1px solid #d9d9d9; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #cccccc; padding-left: 0.1px; background-color: #ffffff; } @@ -1124,14 +1143,6 @@ input[type=search].jqx-input-office { margin-right: 2px; } -.bos-container .bos-control-container-expander-expanded .jqx-expander-header-content { - color: rgba(0, 0, 0, 1); -} - -.bos-container .bos-control-container-expander-collapsed .jqx-expander-header-content { - color: rgba(0, 0, 0, 0.8); -} - /*chart option control START*/ .bos-container .bos-control-container-expander { position: relative; @@ -1176,7 +1187,7 @@ input[type=search].jqx-input-office { .bos-control-container-label { border: none; - background-color: #f7f7f7; + background-color: #ffffff; display: flex; align-items: center; padding: 0 0 0 20px; @@ -1184,13 +1195,17 @@ input[type=search].jqx-input-office { font-size: 14px !important; height: 40px !important; position: relative; + line-height: 20px; + color: #333333; + font-weight: 500; + padding-left: 0; } -.bos-control-container-label.jqx-fill-state-pressed { +.bos-control-container-label.brtc-toggle-button__check--checked { background-color: #ffffff; } -.bos-control-container-label.jqx-fill-state-pressed:after { +.bos-control-container-label.brtc-toggle-button__check--checked:after { content: ''; position: absolute; top: 39px; @@ -1267,6 +1282,10 @@ input[type=search].jqx-input-office { margin: 5px 0 6px auto; } +.bos-widget-onoff-switch.bos-widget-button-disable{ + opacity: .55; +} + .bos-widget-onoff-switch input { display: none; } @@ -1292,11 +1311,11 @@ input[type=search].jqx-input-office { } .bos-widget-onoff-switch input:checked + .bos-widget-onoff-switch-slider { - background-color: #8290FF; + background-color: #3420c3; } .bos-widget-onoff-switch input:hover + .bos-widget-onoff-switch-slider { - box-shadow: 0 0 2px #8290FF; + box-shadow: 0 0 2px #3420c3; } .bos-widget-onoff-switch input:checked + .bos-widget-onoff-switch-slider::before { @@ -1305,6 +1324,13 @@ input[type=search].jqx-input-office { transform: translateX(22px); } + +.bos-widget-onoff-switch-slider.bos-widget-button-disable { + cursor: default; + pointer-events: none; + color: rgba(0, 0, 0, 0.8); +} + .bos-widget-onoff-switch-inner { display: inline-block; line-height: 28px; @@ -1323,30 +1349,8 @@ input[type=search].jqx-input-office { margin-right: 4px; } -.bos-control-container-label .jqx-expander-arrow { - width: 12px; - height: 6px; - margin: 0 !important; - left: 20px; - top: 17px; -} - -.bos-control-container-label .jqx-expander-arrow.jqx-expander-arrow-top { - background-image: url('images/icon/icon-arrow-down.png'); -} - -.bos-control-container-label .jqx-expander-arrow.jqx-expander-arrow-bottom { - background-image: url('images/icon/icon-arrow-up.png'); -} - -.bos-control-container-label .jqx-expander-header-content { - padding: 0 !important; - margin: 0 24px !important; - flex-grow: 1; -} - .bos-control-container-contents { - padding: 0 20px; + padding: 0 16px; } .bos-control { @@ -1361,13 +1365,13 @@ input[type=search].jqx-input-office { } .bos-control-contents { - background-color: #f7f7f7; + background-color: #ffffff; padding: 8px; margin-bottom: 5px; } .bos-control-subcontents { - background-color: #eaeaea; + background-color: #ffffff; padding: 10px; margin-bottom: 5px; } @@ -1386,6 +1390,23 @@ input[type=search].jqx-input-office { cursor: pointer; } +.bos-control-header-add-button-box-style { + width: 64px; + height: 32px; + border-radius: 2px; + border: 1px solid #cccccc; + color: #5a5a5a; + line-height: 20px; + font-size: 14px; + background: #ffffff; + display: inline-block; + cursor: pointer; +} + +.bos-control-header-add-button-box-style:focus { + outline: 0; +} + .bos-control-header-add-button:hover { background-position: -17px 0; } @@ -1399,6 +1420,7 @@ input[type=search].jqx-input-office { display: inline-block; background: url('images/tool-close-18.png') no-repeat; background-position: -4px -5px; + cursor: pointer; } .bos-middle-button { @@ -1409,6 +1431,7 @@ input[type=search].jqx-input-office { .bos-deletable-component { position: relative; padding-top: 17px; + border: 1px solid #eaeaea; } .bos-fit-contents { @@ -1420,15 +1443,6 @@ input[type=search].jqx-input-office { justify-content: space-between; } -/*modify jqx widget css */ -.jqx-fill-state-pressed-office { - /*background-color: #ffffff;*/ -} - -.jqx-expander-header-content-office { - margin-left: 12px; -} - .bos-icon-help { float: right; @@ -1443,6 +1457,14 @@ input[type=search].jqx-input-office { /************************ * Color Picker CSS Start ************************/ +.bo-widget-color-picker-wrapper { + justify-content: flex-start; +} + +.bo-component-style-font { + margin-right: 2px; +} + .bos-widget-color-picker-container { position: relative; display: flex; @@ -1451,9 +1473,10 @@ input[type=search].jqx-input-office { box-sizing: border-box; width: 100%; height: 100%; - border: 1px solid #d9d9d9; + outline: 1px solid #eaeaea; + border-radius: 30px; background-color: #ffffff; - margin: 2.5px 0; + cursor: pointer; /* javascript code로 width: 50px; height: 30px; 넣고 있음. 2017. 05. 30 ColorPickerWidget.prototype._configureMainControlSize = function () { this.$mainControl.css('width', (this.options.width) ? this.options.width : '50px'); @@ -1462,8 +1485,25 @@ input[type=search].jqx-input-office { */ } +.bos-widget-color-palette-container .bos-widget-color-picker-container { + outline: none; +} + +.bos-widget-color-picker-icon-container { + position: relative; + display: flex; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 28px; + height: 28px; + cursor: pointer; + background-image: url('images/icon-color-picker.png'); +} + .bos-widget-color-picker-container.bos-widget-disable .bos-widget-disable-cover { background-color: rgba(245, 245, 245, 0.5); + cursor: default; } .bos-color-picker-box-wrapper { @@ -1531,15 +1571,15 @@ input[type=search].jqx-input-office { height: 12px; } -.bos-font-style-bold.jqx-fill-state-pressed { +.bos-font-style-bold.brtc-toggle-button__check--checked { background-image: url('images/icon/icon-font-heavy-white.png'); } -.bos-font-style-italic.jqx-fill-state-pressed { +.bos-font-style-italic.brtc-toggle-button__check--checked { background-image: url('images/icon/icon-font-slope-white.png'); } -.bos-font-style-underline.jqx-fill-state-pressed { +.bos-font-style-underline.brtc-toggle-button__check--checked { background-image: url('images/icon/icon-font-underline-white.png'); } @@ -1562,15 +1602,15 @@ input[type=search].jqx-input-office { background-image: url('images/align-right.png'); } -.bos-horizontal-align-left.jqx-fill-state-pressed { +.bos-horizontal-align-left.brtc-toggle-button__check--checked { background-image: url('images/align-left-white.png'); } -.bos-horizontal-align-center.jqx-fill-state-pressed { +.bos-horizontal-align-center.brtc-toggle-button__check--checked { background-image: url('images/align-center-white.png'); } -.bos-horizontal-align-right.jqx-fill-state-pressed { +.bos-horizontal-align-right.brtc-toggle-button__check--checked { background-image: url('images/align-right-white.png'); } @@ -1596,16 +1636,16 @@ input[type=search].jqx-input-office { background-position-y: 80%; } -.bos-vertical-align-up.jqx-fill-state-pressed { +.bos-vertical-align-up.brtc-toggle-button__check--checked { background-image: url('images/align-up-white.png'); background-position-y: 20%; } -.bos-vertical-align-middle.jqx-fill-state-pressed { +.bos-vertical-align-middle.brtc-toggle-button__check--checked { background-image: url('images/align-middle-white.png'); } -.bos-vertical-align-down.jqx-fill-state-pressed { +.bos-vertical-align-down.brtc-toggle-button__check--checked { background-image: url('images/align-down-white.png'); background-position-y: 80%; } @@ -1618,11 +1658,11 @@ input[type=search].jqx-input-office { background-image: url('images/align-vertical.png'); } -.bos-direction-align-horizontal.jqx-fill-state-pressed { +.bos-direction-align-horizontal.brtc-toggle-button__check--checked { background-image: url('images/align-horizontal-white.png'); } -.bos-direction-align-vertical.jqx-fill-state-pressed { +.bos-direction-align-vertical.brtc-toggle-button__check--checked { background-image: url('images/align-vertical-white.png'); } @@ -1649,6 +1689,68 @@ input[type=search].jqx-input-office { .bos-row-multi-div { display: inline-flex; + padding-right: 5px; + padding-left: 5px; +} + +.bos-component-legend-set-btn { + display: block; + margin: 2px; + width: 100%; + height: 30px; + background-color: #3420c3; + border-color: #d9d9d9; + color: #ffffff; + text-align: center; + line-height: 30px; + cursor: pointer; +} + +.bos-custom-legend-label-control { + padding: 0 0 0 22px; +} + +.custom-legend-label-table { + height: 235px; + width: auto; +} + +.custom-legend-label-table-set-btn { + display: flex; + width: 100%; + margin-left: -11px; + margin-top: 5px; +} + +.custom-legend-label-table-set-btn > div { + display: block; + margin: 2px; + width: 100%; + height: 28px; + background-color: #3420c3; + border-color: #d9d9d9; + color: #ffffff; + text-align: center; + line-height: 28px; + cursor: pointer; +} + +.bo-component-style-column-selector { + height: 40px; +} + +.bo-component-style-width-selector { + height: 40px; + padding: 0; +} +.brtc-toggle-button__check--disabled { + opacity: 0.5; +} + +.bo-component-chart-position-contents .bo-widget-position-top, .bo-component-chart-position-contents .bo-widget-position-bottom{ + width: 105px; + margin-left: auto; + margin-right: auto; } /*chart option control END*/ @@ -1657,12 +1759,10 @@ input[type=search].jqx-input-office { position: relative; } -/* jqxTab에 가려짐. */ .bcharts-ds-panel .ps-scrollbar-x-rail { z-index: 999999; } -/* jqxTab에 가려짐. */ .bcharts-ds-panel .ps-scrollbar-y-rail { z-index: 999999; } @@ -1801,54 +1901,19 @@ input[type=search].jqx-input-office { visibility: hidden; } -.bcharts-ds-contents { -} - -.bcharts-ds .jqx-tabs-headerWrapper.jqx-tabs-header { - padding: 0 !important; - margin: 0 20px; - height: 32px !important; -} - -.bcharts-ds ul.jqx-tabs-title-container.jqx-tabs-title-container-office { - width: 100% !important; - height: 32px !important; -} - -.bcharts-ds li.jqx-tabs-title { - width: 50% !important; /* 다른 css가 .jqx-tabs-title을 바꿀 수 도 있어서 important */ - background-color: #fff; - box-sizing: border-box; - - height: 32px !important; - line-height: 26px !important; - padding: 0 !important; - display: flex; - justify-content: center; - border: none; /* 모든 border를 제거한 후 bottom 만 붙인다. */ - border-bottom: 1px solid #D9D9D9; -} - -.bcharts-ds li.jqx-tabs-title-selected-top { - color: #8190FF; - border-bottom: 2px solid #8190FF; -} - -.bcharts-ds .jqx-tabs-content { - padding: 0 !important; /* 다른 css가 .jqx-tabs-content을 바꿀 수 도 있어서 important */ - margin: 15px 0 10px 19px; +.bcharts-ds-columns-container { + padding: 15px; } .bcharts-ds-columns-util-tools-area { - width: calc(100% - 21px); + width: 100%; } .bcharts-ds-columns { box-sizing: border-box; - padding: 0 12px 0 0; max-height: 378px; position: relative; - width: calc(100% - 9px); + width: 100%; } .bcharts-ds-column { @@ -1871,7 +1936,7 @@ input[type=search].jqx-input-office { background-color: #E6E9FF; color: #454758; font-size: 12px; - font-family: Arial; + font-family: 'NotoSansCJKkr', Arial; display: flex; align-items: center; justify-content: center; @@ -1906,70 +1971,6 @@ input[type=search].jqx-input-office { box-sizing: content-box; } -.bcharts-ds-columns-searcharea input[type=search].jqx-input-office { - width: 100%; - height: 31px; -} - -input[type=search].jqx-input-office { - padding-right: 30px; - - background: url('images/search-28.png') no-repeat; - background-position: center right; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button:hover { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-ms-clear { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; -} - -input[type=search].jqx-input-office::-ms-clear:hover { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; -} - -.bcharts-ds .jqx-tabs-titleContentWrapper { - display: flex !important; - float: none !important; - margin-top: 0 !important; -} - .bcharts-ds .bcharts-ds-contents-tab-columns { margin-right: 3px; } @@ -1990,14 +1991,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { position: relative; } -.bfs-container .bfs-control-container-expander-expanded .jqx-expander-header-content { - color: rgba(0, 0, 0, 1); -} - -.bfs-container .bfs-control-container-expander-collapsed .jqx-expander-header-content { - color: rgba(0, 0, 0, 0.8); -} - .bfs-control-container-header-label { flex-grow: 1; line-height: 18px; @@ -2034,11 +2027,11 @@ input[type=search].jqx-input-office::-ms-clear:hover { line-height: 100%; } -.bfs-container .bfs-control-container-expander { +/*.bfs-container .bfs-control-container-expander { position: relative; box-sizing: border-box; -} - +}*/ +/* .bfs-container .bfs-control-container-expander::before { content: ''; position: absolute; @@ -2067,15 +2060,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { z-index: 2; } -.bfs-control-container-expander.bfs-control-container-expander-expanded::after { - content: ''; - position: absolute; - width: 100%; - height: 1px; - background-color: #AEAEAE; - z-index: 2; -} - .bfs-control-container-label { border: none; background-color: #f7f7f7; @@ -2088,47 +2072,10 @@ input[type=search].jqx-input-office::-ms-clear:hover { position: relative; } -.bfs-control-container-label.jqx-fill-state-pressed { - background-color: #ffffff; -} - -.bfs-control-container-label.jqx-fill-state-pressed:after { - content: ''; - position: absolute; - top: 39px; - left: 20px; - - box-sizing: border-box; - width: calc(100% - 40px); - height: 1px; - background-color: #d9d9d9; -} - -.bfs-control-container-label .jqx-expander-arrow { - width: 12px; - height: 6px; - margin: 0 !important; -} - -.bfs-control-container-label .jqx-expander-arrow.jqx-expander-arrow-top { - background-image: url('images/icon/icon-arrow-down.png'); -} - -.bfs-control-container-label .jqx-expander-arrow.jqx-expander-arrow-bottom { - background-image: url('images/icon/icon-arrow-up.png'); -} - -.bfs-control-container-label .jqx-expander-header-content { - padding: 0 !important; - margin: 0 24px !important; - flex-grow: 1; - width: calc(100% - 48px); -} - .bfs-control-container-contents { padding: 0 20px; } - +*/ .bfs-control { padding: 5px 0; } @@ -2187,8 +2134,12 @@ input[type=search].jqx-input-office::-ms-clear:hover { margin-top: 10px; } -.bfs-column-filter-control .jqx-checkbox-office { - margin-bottom: 4px; +.bfs-column-filter-checkbox > div { + margin-bottom: 5px; +} + +.bfs-column-filter-listbox > div > table > tbody > tr > td { + padding: 3px 5px; } .bfs-column-filter-slider { @@ -2267,6 +2218,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { } .bfs-widget-button { + font-family: 'NotoSansCJKkr', arial,sans-serif; line-height: 30px; height: 30px; background-color: #f7f7f7; @@ -2279,6 +2231,10 @@ input[type=search].jqx-input-office::-ms-clear:hover { background-color: #e7e7e7; } +.bfs-widget-button-disable { + pointer-events: none; + color: #DBDDE2; +} .bcharts-layout { width: 100%; @@ -2299,17 +2255,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { height: 100%; } -.bcharts-layout .jqx-splitter-collapse-button-horizontal, .bcharts-layout .jqx-splitter-collapse-button-vertical { - display: none; -} - -.bcharts-layout .jqx-splitter-splitbar-horizontal, .bcharts-layout .jqx-splitter-splitbar-vertical { - border-color: transparent; -} - -.bcharts-layout-splitter > .jqx-splitter-splitbar-vertical:last-child, .bcharts-layout-splitter > .jqx-splitter-splitbar-horizontal:last-child { - background-color: #e5e5e5; -} .bcharts-ws-panel { display: block; width: calc(100% - 1px); @@ -2452,10 +2397,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { padding: 0 7px 7px 7px; } -.bcharts-ws-panel-contents .bcharts-chart.jqx-grid { - box-sizing: border-box; -} - .bcharts-ws-panel.ui-selected { border-color: #656eea; } @@ -2563,7 +2504,3 @@ input[type=search].jqx-input-office::-ms-clear:hover { animation-duration: 0.1s; animation-iteration-count: 1; } - -.bcharts-layout-splitter, .bcharts-layout-splitter .jqx-splitter-panel { - overflow: visible; -} diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.min.css b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.min.css index 66f120d9a..71f8708ad 100644 --- a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.min.css +++ b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-adonis-all.min.css @@ -1,5 +1,5 @@ -/* Brightics 2.0 Chart Build 190718 */ -/* Brightics 2.0 Chart Build 190718 */ +/* Brightics 2.0 Chart Build 200703 */ +/* Brightics 2.0 Chart Build 200703 */ .bcharts-adonis { display: flex; } @@ -16,29 +16,6 @@ flex-direction: column; } -.bcharts-adonis .jqx-tabs, .bo-container .jqx-tabs { - border: none; -} - -.bcharts-adonis .jqx-tabs-headerWrapper, .bo-container .jqx-tabs-headerWrapper { - border: none; -} - -.bcharts-adonis li.jqx-tabs-title, .bo-container li.jqx-tabs-title{ - border: 1px solid #DBDDE2; - padding-bottom: 7px; - margin-right: 0; - width: 76px; -} - -.bcharts-adonis li.jqx-tabs-title-selected-top, .bo-container li.jqx-tabs-title-selected-top { - border-top: 2px solid #6C79E9; - color: rgba(0, 0, 0, 0.8); - background-color: #FFFFFF; - padding-bottom: 6px; - border-bottom: 1px solid #FFF; -} - .bcharts-adonis-left { width: 260px; height: 100%; @@ -60,7 +37,7 @@ height: 100%; box-sizing: border-box; border: solid 1px #DBDDE2; - background: #f7f7f7; + background: #ffffff; margin-left: 8px; } @@ -71,11 +48,14 @@ } .bcharts-adonis-viewpart-header { - height: 54px; + height: 24px; box-sizing: border-box; - line-height: 54px; - text-align: center; + text-align: left; font-weight: bold; + color: #333333; + line-height: 24px; + font-size: 16px; + margin: 14px 0 14px 20px; } .bcharts-adonis-viewpart::before @@ -105,7 +85,7 @@ /*chart type*/ .bcharts-adonis-chart-selector { - padding-left: 30px; + padding-left: 40px; box-sizing: border-box; line-height: 30px; cursor: pointer; @@ -120,169 +100,167 @@ .bcharts-adonis-chart-selector::before { content: ''; - width: 30px; - height: 30px; - background-image: url('images/bcharts.png'); - background-position-y: -30px; + width: 40px; + height: 40px; position: absolute; top: 0; left: 0; } .bcharts-adonis-chart-selector[chart="scatter"]::before { - background-position-x: -60px; + background-image: url('images/chart-26/scatter.svg'); } .bcharts-adonis-chart-selector[chart="line"]::before { - background-position-x: -90px; + background-image: url('images/chart-26/line.svg'); } .bcharts-adonis-chart-selector[chart="column"]::before { - background-position-x: -120px; + background-image: url('images/chart-26/column.svg'); } .bcharts-adonis-chart-selector[chart="column-stacked"]::before { - background-position-x: -150px; + background-image: url('images/chart-26/column-stacked.svg'); } .bcharts-adonis-chart-selector[chart="column-stacked-100"]::before { - background-position-x: -180px; + background-image: url('images/chart-26/column-stacked-100.svg'); } .bcharts-adonis-chart-selector[chart="bar"]::before { - background-position-x: -210px; + background-image: url('images/chart-26/bar.svg'); } .bcharts-adonis-chart-selector[chart="bar-stacked"]::before { - background-position-x: -240px; + background-image: url('images/chart-26/bar-stacked.svg'); } .bcharts-adonis-chart-selector[chart="bar-stacked-100"]::before { - background-position-x: -270px; + background-image: url('images/chart-26/bar-stacked-100.svg'); } .bcharts-adonis-chart-selector[chart="area"]::before { - background-position-x: -300px; + background-image: url('images/chart-26/area.svg'); } .bcharts-adonis-chart-selector[chart="area-stacked"]::before { - background-position-x: -330px; + background-image: url('images/chart-26/area-stacked.svg'); } .bcharts-adonis-chart-selector[chart="area-stacked-100"]::before { - background-position-x: -360px; + background-image: url('images/chart-26/area-stacked-100.svg'); } .bcharts-adonis-chart-selector[chart="boxplot"]::before { - background-position-x: -390px; + background-image: url('images/chart-26/boxplot.svg'); } .bcharts-adonis-chart-selector[chart="heatmap"]::before { - background-position-x: -420px; + background-image: url('images/chart-26/heatmap.svg'); } .bcharts-adonis-chart-selector[chart="pie"]::before { - background-position-x: -450px; + background-image: url('images/chart-26/pie.svg'); } .bcharts-adonis-chart-selector[chart="network"]::before { - background-position-x: -480px; + background-image: url('images/chart-26/network.svg'); } .bcharts-adonis-chart-selector[chart="treemap"]::before { - background-position-x: -510px; + background-image: url('images/chart-26/treemap.svg'); } .bcharts-adonis-chart-selector[chart="decisionTree"]::before { - background-position-x: -540px; + background-image: url('images/chart-26/decisionTree.svg'); } .bcharts-adonis-chart-selector[chart="decisionTreeForBrightics"]::before { - background-position-x: -540px; + background-image: url('images/chart-26/decisionTree.svg'); } .bcharts-adonis-chart-selector[chart="table"]::before { - background-position-x: -570px; + background-image: url('images/chart-26/table.svg'); } .bcharts-adonis-chart-selector[chart="mcc"]::before { - background-position-x: -600px; + background-image: url('images/chart-26/mcc.svg'); } .bcharts-adonis-chart-selector[chart="dendrogram"]::before { - background-position-x: -630px; + background-image: url('images/chart-26/dendrogram.svg'); } .bcharts-adonis-chart-selector[chart="roccurve"]::before { - background-position-x: -660px; + background-image: url('images/chart-26/roccurve.svg'); } .bcharts-adonis-chart-selector[chart="correlation-matrix"]::before { - background-position-x: -690px; + background-image: url('images/chart-26/correlation-matrix.svg'); } .bcharts-adonis-chart-selector[chart="map"]::before { - background-position-x: -720px; + background-image: url('images/chart-26/map.svg'); } .bcharts-adonis-chart-selector[chart="biplot"]::before { - background-position-x: -750px; + background-image: url('images/chart-26/biplot.svg'); } .bcharts-adonis-chart-selector[chart="pos-neg-bar"]::before { - background-position-x: -780px; + background-image: url('images/chart-26/pos-neg-bar.svg'); } .bcharts-adonis-chart-selector[chart="radar"]::before { - background-position-x: -810px; + background-image: url('images/chart-26/radar.svg'); } .bcharts-adonis-chart-selector[chart="wordcloud"]::before { - background-position-x: -840px; + background-image: url('images/chart-26/wordcloud.svg'); } .bcharts-adonis-chart-selector[chart="complex"]::before { - background-position-x: -870px; + background-image: url('images/chart-26/complex.svg'); } .bcharts-adonis-chart-selector[chart="histogram"]::before { - background-position-x: -900px; + background-image: url('images/chart-26/histogram.svg'); } .bcharts-adonis-chart-selector[chart="bubble"]::before { - background-position-x: -930px; + background-image: url('images/chart-26/bubble.svg'); } .bcharts-adonis-chart-selector[chart="heatmap-matrix"]::before { - background-position-x: -960px; + background-image: url('images/chart-26/heatmap-matrix.svg'); } .bcharts-adonis-chart-selector[chart="qqplot"]::before { - background-position-x: -990px; + background-image: url('images/chart-26/qqplot.svg'); } .bcharts-adonis-chart-selector[chart="pairwise-scatter"]::before { - background-position-x: -1020px; + background-image: url('images/chart-26/pairwise-scatter.svg'); } .bcharts-adonis-chart-selector[chart="card"]::before { - background-position-x: -1050px; + background-image: url('images/chart-26/card.svg'); } .bcharts-adonis-chart-selector[chart="donut"]::before { - background-position-x: -1080px; + background-image: url('images/chart-26/donut.svg'); } .bcharts-adonis-chart-selector[chart="image-grid"]::before { - background-position-x: -1110px; + background-image: url('images/chart-26/image-grid.svg'); } -.selected .bcharts-adonis-chart-selector::before { - background-position-y: -60px; +.bcharts-adonis-chart-selector[chart="wordCloud"]::before { + background-image: url('images/chart-26/wordcloud.svg'); } .bcharts-adonis-chart-selector-16 { - padding: 0 2px 0 18px; + padding: 0 2px 0 25px; box-sizing: border-box; line-height: 16px; cursor: pointer; @@ -294,156 +272,158 @@ content: ''; width: 16px; height: 16px; - background-image: url('images/bcharts.png'); - background-position-y: -238px; position: absolute; top: 0; left: 0; } .bcharts-adonis-chart-selector-16[chart="column"]::before { - background-position-x: -60px; + background-image: url('images/chart-16/column.svg'); } .bcharts-adonis-chart-selector-16[chart="bar"]::before { - background-position-x: -76px; + background-image: url('images/chart-16/bar.svg'); } .bcharts-adonis-chart-selector-16[chart="line"]::before { - background-position-x: -92px; + background-image: url('images/chart-16/line.svg'); } .bcharts-adonis-chart-selector-16[chart="boxplot"]::before { - background-position-x: -108px; + background-image: url('images/chart-16/boxplot.svg'); } .bcharts-adonis-chart-selector-16[chart="scatter"]::before { - background-position-x: -124px; + background-image: url('images/chart-16/scatter.svg'); } .bcharts-adonis-chart-selector-16[chart="pie"]::before { - background-position-x: -140px; + background-image: url('images/chart-16/pie.svg'); } .bcharts-adonis-chart-selector-16[chart="table"]::before { - background-position-x: -156px; + background-image: url('images/chart-16/table.svg'); } .bcharts-adonis-chart-selector-16[chart="treemap"]::before { - background-position-x: -172px; + background-image: url('images/chart-16/treemap.svg'); } .bcharts-adonis-chart-selector-16[chart="network"]::before { - background-position-x: -188px; + background-image: url('images/chart-16/network.svg'); } .bcharts-adonis-chart-selector-16[chart="decisionTree"]::before { - background-position-x: -204px; + background-image: url('images/chart-16/decisionTree.svg'); } .bcharts-adonis-chart-selector-16[chart="decisionTreeForBrightics"]::before { - background-position-x: -204px; + background-image: url('images/chart-16/decisionTree.svg'); } .bcharts-adonis-chart-selector-16[chart="dendrogram"]::before { - background-position-x: -220px; + background-image: url('images/chart-16/dendrogram.svg'); } /*FIXME: correlation matrix img ->heatmap image*/ .bcharts-adonis-chart-selector-16[chart="heatmap"]::before { - background-position-x: -236px; + background-image: url('images/chart-16/heatmap.svg'); } .bcharts-adonis-chart-selector-16[chart="mcc"]::before { - background-position-x: -252px; + background-image: url('images/chart-16/mcc.svg'); } .bcharts-adonis-chart-selector-16[chart="roccurve"]::before { - background-position-x: -268px; + background-image: url('images/chart-16/roccurve.svg'); } .bcharts-adonis-chart-selector-16[chart="map"]::before { - background-position-x: -284px; + background-image: url('images/chart-16/map.svg'); } .bcharts-adonis-chart-selector-16[chart="biplot"]::before { - background-position-x: -300px; + background-image: url('images/chart-16/biplot.svg'); } .bcharts-adonis-chart-selector-16[chart="pos-neg-bar"]::before { - background-position-x: -316px; + background-image: url('images/chart-16/pos-neg-bar.svg'); } .bcharts-adonis-chart-selector-16[chart="bar-stacked"]::before { - background-position-x: -332px; + background-image: url('images/chart-16/bar-stacked.svg'); } .bcharts-adonis-chart-selector-16[chart="bar-stacked-100"]::before { - background-position-x: -348px; + background-image: url('images/chart-16/bar-stacked-100.svg'); } .bcharts-adonis-chart-selector-16[chart="column-stacked"]::before { - background-position-x: -364px; + background-image: url('images/chart-16/column-stacked.svg'); } .bcharts-adonis-chart-selector-16[chart="column-stacked-100"]::before { - background-position-x: -380px; + background-image: url('images/chart-16/column-stacked-100.svg'); } .bcharts-adonis-chart-selector-16[chart="area"]::before { - background-position-x: -396px; + background-image: url('images/chart-16/area.svg'); } .bcharts-adonis-chart-selector-16[chart="area-stacked"]::before { - background-position-x: -412px; + background-image: url('images/chart-16/area-stacked.svg'); } .bcharts-adonis-chart-selector-16[chart="area-stacked-100"]::before { - background-position-x: -428px; + background-image: url('images/chart-16/area-stacked-100.svg'); } .bcharts-adonis-chart-selector-16[chart="radar"]::before { - background-position-x: -444px; + background-image: url('images/chart-16/radar.svg'); } .bcharts-adonis-chart-selector-16[chart="wordcloud"]::before { - background-position-x: -460px; + background-image: url('images/chart-16/wordcloud.svg'); } .bcharts-adonis-chart-selector-16[chart="complex"]::before { - background-position-x: -476px; + background-image: url('images/chart-16/complex.svg'); } .bcharts-adonis-chart-selector-16[chart="histogram"]::before { - background-position-x: -492px; + background-image: url('images/chart-16/histogram.svg'); } .bcharts-adonis-chart-selector-16[chart="bubble"]::before { - background-position-x: -508px; + background-image: url('images/chart-16/bubble.svg'); } .bcharts-adonis-chart-selector-16[chart="heatmap-matrix"]::before { - background-position-x: -524px; + background-image: url('images/chart-16/heatmap-matrix.svg'); } .bcharts-adonis-chart-selector-16[chart="qqplot"]::before { - background-position-x: -540px; + background-image: url('images/chart-16/qqplot.svg'); } .bcharts-adonis-chart-selector-16[chart="pairwise-scatter"]::before { - background-position-x: -556px; + background-image: url('images/chart-16/pairwise-scatter.svg'); } .bcharts-adonis-chart-selector-16[chart="card"]::before { - background-position-x: -572px; + background-image: url('images/chart-16/card.svg'); } .bcharts-adonis-chart-selector-16[chart="donut"]::before { - background-position-x: -588px; + background-image: url('images/chart-16/donut.svg'); } .bcharts-adonis-chart-selector-16[chart="image-grid"]::before { - background-position-x: -604px; + background-image: url('images/chart-16/image-grid.svg'); +} + +.bcharts-adonis-chart-selector-16[chart="wordCloud"]::before { + background-image: url('images/chart-16/wordcloud.svg'); } .bos-col-1 { @@ -511,9 +491,8 @@ .bos-display-flex { display: flex; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + padding-top: 2px; + padding-bottom: 2px; } .bos-display-flex-center { @@ -534,6 +513,10 @@ justify-content: space-between; } +.bos-flex-row { + flex-direction: row; +} + .bos-flex-space-evenly { justify-content: space-evenly; } @@ -542,6 +525,10 @@ justify-content: center; } +.bos-flex-left { + justify-content: left; +} + .bos-flex-align-center { align-items: center; } @@ -566,24 +553,55 @@ flex: 4; } +.bos-flex-5 { + flex: 5; +} + +.bos-flex-6 { + flex: 6; +} + .bos-display-flex .bos-widget-header { - width: 70px; + width: 100%; display: flex; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; /*justify-content: center;*/ align-items: center; + font-size: 14px; + line-height: 30px; + /*color: #767676;*/ + /*padding-bottom: 8px;*/ } .bos-display-flex .bos-widget-header.half { - width: 35px; + width: 50%; +} + +.bos-display-flex .bos-widget-multi-label { + display: flex; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + align-items: center; + font-size: 14px; + line-height: 20px; + /*color: #767676;*/ +} + +.bos-display-flex .bos-widget-multi-label.half { + width: 50%; } .bos-text-overflow-hidden { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + font-size: 12px; + line-height: 18px; + color: #767676; + text-align: left; /*white-space: normal;*/ /*display: -webkit-box;*/ /*-webkit-line-clamp: 1;*/ @@ -598,7 +616,6 @@ .bos-flex-direction-column .bos-widget-header, .bos-widget-contents { flex-grow: 1; - padding: 2.5px 0; } .bos-border-only-bottom { @@ -616,6 +633,7 @@ height: 20px; box-sizing: border-box; flex-shrink: 0; + margin-right: 15px; } .bos-simple-circle { @@ -640,11 +658,21 @@ /*widget css START*/ +.bos-widget-header-label { + text-align: left; + justify-content: left; + display: left; + align-items: left; + width: 35px; +} + .bos-widget-label { text-align: center; justify-content: center; display: flex; align-items: center; + line-height: 20px; + color: #767676; } .bos-widget-inputbox { @@ -726,44 +754,41 @@ } .bos-border-color-red { - border-color: rgba(194, 6, 17, .65) !important; - border: 1px solid; + outline: 1px solid rgba(194, 6, 17, .65) !important; } .bos-border-color-blue { - border-color: rgba(98, 111, 219, 1.0) !important; - border: 1px solid; + outline: 1px solid #3420c3 !important; } .bos-dialogs-header { - font-family: Arial, helvetica, sans-serif; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; - - width: calc(100% - 20px) !important; - margin-left: 10px; - padding: 10px 0 5px 0; - + width: calc(100% - 4px) !important; + height: 34px !important; + margin: 6px 2px 6px 2px; + padding: 0; border-color: #d9d9d9; background-color: #fff; } -.bos-dialogs-header .jqx-window-close-button { - position: absolute; - right: 0; - top: 0 !important; - width: 18px !important; - height: 18px !important; - background-image: url(images/tool-close-18.png); - background-repeat: no-repeat; - background-position: 0 0; +.bos-dialogs-header .left{ + line-height: 34px; + margin-left: 10px; +} + +.bos-dialogs-header .right{ + padding-top: 7px; + padding-right: 15px; } .bos-dialogs-body { - font-family: Arial, helvetica, sans-serif; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif; width: 100%; height: 100%; position: relative; + padding: 0 !important; } .bos-font-bold { @@ -802,11 +827,11 @@ } .bos-widget-column-contents { - width: calc(100% - 70px); + width: 100%; } .bos-widget-column-unit { - font-family: Arial, helvetica, sans-serif; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif; font-size: 11px; position: relative; float: left; @@ -815,11 +840,7 @@ flex: 1; line-height: 34px; height: 100%; - background-color: white; - - border: 1px solid #CCCCCC; - border-radius: 17.5px; box-sizing: border-box; overflow: hidden; cursor: pointer; @@ -845,32 +866,66 @@ -moz-box-sizing: border-box; box-sizing: border-box; align-items: center; - height: 35px; - margin: 2px 0; + height: 30px; + margin-bottom: 5px; +} + +.bos-widget-column-unit-label { + width: 100%; + height: 30px; + box-sizing: border-box; + font-size: 14px; + font-family: 'NotoSansCJKkr', Arial; + display: block; + align-items: center; + justify-content: center; + text-align: left; + line-height: 30px; + padding: 0 10px; + + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + + border: 1px solid #cccccc; + background-color: #ffffff; + color: #959595; } -.bos-widget-column-unit-label, .bos-widget-datasource-unit-label { + width: 100%; + height: 30px; + box-sizing: border-box; + font-size: 14px; + font-family: 'NotoSansCJKkr', Arial; align-items: center; + justify-content: left; + line-height: 30px; + padding: 0 10px; + overflow: hidden; white-space: nowrap; text-overflow: ellipsis; - padding: 0 20px 0 8px; + border: 1px solid #cccccc; + background-color: #ffffff; + color: #959595; } .bos-column-unit-type { - min-width: 65px; - width: 65px; - height: 100%; + width: 40%; + height: 30px; box-sizing: border-box; - background-color: #E6E9FF; - color: #454758; - font-size: 12px; - font-family: Arial; + font-size: 14px; + font-family: 'NotoSansCJKkr', Arial; display: flex; align-items: center; justify-content: center; + line-height: 30px; + + border: 1px solid #3420c3; + background-color: #ebe9f9; + color: #3420c3; } .bos-widget-disable { @@ -895,22 +950,6 @@ margin: 3px 0 3px 1px; } -.bos-widget-button-group-container .jqx-button { - height: 30px; - background-color: #ffffff; -} - -.bos-widget-button-group-container .jqx-button:not(:first-child) { - border-left: none; - margin-left: 0 !important; -} - -.bos-widget-button-group-container .jqx-button.jqx-fill-state-pressed-office { - background-color: #8290FF; - border-color: #d9d9d9; - color: #ffffff; -} - .bos-aggregation-list-box { display: flex; -webkit-box-sizing: border-box; @@ -935,7 +974,12 @@ } .bo-control-container-contents .bos-widget-chart-selector { - max-width: calc(100% - 70px); + width: 100%; + max-width: 100%; + border-left: 0; + border-right: 0; + border-top: 0; + border-bottom: 1px solid #cccccc; } .bos-widget-chart-selector.bos-widget-chart-selector-readonly, @@ -946,7 +990,6 @@ .bos-widget-item-selector { height: 35px; - border-radius: 17.5px; padding: 3px 0; margin: 2px 0; } @@ -973,9 +1016,9 @@ box-sizing: border-box; flex-direction: column; flex: 1; - max-width: 270px; - margin: 3px 10px 0px 10px; + margin: 3px 0px 0px 0px; position: relative; + height: calc(100% - 20px); } .bos-widget-column-selector-list { @@ -987,51 +1030,44 @@ display: flex; flex-direction: row; align-items: center; - height: 25px; + height: 32px; cursor: pointer; - margin-right: 10px; overflow: hidden; + padding: 0 20px; } .bos-dialog-column-item-type { - width: 70px; - min-width: 70px; height: 21px; box-sizing: border-box; - margin-top: 2px; - margin-left: 2px; - border-radius: 9.5px; - background-color: #e6e9ff; - border: solid 1px #bdc0d6; display: flex; - justify-content: center; - align-items: center; - font-size: 11px; - text-align: center; -} - -.bos-dialog-column-item-type.bos-dialog-column-item-type-schema { - background-color: #828282; - color: #ffffff; + justify-content: right; + align-items: right; + font-size: 14px; + text-align: right; + color: #767676; } .bos-dialog-column-item-wrapper.selected { - background-color: #8190ff; + background-color: #ebe9f9; } .bos-dialog-column-item-label { - font-size: 12px; - padding-left: 10px; + font-size: 14px; + justify-content: left; + align-items: left; + text-align: left; + color: #333333; + line-height: 20px; + margin-right: auto; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; } .bos-dialog-column-item-label.has-type { max-width: calc(100% - 80px); } -.selected .bos-dialog-column-item-label { - color: #ffffff; -} - .bos-aggregation-list-box .bos-dialog-column-item-wrapper { display: flex; align-items: center; @@ -1039,32 +1075,12 @@ font-size: 12px; } -.bos-aggregation-list-box .bos-dialog-column-item-wrapper.selected { - color: #ffffff; - -} - .bos-dialog-filter-container { box-sizing: border-box; - width: 100%; - padding: 5px 10px 5px 10px; -} - -input[type=search].jqx-input-office { - padding-right: 30px; - background: url(images/search-28.png) no-repeat; - background-position: center right; - font-size: 13px; - box-sizing: border-box; - min-width: 16px; - min-height: 16px; - margin: 0; - padding: 0; - padding-right: 10px; - padding-left: 10px; - border-width: 1px; - border-style: solid; - width: 100%; + width: calc(100% - 40px); + padding: 5px 0px; + margin: 0 20px; + border-bottom: 1px solid #cccccc; } .bos-dialog-column-item { @@ -1083,7 +1099,10 @@ input[type=search].jqx-input-office { .bos-widget-selector { box-sizing: border-box; - border: 1px solid #d9d9d9; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #cccccc; padding-left: 0.1px; background-color: #ffffff; } @@ -1125,14 +1144,6 @@ input[type=search].jqx-input-office { margin-right: 2px; } -.bos-container .bos-control-container-expander-expanded .jqx-expander-header-content { - color: rgba(0, 0, 0, 1); -} - -.bos-container .bos-control-container-expander-collapsed .jqx-expander-header-content { - color: rgba(0, 0, 0, 0.8); -} - /*chart option control START*/ .bos-container .bos-control-container-expander { position: relative; @@ -1177,7 +1188,7 @@ input[type=search].jqx-input-office { .bos-control-container-label { border: none; - background-color: #f7f7f7; + background-color: #ffffff; display: flex; align-items: center; padding: 0 0 0 20px; @@ -1185,13 +1196,17 @@ input[type=search].jqx-input-office { font-size: 14px !important; height: 40px !important; position: relative; + line-height: 20px; + color: #333333; + font-weight: 500; + padding-left: 0; } -.bos-control-container-label.jqx-fill-state-pressed { +.bos-control-container-label.brtc-toggle-button__check--checked { background-color: #ffffff; } -.bos-control-container-label.jqx-fill-state-pressed:after { +.bos-control-container-label.brtc-toggle-button__check--checked:after { content: ''; position: absolute; top: 39px; @@ -1268,6 +1283,10 @@ input[type=search].jqx-input-office { margin: 5px 0 6px auto; } +.bos-widget-onoff-switch.bos-widget-button-disable{ + opacity: .55; +} + .bos-widget-onoff-switch input { display: none; } @@ -1293,11 +1312,11 @@ input[type=search].jqx-input-office { } .bos-widget-onoff-switch input:checked + .bos-widget-onoff-switch-slider { - background-color: #8290FF; + background-color: #3420c3; } .bos-widget-onoff-switch input:hover + .bos-widget-onoff-switch-slider { - box-shadow: 0 0 2px #8290FF; + box-shadow: 0 0 2px #3420c3; } .bos-widget-onoff-switch input:checked + .bos-widget-onoff-switch-slider::before { @@ -1306,6 +1325,13 @@ input[type=search].jqx-input-office { transform: translateX(22px); } + +.bos-widget-onoff-switch-slider.bos-widget-button-disable { + cursor: default; + pointer-events: none; + color: rgba(0, 0, 0, 0.8); +} + .bos-widget-onoff-switch-inner { display: inline-block; line-height: 28px; @@ -1324,30 +1350,8 @@ input[type=search].jqx-input-office { margin-right: 4px; } -.bos-control-container-label .jqx-expander-arrow { - width: 12px; - height: 6px; - margin: 0 !important; - left: 20px; - top: 17px; -} - -.bos-control-container-label .jqx-expander-arrow.jqx-expander-arrow-top { - background-image: url('images/icon/icon-arrow-down.png'); -} - -.bos-control-container-label .jqx-expander-arrow.jqx-expander-arrow-bottom { - background-image: url('images/icon/icon-arrow-up.png'); -} - -.bos-control-container-label .jqx-expander-header-content { - padding: 0 !important; - margin: 0 24px !important; - flex-grow: 1; -} - .bos-control-container-contents { - padding: 0 20px; + padding: 0 16px; } .bos-control { @@ -1362,13 +1366,13 @@ input[type=search].jqx-input-office { } .bos-control-contents { - background-color: #f7f7f7; + background-color: #ffffff; padding: 8px; margin-bottom: 5px; } .bos-control-subcontents { - background-color: #eaeaea; + background-color: #ffffff; padding: 10px; margin-bottom: 5px; } @@ -1387,6 +1391,23 @@ input[type=search].jqx-input-office { cursor: pointer; } +.bos-control-header-add-button-box-style { + width: 64px; + height: 32px; + border-radius: 2px; + border: 1px solid #cccccc; + color: #5a5a5a; + line-height: 20px; + font-size: 14px; + background: #ffffff; + display: inline-block; + cursor: pointer; +} + +.bos-control-header-add-button-box-style:focus { + outline: 0; +} + .bos-control-header-add-button:hover { background-position: -17px 0; } @@ -1400,6 +1421,7 @@ input[type=search].jqx-input-office { display: inline-block; background: url('images/tool-close-18.png') no-repeat; background-position: -4px -5px; + cursor: pointer; } .bos-middle-button { @@ -1410,6 +1432,7 @@ input[type=search].jqx-input-office { .bos-deletable-component { position: relative; padding-top: 17px; + border: 1px solid #eaeaea; } .bos-fit-contents { @@ -1421,15 +1444,6 @@ input[type=search].jqx-input-office { justify-content: space-between; } -/*modify jqx widget css */ -.jqx-fill-state-pressed-office { - /*background-color: #ffffff;*/ -} - -.jqx-expander-header-content-office { - margin-left: 12px; -} - .bos-icon-help { float: right; @@ -1444,6 +1458,14 @@ input[type=search].jqx-input-office { /************************ * Color Picker CSS Start ************************/ +.bo-widget-color-picker-wrapper { + justify-content: flex-start; +} + +.bo-component-style-font { + margin-right: 2px; +} + .bos-widget-color-picker-container { position: relative; display: flex; @@ -1452,9 +1474,10 @@ input[type=search].jqx-input-office { box-sizing: border-box; width: 100%; height: 100%; - border: 1px solid #d9d9d9; + outline: 1px solid #eaeaea; + border-radius: 30px; background-color: #ffffff; - margin: 2.5px 0; + cursor: pointer; /* javascript code로 width: 50px; height: 30px; 넣고 있음. 2017. 05. 30 ColorPickerWidget.prototype._configureMainControlSize = function () { this.$mainControl.css('width', (this.options.width) ? this.options.width : '50px'); @@ -1463,8 +1486,25 @@ input[type=search].jqx-input-office { */ } +.bos-widget-color-palette-container .bos-widget-color-picker-container { + outline: none; +} + +.bos-widget-color-picker-icon-container { + position: relative; + display: flex; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 28px; + height: 28px; + cursor: pointer; + background-image: url('images/icon-color-picker.png'); +} + .bos-widget-color-picker-container.bos-widget-disable .bos-widget-disable-cover { background-color: rgba(245, 245, 245, 0.5); + cursor: default; } .bos-color-picker-box-wrapper { @@ -1532,15 +1572,15 @@ input[type=search].jqx-input-office { height: 12px; } -.bos-font-style-bold.jqx-fill-state-pressed { +.bos-font-style-bold.brtc-toggle-button__check--checked { background-image: url('images/icon/icon-font-heavy-white.png'); } -.bos-font-style-italic.jqx-fill-state-pressed { +.bos-font-style-italic.brtc-toggle-button__check--checked { background-image: url('images/icon/icon-font-slope-white.png'); } -.bos-font-style-underline.jqx-fill-state-pressed { +.bos-font-style-underline.brtc-toggle-button__check--checked { background-image: url('images/icon/icon-font-underline-white.png'); } @@ -1563,15 +1603,15 @@ input[type=search].jqx-input-office { background-image: url('images/align-right.png'); } -.bos-horizontal-align-left.jqx-fill-state-pressed { +.bos-horizontal-align-left.brtc-toggle-button__check--checked { background-image: url('images/align-left-white.png'); } -.bos-horizontal-align-center.jqx-fill-state-pressed { +.bos-horizontal-align-center.brtc-toggle-button__check--checked { background-image: url('images/align-center-white.png'); } -.bos-horizontal-align-right.jqx-fill-state-pressed { +.bos-horizontal-align-right.brtc-toggle-button__check--checked { background-image: url('images/align-right-white.png'); } @@ -1597,16 +1637,16 @@ input[type=search].jqx-input-office { background-position-y: 80%; } -.bos-vertical-align-up.jqx-fill-state-pressed { +.bos-vertical-align-up.brtc-toggle-button__check--checked { background-image: url('images/align-up-white.png'); background-position-y: 20%; } -.bos-vertical-align-middle.jqx-fill-state-pressed { +.bos-vertical-align-middle.brtc-toggle-button__check--checked { background-image: url('images/align-middle-white.png'); } -.bos-vertical-align-down.jqx-fill-state-pressed { +.bos-vertical-align-down.brtc-toggle-button__check--checked { background-image: url('images/align-down-white.png'); background-position-y: 80%; } @@ -1619,11 +1659,11 @@ input[type=search].jqx-input-office { background-image: url('images/align-vertical.png'); } -.bos-direction-align-horizontal.jqx-fill-state-pressed { +.bos-direction-align-horizontal.brtc-toggle-button__check--checked { background-image: url('images/align-horizontal-white.png'); } -.bos-direction-align-vertical.jqx-fill-state-pressed { +.bos-direction-align-vertical.brtc-toggle-button__check--checked { background-image: url('images/align-vertical-white.png'); } @@ -1650,6 +1690,68 @@ input[type=search].jqx-input-office { .bos-row-multi-div { display: inline-flex; + padding-right: 5px; + padding-left: 5px; +} + +.bos-component-legend-set-btn { + display: block; + margin: 2px; + width: 100%; + height: 30px; + background-color: #3420c3; + border-color: #d9d9d9; + color: #ffffff; + text-align: center; + line-height: 30px; + cursor: pointer; +} + +.bos-custom-legend-label-control { + padding: 0 0 0 22px; +} + +.custom-legend-label-table { + height: 235px; + width: auto; +} + +.custom-legend-label-table-set-btn { + display: flex; + width: 100%; + margin-left: -11px; + margin-top: 5px; +} + +.custom-legend-label-table-set-btn > div { + display: block; + margin: 2px; + width: 100%; + height: 28px; + background-color: #3420c3; + border-color: #d9d9d9; + color: #ffffff; + text-align: center; + line-height: 28px; + cursor: pointer; +} + +.bo-component-style-column-selector { + height: 40px; +} + +.bo-component-style-width-selector { + height: 40px; + padding: 0; +} +.brtc-toggle-button__check--disabled { + opacity: 0.5; +} + +.bo-component-chart-position-contents .bo-widget-position-top, .bo-component-chart-position-contents .bo-widget-position-bottom{ + width: 105px; + margin-left: auto; + margin-right: auto; } /*chart option control END*/ @@ -1658,12 +1760,10 @@ input[type=search].jqx-input-office { position: relative; } -/* jqxTab에 가려짐. */ .bcharts-ds-panel .ps-scrollbar-x-rail { z-index: 999999; } -/* jqxTab에 가려짐. */ .bcharts-ds-panel .ps-scrollbar-y-rail { z-index: 999999; } @@ -1802,54 +1902,19 @@ input[type=search].jqx-input-office { visibility: hidden; } -.bcharts-ds-contents { -} - -.bcharts-ds .jqx-tabs-headerWrapper.jqx-tabs-header { - padding: 0 !important; - margin: 0 20px; - height: 32px !important; -} - -.bcharts-ds ul.jqx-tabs-title-container.jqx-tabs-title-container-office { - width: 100% !important; - height: 32px !important; -} - -.bcharts-ds li.jqx-tabs-title { - width: 50% !important; /* 다른 css가 .jqx-tabs-title을 바꿀 수 도 있어서 important */ - background-color: #fff; - box-sizing: border-box; - - height: 32px !important; - line-height: 26px !important; - padding: 0 !important; - display: flex; - justify-content: center; - border: none; /* 모든 border를 제거한 후 bottom 만 붙인다. */ - border-bottom: 1px solid #D9D9D9; -} - -.bcharts-ds li.jqx-tabs-title-selected-top { - color: #8190FF; - border-bottom: 2px solid #8190FF; -} - -.bcharts-ds .jqx-tabs-content { - padding: 0 !important; /* 다른 css가 .jqx-tabs-content을 바꿀 수 도 있어서 important */ - margin: 15px 0 10px 19px; +.bcharts-ds-columns-container { + padding: 15px; } .bcharts-ds-columns-util-tools-area { - width: calc(100% - 21px); + width: 100%; } .bcharts-ds-columns { box-sizing: border-box; - padding: 0 12px 0 0; max-height: 378px; position: relative; - width: calc(100% - 9px); + width: 100%; } .bcharts-ds-column { @@ -1872,7 +1937,7 @@ input[type=search].jqx-input-office { background-color: #E6E9FF; color: #454758; font-size: 12px; - font-family: Arial; + font-family: 'NotoSansCJKkr', Arial; display: flex; align-items: center; justify-content: center; @@ -1907,70 +1972,6 @@ input[type=search].jqx-input-office { box-sizing: content-box; } -.bcharts-ds-columns-searcharea input[type=search].jqx-input-office { - width: 100%; - height: 31px; -} - -input[type=search].jqx-input-office { - padding-right: 30px; - - background: url('images/search-28.png') no-repeat; - background-position: center right; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button:hover { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-ms-clear { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; -} - -input[type=search].jqx-input-office::-ms-clear:hover { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; -} - -.bcharts-ds .jqx-tabs-titleContentWrapper { - display: flex !important; - float: none !important; - margin-top: 0 !important; -} - .bcharts-ds .bcharts-ds-contents-tab-columns { margin-right: 3px; } @@ -1991,14 +1992,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { position: relative; } -.bfs-container .bfs-control-container-expander-expanded .jqx-expander-header-content { - color: rgba(0, 0, 0, 1); -} - -.bfs-container .bfs-control-container-expander-collapsed .jqx-expander-header-content { - color: rgba(0, 0, 0, 0.8); -} - .bfs-control-container-header-label { flex-grow: 1; line-height: 18px; @@ -2035,11 +2028,11 @@ input[type=search].jqx-input-office::-ms-clear:hover { line-height: 100%; } -.bfs-container .bfs-control-container-expander { +/*.bfs-container .bfs-control-container-expander { position: relative; box-sizing: border-box; -} - +}*/ +/* .bfs-container .bfs-control-container-expander::before { content: ''; position: absolute; @@ -2068,15 +2061,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { z-index: 2; } -.bfs-control-container-expander.bfs-control-container-expander-expanded::after { - content: ''; - position: absolute; - width: 100%; - height: 1px; - background-color: #AEAEAE; - z-index: 2; -} - .bfs-control-container-label { border: none; background-color: #f7f7f7; @@ -2089,47 +2073,10 @@ input[type=search].jqx-input-office::-ms-clear:hover { position: relative; } -.bfs-control-container-label.jqx-fill-state-pressed { - background-color: #ffffff; -} - -.bfs-control-container-label.jqx-fill-state-pressed:after { - content: ''; - position: absolute; - top: 39px; - left: 20px; - - box-sizing: border-box; - width: calc(100% - 40px); - height: 1px; - background-color: #d9d9d9; -} - -.bfs-control-container-label .jqx-expander-arrow { - width: 12px; - height: 6px; - margin: 0 !important; -} - -.bfs-control-container-label .jqx-expander-arrow.jqx-expander-arrow-top { - background-image: url('images/icon/icon-arrow-down.png'); -} - -.bfs-control-container-label .jqx-expander-arrow.jqx-expander-arrow-bottom { - background-image: url('images/icon/icon-arrow-up.png'); -} - -.bfs-control-container-label .jqx-expander-header-content { - padding: 0 !important; - margin: 0 24px !important; - flex-grow: 1; - width: calc(100% - 48px); -} - .bfs-control-container-contents { padding: 0 20px; } - +*/ .bfs-control { padding: 5px 0; } @@ -2188,8 +2135,12 @@ input[type=search].jqx-input-office::-ms-clear:hover { margin-top: 10px; } -.bfs-column-filter-control .jqx-checkbox-office { - margin-bottom: 4px; +.bfs-column-filter-checkbox > div { + margin-bottom: 5px; +} + +.bfs-column-filter-listbox > div > table > tbody > tr > td { + padding: 3px 5px; } .bfs-column-filter-slider { @@ -2268,6 +2219,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { } .bfs-widget-button { + font-family: 'NotoSansCJKkr', arial,sans-serif; line-height: 30px; height: 30px; background-color: #f7f7f7; @@ -2280,6 +2232,10 @@ input[type=search].jqx-input-office::-ms-clear:hover { background-color: #e7e7e7; } +.bfs-widget-button-disable { + pointer-events: none; + color: #DBDDE2; +} .bcharts-layout { width: 100%; @@ -2300,17 +2256,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { height: 100%; } -.bcharts-layout .jqx-splitter-collapse-button-horizontal, .bcharts-layout .jqx-splitter-collapse-button-vertical { - display: none; -} - -.bcharts-layout .jqx-splitter-splitbar-horizontal, .bcharts-layout .jqx-splitter-splitbar-vertical { - border-color: transparent; -} - -.bcharts-layout-splitter > .jqx-splitter-splitbar-vertical:last-child, .bcharts-layout-splitter > .jqx-splitter-splitbar-horizontal:last-child { - background-color: #e5e5e5; -} .bcharts-ws-panel { display: block; width: calc(100% - 1px); @@ -2453,10 +2398,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { padding: 0 7px 7px 7px; } -.bcharts-ws-panel-contents .bcharts-chart.jqx-grid { - box-sizing: border-box; -} - .bcharts-ws-panel.ui-selected { border-color: #656eea; } @@ -2564,7 +2505,3 @@ input[type=search].jqx-input-office::-ms-clear:hover { animation-duration: 0.1s; animation-iteration-count: 1; } - -.bcharts-layout-splitter, .bcharts-layout-splitter .jqx-splitter-panel { - overflow: visible; -} diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.css b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.css index 5e2485b46..7904408e9 100644 --- a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.css +++ b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.css @@ -1,321 +1,4 @@ -/* Brightics 2.0 Chart Build 190718 */ -.jqx-widget { - font-family: Arial, Dotum, Tahoma, sans-serif; - font-size: 12px; - - color: rgba(0, 0, 0, .8); -} - -.jqx-widget-header-office { - font-family: 'Arial', Dotum, Tahoma, sans-serif; - color: rgba(0, 0, 0, .7); -} - -.jqx-widget-content-office { - font-family: 'Arial', Dotum, Tahoma, sans-serif; - color: rgba(0, 0, 0, .7); -} - -.jqx-widget-office .jqx-grid-column-header-office, -.jqx-grid-cell-office, -.jqx-widget-office .jqx-grid-cell-office, -.jqx-widget-office .jqx-grid-group-cell-office, -.jqx-grid-group-cell-office { - font-family: 'Arial', Dotum, Tahoma, sans-serif; -} - -.jqx-fill-state-hover-office { - border-color: #ccc; - background: #e5e5e5; -} - -.jqx-grid-cell-hover-office { - color: #626fdb !important; - background: transparent; -} - -.jqx-fill-state-focus-office, -.jqx-combobox-content-focus-office, -.jqx-numberinput-focus, -.jqx-datetimeinput-office .jqx-fill-state-hover-office, -.jqx-datetimeinput-office .jqx-fill-state-pressed-office { - border-color: #626fdb; -} - -.jqx-fill-state-pressed-office { - background: #eff1fd; -} - -.jqx-grid-cell { - white-space: pre; -} - -.jqx-grid-content-office .jqx-fill-state-pressed-office { - color: #626fdb !important; -} - -.jqx-expander-header-content-office { - font-size: 13px; - - margin-left: 12px !important; -} - -.jqx-button-office { - cursor: pointer; -} - -.jqx-radiobutton-office { - line-height: 18px; -} - -.jqx-radiobutton-default-office { - display: inline-block; - - width: 18px !important; - height: 18px !important; - margin: 0 7px 0 0; - margin-top: 0 !important; - - vertical-align: middle; - - border: none; - -webkit-border-radius: 0 !important; - -moz-border-radius: 0 !important; - border-radius: 0 !important; - background: url('images/icon/radio_check.png') no-repeat; - background-position: 0 0; - - -o-border-radius: 0 !important; -} - -.jqx-radiobutton-check-checked-office { - top: 0 !important; - left: 0 !important; - - width: 18px !important; - height: 18px !important; - margin-top: 0 !important; - margin-left: 0 !important; - - border: none; - -webkit-border-radius: 0 !important; - -moz-border-radius: 0 !important; - border-radius: 0 !important; - background: url('images/icon/radio_check.png') no-repeat; - background-position: 0 -56px; - - -o-border-radius: 0 !important; -} - -.jqx-radiobutton-hover-office.jqx-fill-state-hover-office { - border-color: #626fdb; -} - -.jqx-checkbox-office { - line-height: 19px; -} - -.jqx-checkbox-default-office { - margin-right: 7px; -} - -.jqx-checkbox-default-office.jqx-fill-state-hover-office { - border-color: #626fdb; - background: transparent; -} - -.jqx-checkbox-default-office > div:first-child { - width: 17px !important; - height: 17px !important; -} - -.jqx-checkbox-check-checked-office { - top: 0 !important; - left: 0 !important; - - width: 17px !important; - height: 17px !important; - - background: url('images/icon/radio_check.png') no-repeat; - background-position: -38px -56px; -} - -.jqx-checkbox-check-indeterminate.jqx-checkbox-check-indeterminate-office { - top: 0 !important; - left: 0 !important; - - width: 17px !important; - height: 17px !important; - - background: url('images/icon/radio_check.png') no-repeat; - background-position: -38px -140px; -} - -.jqx-popover { - box-shadow: none; -} - -.jqx-popover-title-office { - font-family: Arial, helvetica, sans-serif; - font-size: 16px; - font-weight: bold; - line-height: 60px; - - height: 60px; - padding: 5px 30px; - - background: #fff; -} - -.jqx-popover-content-office { - padding: 7px; -} - -.jqx-window-close-button-background > .jqx-window-close-button { - position: absolute; - top: 9px; - right: 0; - - width: 18px !important; - height: 18px !important; - - background-image: url('images/tool-close-18.png'); - background-repeat: no-repeat; - background-position: 0 0; -} - -.jqx-window-close-button-background > .jqx-window-close-button-hover-office { - background-position-x: -18px; -} - -.jqx-popover-title-office > .jqx-window-close-button-background > .jqx-window-close-button { - top: 25px; - right: 25px; -} - -.jqx-menu-wrapper { - outline: none; -} - -.jqx-menu-office { - height: auto !important; -} - -.jqx-menu li, -.jqx-menu-dropdown li { - line-height: 30px !important; - - height: 30px; -} - -.jqx-menu li[type=separator] { - height: 1px !important; -} - -.jqx-menu-item-top-hover-office { - border-color: #f7f7f7; - background: #f7f7f7; -} - -.jqx-menu-item-hover-office { - border-color: #f7f7f7; - background: #f7f7f7; -} - -.jqx-menu-item-top-selected-office { - border-color: #f7f7f7; - background: #f7f7f7; -} - -.jqx-menu-item-top > .jqx-icon-arrow-right { - margin-top: 8px; -} - -.jqx-notification-office { - background: rgba(0, 0, 0, .95) !important; -} - -.jqx-notification-close-button { - top: 50%; - right: 0; - - background-image: url('images/tool-close-white-18.png'); -} - -.jqx-progressbar-value.jqx-fill-state-pressed { - background: #58bd7c; -} - -input[type=text].jqx-input-office, -input[type=password].jqx-input-office, -input[type=search].jqx-input-office { - font-size: 13px; - - box-sizing: border-box; - min-width: 16px; - min-height: 16px; - margin: 0; - padding: 0; - padding-right: 10px; - padding-left: 10px; - - border-width: 1px; - border-style: solid; -} - -input[type=search].jqx-input-office { - padding-right: 30px; - - background: url('images/search-28.png') no-repeat; - background-position: center right; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button:hover { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-ms-clear { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; -} - -input[type=search].jqx-input-office::-ms-clear:hover { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; -} - +/* Brightics 2.0 Chart Build 200703 */ .bcharts-container { width: 100%; height: 100%; @@ -347,12 +30,13 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-chart[chart-vendor="echarts"] > div:nth-child(2) { border-radius: 0 !important; background-color: rgba(0, 0, 0, 0.8) !important; - font-family: Arial, helvetica, sans-serif !important; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif !important; font-size: 12px !important; max-width: 300px; max-height: 200px; overflow: auto; text-overflow: ellipsis; + text-align: left; /* z-index < 1000 : this should be located under minimap*/ z-index: 900 !important; } @@ -556,11 +240,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { background-position: -2px -3px; } -.bcharts-chart.jqx-grid, -.bcharts-chart.jqx-grid .jqx-grid-content { - background-color: transparent; -} - .hidden { display: none; } @@ -590,7 +269,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { padding: 5px; border-radius: 0 !important; background-color: rgba(0, 0, 0, 0.8) !important; - font-family: Arial, helvetica, sans-serif !important; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif !important; font-size: 12px !important; max-width: 300px; max-height: 200px; @@ -761,37 +440,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-dialog .bcharts-dialog-contents.cellviewer{ position: relative; white-space: pre; - width: 100%; - height: 100%; -} - -.bcharts-dialog .bcharts-dialog-header > div:first-child { - line-height: 25px; - height: 25px; -} - -.bcharts-dialog .bcharts-dialog-header > .jqx-window-close-button-background { - margin: 0 !important; - width: 20px !important; - height: 20px !important; - right: 8px !important; - top: 8px !important; -} - -.bcharts-dialog .bcharts-dialog-header > .jqx-window-close-button-background > .jqx-window-close-button -{ - position: absolute; - width: 18px !important; - height: 18px !important; - background-image: url('images/tool-close-18.png'); - background-repeat: no-repeat; - background-position: 0 0; - top: 1px; - right: 1px; -} - -.bcharts-dialog .bcharts-dialog-header > .jqx-window-close-button-background > .jqx-window-close-button:hover { - background-position-x: -18px + padding: 10px 20px; } .bcharts-pagination { height: 30px; @@ -801,6 +450,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-pagination-navigator { display: inline-flex; + align-items: center; min-width: 160px; } @@ -826,6 +476,10 @@ input[type=search].jqx-input-office::-ms-clear:hover { pointer-events: none; } +.bcharts-pagination-navigator-page > input{ + text-align: center; +} + .bcharts-pagination-navigator-button.bcharts-non-editable { opacity: .3; pointer-events: none; @@ -833,6 +487,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-pagination-size { display: inline-flex; + align-items: center; } .bcharts-pagination-size > div { @@ -840,36 +495,11 @@ input[type=search].jqx-input-office::-ms-clear:hover { margin-right: 6px; } -.bcharts-pagination-navigator-page { - margin-top: 2px; -} - -.bcharts-pagination-size-input { - width: 80px; - height: 24px; - border: solid 1px #d3d3d3; - justify-content: center; - line-height: 26px; - background-image: url('images/icon-up-17.png'); - background-repeat: no-repeat; - background-position: right center; - background-color: #fff; - cursor: pointer; - padding-right: 8px; - margin-top: 2px; -} - .bcharts-pagination-size-input.disabled { cursor: default; background-color: #eee; } -.bcharts-pagination-size-input-menu.jqx-menu li { - height: 26px; - line-height: 16px !important; - box-sizing: border-box; -} - .bcharts-pagination-showing { display: inline-flex; float: right; diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.min.css b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.min.css index 1e5fbf5fb..bfcb84c0f 100644 --- a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.min.css +++ b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-all.min.css @@ -1,322 +1,5 @@ -/* Brightics 2.0 Chart Build 190718 */ -/* Brightics 2.0 Chart Build 190718 */ -.jqx-widget { - font-family: Arial, Dotum, Tahoma, sans-serif; - font-size: 12px; - - color: rgba(0, 0, 0, .8); -} - -.jqx-widget-header-office { - font-family: 'Arial', Dotum, Tahoma, sans-serif; - color: rgba(0, 0, 0, .7); -} - -.jqx-widget-content-office { - font-family: 'Arial', Dotum, Tahoma, sans-serif; - color: rgba(0, 0, 0, .7); -} - -.jqx-widget-office .jqx-grid-column-header-office, -.jqx-grid-cell-office, -.jqx-widget-office .jqx-grid-cell-office, -.jqx-widget-office .jqx-grid-group-cell-office, -.jqx-grid-group-cell-office { - font-family: 'Arial', Dotum, Tahoma, sans-serif; -} - -.jqx-fill-state-hover-office { - border-color: #ccc; - background: #e5e5e5; -} - -.jqx-grid-cell-hover-office { - color: #626fdb !important; - background: transparent; -} - -.jqx-fill-state-focus-office, -.jqx-combobox-content-focus-office, -.jqx-numberinput-focus, -.jqx-datetimeinput-office .jqx-fill-state-hover-office, -.jqx-datetimeinput-office .jqx-fill-state-pressed-office { - border-color: #626fdb; -} - -.jqx-fill-state-pressed-office { - background: #eff1fd; -} - -.jqx-grid-cell { - white-space: pre; -} - -.jqx-grid-content-office .jqx-fill-state-pressed-office { - color: #626fdb !important; -} - -.jqx-expander-header-content-office { - font-size: 13px; - - margin-left: 12px !important; -} - -.jqx-button-office { - cursor: pointer; -} - -.jqx-radiobutton-office { - line-height: 18px; -} - -.jqx-radiobutton-default-office { - display: inline-block; - - width: 18px !important; - height: 18px !important; - margin: 0 7px 0 0; - margin-top: 0 !important; - - vertical-align: middle; - - border: none; - -webkit-border-radius: 0 !important; - -moz-border-radius: 0 !important; - border-radius: 0 !important; - background: url('images/icon/radio_check.png') no-repeat; - background-position: 0 0; - - -o-border-radius: 0 !important; -} - -.jqx-radiobutton-check-checked-office { - top: 0 !important; - left: 0 !important; - - width: 18px !important; - height: 18px !important; - margin-top: 0 !important; - margin-left: 0 !important; - - border: none; - -webkit-border-radius: 0 !important; - -moz-border-radius: 0 !important; - border-radius: 0 !important; - background: url('images/icon/radio_check.png') no-repeat; - background-position: 0 -56px; - - -o-border-radius: 0 !important; -} - -.jqx-radiobutton-hover-office.jqx-fill-state-hover-office { - border-color: #626fdb; -} - -.jqx-checkbox-office { - line-height: 19px; -} - -.jqx-checkbox-default-office { - margin-right: 7px; -} - -.jqx-checkbox-default-office.jqx-fill-state-hover-office { - border-color: #626fdb; - background: transparent; -} - -.jqx-checkbox-default-office > div:first-child { - width: 17px !important; - height: 17px !important; -} - -.jqx-checkbox-check-checked-office { - top: 0 !important; - left: 0 !important; - - width: 17px !important; - height: 17px !important; - - background: url('images/icon/radio_check.png') no-repeat; - background-position: -38px -56px; -} - -.jqx-checkbox-check-indeterminate.jqx-checkbox-check-indeterminate-office { - top: 0 !important; - left: 0 !important; - - width: 17px !important; - height: 17px !important; - - background: url('images/icon/radio_check.png') no-repeat; - background-position: -38px -140px; -} - -.jqx-popover { - box-shadow: none; -} - -.jqx-popover-title-office { - font-family: Arial, helvetica, sans-serif; - font-size: 16px; - font-weight: bold; - line-height: 60px; - - height: 60px; - padding: 5px 30px; - - background: #fff; -} - -.jqx-popover-content-office { - padding: 7px; -} - -.jqx-window-close-button-background > .jqx-window-close-button { - position: absolute; - top: 9px; - right: 0; - - width: 18px !important; - height: 18px !important; - - background-image: url('images/tool-close-18.png'); - background-repeat: no-repeat; - background-position: 0 0; -} - -.jqx-window-close-button-background > .jqx-window-close-button-hover-office { - background-position-x: -18px; -} - -.jqx-popover-title-office > .jqx-window-close-button-background > .jqx-window-close-button { - top: 25px; - right: 25px; -} - -.jqx-menu-wrapper { - outline: none; -} - -.jqx-menu-office { - height: auto !important; -} - -.jqx-menu li, -.jqx-menu-dropdown li { - line-height: 30px !important; - - height: 30px; -} - -.jqx-menu li[type=separator] { - height: 1px !important; -} - -.jqx-menu-item-top-hover-office { - border-color: #f7f7f7; - background: #f7f7f7; -} - -.jqx-menu-item-hover-office { - border-color: #f7f7f7; - background: #f7f7f7; -} - -.jqx-menu-item-top-selected-office { - border-color: #f7f7f7; - background: #f7f7f7; -} - -.jqx-menu-item-top > .jqx-icon-arrow-right { - margin-top: 8px; -} - -.jqx-notification-office { - background: rgba(0, 0, 0, .95) !important; -} - -.jqx-notification-close-button { - top: 50%; - right: 0; - - background-image: url('images/tool-close-white-18.png'); -} - -.jqx-progressbar-value.jqx-fill-state-pressed { - background: #58bd7c; -} - -input[type=text].jqx-input-office, -input[type=password].jqx-input-office, -input[type=search].jqx-input-office { - font-size: 13px; - - box-sizing: border-box; - min-width: 16px; - min-height: 16px; - margin: 0; - padding: 0; - padding-right: 10px; - padding-left: 10px; - - border-width: 1px; - border-style: solid; -} - -input[type=search].jqx-input-office { - padding-right: 30px; - - background: url('images/search-28.png') no-repeat; - background-position: center right; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-webkit-search-cancel-button:hover { - position: relative; - right: -3px !important; - - width: 17px; - height: 17px; - - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; - - -webkit-appearance: none; -} - -input[type=search].jqx-input-office::-ms-clear { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -27px 0; -} - -input[type=search].jqx-input-office::-ms-clear:hover { - width: 17px; - height: 17px; - margin-right: 20px; - - color: #fff; - background: url('images/icon/icon_palette.png') no-repeat; - background-position: -54px 0; -} - +/* Brightics 2.0 Chart Build 200703 */ +/* Brightics 2.0 Chart Build 200703 */ .bcharts-container { width: 100%; height: 100%; @@ -348,12 +31,13 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-chart[chart-vendor="echarts"] > div:nth-child(2) { border-radius: 0 !important; background-color: rgba(0, 0, 0, 0.8) !important; - font-family: Arial, helvetica, sans-serif !important; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif !important; font-size: 12px !important; max-width: 300px; max-height: 200px; overflow: auto; text-overflow: ellipsis; + text-align: left; /* z-index < 1000 : this should be located under minimap*/ z-index: 900 !important; } @@ -557,11 +241,6 @@ input[type=search].jqx-input-office::-ms-clear:hover { background-position: -2px -3px; } -.bcharts-chart.jqx-grid, -.bcharts-chart.jqx-grid .jqx-grid-content { - background-color: transparent; -} - .hidden { display: none; } @@ -591,7 +270,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { padding: 5px; border-radius: 0 !important; background-color: rgba(0, 0, 0, 0.8) !important; - font-family: Arial, helvetica, sans-serif !important; + font-family: 'NotoSansCJKkr', Arial, helvetica, sans-serif !important; font-size: 12px !important; max-width: 300px; max-height: 200px; @@ -762,37 +441,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-dialog .bcharts-dialog-contents.cellviewer{ position: relative; white-space: pre; - width: 100%; - height: 100%; -} - -.bcharts-dialog .bcharts-dialog-header > div:first-child { - line-height: 25px; - height: 25px; -} - -.bcharts-dialog .bcharts-dialog-header > .jqx-window-close-button-background { - margin: 0 !important; - width: 20px !important; - height: 20px !important; - right: 8px !important; - top: 8px !important; -} - -.bcharts-dialog .bcharts-dialog-header > .jqx-window-close-button-background > .jqx-window-close-button -{ - position: absolute; - width: 18px !important; - height: 18px !important; - background-image: url('images/tool-close-18.png'); - background-repeat: no-repeat; - background-position: 0 0; - top: 1px; - right: 1px; -} - -.bcharts-dialog .bcharts-dialog-header > .jqx-window-close-button-background > .jqx-window-close-button:hover { - background-position-x: -18px + padding: 10px 20px; } .bcharts-pagination { height: 30px; @@ -802,6 +451,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-pagination-navigator { display: inline-flex; + align-items: center; min-width: 160px; } @@ -827,6 +477,10 @@ input[type=search].jqx-input-office::-ms-clear:hover { pointer-events: none; } +.bcharts-pagination-navigator-page > input{ + text-align: center; +} + .bcharts-pagination-navigator-button.bcharts-non-editable { opacity: .3; pointer-events: none; @@ -834,6 +488,7 @@ input[type=search].jqx-input-office::-ms-clear:hover { .bcharts-pagination-size { display: inline-flex; + align-items: center; } .bcharts-pagination-size > div { @@ -841,36 +496,11 @@ input[type=search].jqx-input-office::-ms-clear:hover { margin-right: 6px; } -.bcharts-pagination-navigator-page { - margin-top: 2px; -} - -.bcharts-pagination-size-input { - width: 80px; - height: 24px; - border: solid 1px #d3d3d3; - justify-content: center; - line-height: 26px; - background-image: url('images/icon-up-17.png'); - background-repeat: no-repeat; - background-position: right center; - background-color: #fff; - cursor: pointer; - padding-right: 8px; - margin-top: 2px; -} - .bcharts-pagination-size-input.disabled { cursor: default; background-color: #eee; } -.bcharts-pagination-size-input-menu.jqx-menu li { - height: 26px; - line-height: 16px !important; - box-sizing: border-box; -} - .bcharts-pagination-showing { display: inline-flex; float: right; diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.css b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.css index 455caacea..b1cf1e4dc 100644 --- a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.css +++ b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.css @@ -1,4 +1,4 @@ -/* Brightics 2.0 Chart Build 190718 */ +/* Brightics 2.0 Chart Build 200703 */ .bcharts-tethys { } diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.min.css b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.min.css index de8b135f7..bd0713007 100644 --- a/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.min.css +++ b/va-server/visual-analytics/public/css/plugins/bcharts/bcharts-tethys-all.min.css @@ -1,5 +1,5 @@ -/* Brightics 2.0 Chart Build 190718 */ -/* Brightics 2.0 Chart Build 190718 */ +/* Brightics 2.0 Chart Build 200703 */ +/* Brightics 2.0 Chart Build 200703 */ .bcharts-tethys { } diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/bcharts.png b/va-server/visual-analytics/public/css/plugins/bcharts/images/bcharts.png index d6f81afda..8fa154eb7 100644 Binary files a/va-server/visual-analytics/public/css/plugins/bcharts/images/bcharts.png and b/va-server/visual-analytics/public/css/plugins/bcharts/images/bcharts.png differ diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area-stacked-100.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area-stacked-100.svg new file mode 100644 index 000000000..ea4280d91 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area-stacked-100.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area-stacked.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area-stacked.svg new file mode 100644 index 000000000..ae31f96df --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area-stacked.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area.svg new file mode 100644 index 000000000..c538b1fe0 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/area.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar-stacked-100.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar-stacked-100.svg new file mode 100644 index 000000000..df6dd62c8 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar-stacked-100.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar-stacked.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar-stacked.svg new file mode 100644 index 000000000..64ea7a58b --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar-stacked.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar.svg new file mode 100644 index 000000000..601c7ae37 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bar.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/biplot.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/biplot.svg new file mode 100644 index 000000000..62cd8fd4d --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/biplot.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/boxplot.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/boxplot.svg new file mode 100644 index 000000000..84b9aea1b --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/boxplot.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bubble.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bubble.svg new file mode 100644 index 000000000..709083834 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/bubble.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/card.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/card.svg new file mode 100644 index 000000000..707f10b68 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/card.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column-stacked-100.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column-stacked-100.svg new file mode 100644 index 000000000..6f3a6432d --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column-stacked-100.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column-stacked.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column-stacked.svg new file mode 100644 index 000000000..a146eca49 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column-stacked.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column.svg new file mode 100644 index 000000000..fc1ba499a --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/column.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/complex.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/complex.svg new file mode 100644 index 000000000..b5a718620 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/complex.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/correlation-matrix.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/correlation-matrix.svg new file mode 100644 index 000000000..1acee413d --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/correlation-matrix.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/decisionTree.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/decisionTree.svg new file mode 100644 index 000000000..8650fafd8 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/decisionTree.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/dendrogram.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/dendrogram.svg new file mode 100644 index 000000000..42b2212cc --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/dendrogram.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/donut.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/donut.svg new file mode 100644 index 000000000..2a3818d14 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/donut.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/heatmap-matrix.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/heatmap-matrix.svg new file mode 100644 index 000000000..c0731f50b --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/heatmap-matrix.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/heatmap.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/heatmap.svg new file mode 100644 index 000000000..5f531cb9c --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/heatmap.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/histogram.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/histogram.svg new file mode 100644 index 000000000..fdf672630 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/histogram.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/image-grid.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/image-grid.svg new file mode 100644 index 000000000..0f62cabcd --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/image-grid.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/line.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/line.svg new file mode 100644 index 000000000..ab8df778f --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/line.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/map.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/map.svg new file mode 100644 index 000000000..1acee413d --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/map.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/mcc.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/mcc.svg new file mode 100644 index 000000000..ab8df778f --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/mcc.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/network.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/network.svg new file mode 100644 index 000000000..eec28f47f --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/network.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pairwise-scatter.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pairwise-scatter.svg new file mode 100644 index 000000000..baa792978 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pairwise-scatter.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pie.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pie.svg new file mode 100644 index 000000000..9c5d749a9 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pie.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pos-neg-bar.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pos-neg-bar.svg new file mode 100644 index 000000000..1acee413d --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/pos-neg-bar.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/qqplot.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/qqplot.svg new file mode 100644 index 000000000..bc8d78e42 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/qqplot.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/radar.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/radar.svg new file mode 100644 index 000000000..df06b69c2 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/radar.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/roccurve.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/roccurve.svg new file mode 100644 index 000000000..2b6872c76 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/roccurve.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/scatter.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/scatter.svg new file mode 100644 index 000000000..a1f7c95dd --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/scatter.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/table.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/table.svg new file mode 100644 index 000000000..5632dd1fc --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/table.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/treemap.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/treemap.svg new file mode 100644 index 000000000..50d38e823 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/treemap.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/wordcloud.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/wordcloud.svg new file mode 100644 index 000000000..bc99309b9 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-16/wordcloud.svg @@ -0,0 +1,10 @@ + + + +Layer 1 + + + + + + \ No newline at end of file diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area-stacked-100.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area-stacked-100.svg new file mode 100644 index 000000000..2720c559e --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area-stacked-100.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area-stacked.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area-stacked.svg new file mode 100644 index 000000000..48da08158 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area-stacked.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area.svg new file mode 100644 index 000000000..0e9355ea3 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/area.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar-stacked-100.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar-stacked-100.svg new file mode 100644 index 000000000..c07eb5387 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar-stacked-100.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar-stacked.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar-stacked.svg new file mode 100644 index 000000000..0938b3bea --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar-stacked.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar.svg new file mode 100644 index 000000000..1238203d5 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bar.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/biplot.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/biplot.svg new file mode 100644 index 000000000..3a1c74ba7 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/biplot.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/boxplot.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/boxplot.svg new file mode 100644 index 000000000..124164d9a --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/boxplot.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bubble.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bubble.svg new file mode 100644 index 000000000..be12b8590 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/bubble.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/card.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/card.svg new file mode 100644 index 000000000..e43b26a63 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/card.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column-stacked-100.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column-stacked-100.svg new file mode 100644 index 000000000..990bd88df --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column-stacked-100.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column-stacked.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column-stacked.svg new file mode 100644 index 000000000..e2cf37e4d --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column-stacked.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column.svg new file mode 100644 index 000000000..9671a1804 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/column.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/complex.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/complex.svg new file mode 100644 index 000000000..d21a95621 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/complex.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/correlation-matrix.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/correlation-matrix.svg new file mode 100644 index 000000000..86844d466 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/correlation-matrix.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/decisionTree.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/decisionTree.svg new file mode 100644 index 000000000..e69f43387 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/decisionTree.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/dendrogram.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/dendrogram.svg new file mode 100644 index 000000000..8fe7eff4c --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/dendrogram.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/donut.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/donut.svg new file mode 100644 index 000000000..7b1804677 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/donut.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/heatmap-matrix.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/heatmap-matrix.svg new file mode 100644 index 000000000..1eefc7106 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/heatmap-matrix.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/heatmap.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/heatmap.svg new file mode 100644 index 000000000..7c4ef0548 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/heatmap.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/histogram.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/histogram.svg new file mode 100644 index 000000000..9ca671ef9 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/histogram.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/image-grid.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/image-grid.svg new file mode 100644 index 000000000..5b54852ca --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/image-grid.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/line.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/line.svg new file mode 100644 index 000000000..11aaf671b --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/line.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/map.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/map.svg new file mode 100644 index 000000000..86844d466 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/map.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/mcc.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/mcc.svg new file mode 100644 index 000000000..86844d466 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/mcc.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/network.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/network.svg new file mode 100644 index 000000000..b5c710758 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/network.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pairwise-scatter.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pairwise-scatter.svg new file mode 100644 index 000000000..4b4a1d805 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pairwise-scatter.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pie.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pie.svg new file mode 100644 index 000000000..5b13806cd --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pie.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pos-neg-bar.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pos-neg-bar.svg new file mode 100644 index 000000000..86844d466 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/pos-neg-bar.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/qqplot.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/qqplot.svg new file mode 100644 index 000000000..6e2714d7f --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/qqplot.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/radar.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/radar.svg new file mode 100644 index 000000000..6e25c50ed --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/radar.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/roccurve.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/roccurve.svg new file mode 100644 index 000000000..518ecccd9 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/roccurve.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/scatter.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/scatter.svg new file mode 100644 index 000000000..0a6c66bfc --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/scatter.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/table.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/table.svg new file mode 100644 index 000000000..707c654e4 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/table.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/treemap.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/treemap.svg new file mode 100644 index 000000000..059e76df9 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/treemap.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/wordcloud.svg b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/wordcloud.svg new file mode 100644 index 000000000..f1c39d3d5 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/bcharts/images/chart-26/wordcloud.svg @@ -0,0 +1,10 @@ + + + +Layer 1 + + + + + + \ No newline at end of file diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/icon-color-picker.png b/va-server/visual-analytics/public/css/plugins/bcharts/images/icon-color-picker.png new file mode 100644 index 000000000..842f3e94c Binary files /dev/null and b/va-server/visual-analytics/public/css/plugins/bcharts/images/icon-color-picker.png differ diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/icon/icon_check.png b/va-server/visual-analytics/public/css/plugins/bcharts/images/icon/icon_check.png new file mode 100644 index 000000000..0e3d0400f Binary files /dev/null and b/va-server/visual-analytics/public/css/plugins/bcharts/images/icon/icon_check.png differ diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/panel-tools-24x24.png b/va-server/visual-analytics/public/css/plugins/bcharts/images/panel-tools-24x24.png index bdafd0b11..f74816404 100644 Binary files a/va-server/visual-analytics/public/css/plugins/bcharts/images/panel-tools-24x24.png and b/va-server/visual-analytics/public/css/plugins/bcharts/images/panel-tools-24x24.png differ diff --git a/va-server/visual-analytics/public/css/plugins/bcharts/images/tool-close-white-18.png b/va-server/visual-analytics/public/css/plugins/bcharts/images/tool-close-white-18.png new file mode 100644 index 000000000..79663a048 Binary files /dev/null and b/va-server/visual-analytics/public/css/plugins/bcharts/images/tool-close-white-18.png differ diff --git a/va-server/visual-analytics/public/css/plugins/brightics/brtc-widgets-all.css b/va-server/visual-analytics/public/css/plugins/brightics/brtc-widgets-all.css new file mode 100644 index 000000000..e4ae20950 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/brightics/brtc-widgets-all.css @@ -0,0 +1,2096 @@ +.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute} +.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row} +.brtc-state-normal{border:1px solid #d4d4d4;color:#444444;background-color:#fff}.brtc-widget.brtc-state-disabled,.brtc-widget.brtc-state-disabled *,.brtc-state-disabled,.brtc-state-disabled *{cursor:default;opacity:.55;user-select:none}.brtc-state-error{border:1px solid rgba(194,6,17,0.65)}.brtc-state-focus{border:1px solid #626fdb}.brtc-state-pressed{background-color:#eff1fd}.brtc-state-empty{border:1px solid #626fdb} +.jui { + /* Icon Base */ + /* Icon Animations */ + /* Icon List */ +} +.jui .clearfix { + *zoom: 1; +} +.jui .clearfix:before, +.jui .clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.jui .clearfix:after { + clear: both; +} +.jui .hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.jui label, +.jui input, +.jui button, +.jui select, +.jui textarea { + font-weight: normal; +} +.jui select, +.jui button, +.jui input[type="button"], +.jui input[type="reset"], +.jui input[type="submit"], +.jui input[type="radio"], +.jui input[type="checkbox"] { + cursor: pointer; +} +.jui button, +.jui html input[type="button"], +.jui input[type="reset"], +.jui input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} +.jui button, +.jui input { + line-height: normal; +} +.jui button, +.jui input, +.jui select, +.jui textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +.jui select[disabled], +.jui textarea[disabled], +.jui select[readonly], +.jui textarea[readonly] { + cursor: not-allowed; +} +.jui [class^="icon-"], +.jui [class*=" icon-"] { + font-family: "jennifer"; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.jui [class^="icon-"].spin, +.jui [class*=" icon-"].spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].flash, +.jui [class*=" icon-"].flash { + -webkit-animation: flash 2s infinite ease; + -moz-animation: flash 2s infinite ease; + -o-animation: flash 2s infinite ease; + animation: flash 2s infinite ease; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].bounce, +.jui [class*=" icon-"].bounce { + -webkit-animation: bounce 2s infinite ease; + -moz-animation: bounce 2s infinite ease; + -o-animation: bounce 2s infinite ease; + animation: bounce 2s infinite ease; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].float, +.jui [class*=" icon-"].float { + -webkit-animation: float 2s infinite linear; + -moz-animation: float 2s infinite linear; + -o-animation: float 2s infinite linear; + animation: float 2s infinite linear; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].pulse, +.jui [class*=" icon-"].pulse { + -webkit-animation: pulse 2s infinite linear; + -moz-animation: pulse 2s infinite linear; + -o-animation: pulse 2s infinite linear; + animation: pulse 2s infinite linear; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui .icon-chevron-left:before { + content: "\e90e"; +} +.jui .icon-iframe:before { + content: "\e9be"; +} +.jui .icon-textbox:before { + content: "\e9bf"; +} +.jui .icon-arrow5:before { + content: "\e905"; +} +.jui .icon-arrow7:before { + content: "\e900"; +} +.jui .icon-loveit2:before { + content: "\e901"; +} +.jui .icon-favorites2:before { + content: "\e902"; +} +.jui .icon-favorites1:before { + content: "\e903"; +} +.jui .icon-arrow6:before { + content: "\e904"; +} +.jui .icon-happy2:before { + content: "\e906"; +} +.jui .icon-unhappy2:before { + content: "\e907"; +} +.jui .icon-happy:before { + content: "\e908"; +} +.jui .icon-gear2:before { + content: "\e909"; +} +.jui .icon-expand:before { + content: "\e90a"; +} +.jui .icon-export:before { + content: "\e90b"; +} +.jui .icon-back:before { + content: "\e90c"; +} +.jui .icon-report-link:before { + content: "\e90d"; +} +.jui .icon-chevron-right:before { + content: "\e90f"; +} +.jui .icon-dot:before { + content: "\e910"; +} +.jui .icon-list1:before { + content: "\e911"; +} +.jui .icon-pause:before { + content: "\e912"; +} +.jui .icon-minus:before { + content: "\e913"; +} +.jui .icon-plus:before { + content: "\e914"; +} +.jui .icon-close:before { + content: "\e915"; +} +.jui .icon-tool2:before { + content: "\e916"; +} +.jui .icon-time:before { + content: "\e917"; +} +.jui .icon-check:before { + content: "\e918"; +} +.jui .icon-download:before { + content: "\e919"; +} +.jui .icon-upload:before { + content: "\e91a"; +} +.jui .icon-layout3:before { + content: "\e91b"; +} +.jui .icon-tool:before { + content: "\e91c"; +} +.jui .icon-screenshot:before { + content: "\e91d"; +} +.jui .icon-server:before { + content: "\e91e"; +} +.jui .icon-slider:before { + content: "\e91f"; +} +.jui .icon-statistics:before { + content: "\e920"; +} +.jui .icon-themes:before { + content: "\e921"; +} +.jui .icon-was:before { + content: "\e922"; +} +.jui .icon-realtime:before { + content: "\e923"; +} +.jui .icon-report2:before { + content: "\e924"; +} +.jui .icon-resize:before { + content: "\e925"; +} +.jui .icon-return:before { + content: "\e926"; +} +.jui .icon-label:before { + content: "\e927"; +} +.jui .icon-mail:before { + content: "\e928"; +} +.jui .icon-message:before { + content: "\e929"; +} +.jui .icon-monitoring:before { + content: "\e92a"; +} +.jui .icon-grip1:before { + content: "\e92b"; +} +.jui .icon-grip2:before { + content: "\e92c"; +} +.jui .icon-grip3:before { + content: "\e92d"; +} +.jui .icon-dashboard:before { + content: "\e92e"; +} +.jui .icon-domain:before { + content: "\e92f"; +} +.jui .icon-edit:before { + content: "\e930"; +} +.jui .icon-etc:before { + content: "\e931"; +} +.jui .icon-chart-candle:before { + content: "\e932"; +} +.jui .icon-chart-gauge:before { + content: "\e933"; +} +.jui .icon-arrow2:before { + content: "\e934"; +} +.jui .icon-arrow4:before { + content: "\e935"; +} +.jui .icon-bell:before { + content: "\e936"; +} +.jui .icon-info:before { + content: "\e937"; +} +.jui .icon-tumblr:before { + content: "\e938"; +} +.jui .icon-kakao:before { + content: "\e939"; +} +.jui .icon-googleplus2:before { + content: "\e93a"; +} +.jui .icon-close2:before { + content: "\e93b"; +} +.jui .icon-facebook2:before { + content: "\e93c"; +} +.jui .icon-github2:before { + content: "\e93d"; +} +.jui .icon-hierarchy:before { + content: "\e93e"; +} +.jui .icon-loveit:before { + content: "\e93f"; +} +.jui .icon-return2:before { + content: "\e940"; +} +.jui .icon-theme:before { + content: "\e941"; +} +.jui .icon-line-merge:before { + content: "\e942"; +} +.jui .icon-line-separate:before { + content: "\e943"; +} +.jui .icon-enter:before { + content: "\e944"; +} +.jui .icon-ws:before { + content: "\e945"; +} +.jui .icon-clip:before { + content: "\e946"; +} +.jui .icon-scissors:before { + content: "\e947"; +} +.jui .icon-topology:before { + content: "\e948"; +} +.jui .icon-equalizer:before { + content: "\e949"; +} +.jui .icon-idea:before { + content: "\e94a"; +} +.jui .icon-tag:before { + content: "\e94b"; +} +.jui .icon-all:before { + content: "\e94c"; +} +.jui .icon-cursor1:before { + content: "\e94d"; +} +.jui .icon-roundsquare:before { + content: "\e94e"; +} +.jui .icon-paintbucket:before { + content: "\e94f"; +} +.jui .icon-square:before { + content: "\e950"; +} +.jui .icon-circle:before { + content: "\e951"; +} +.jui .icon-eraser:before { + content: "\e952"; +} +.jui .icon-paintbrush:before { + content: "\e953"; +} +.jui .icon-pen:before { + content: "\e954"; +} +.jui .icon-eyedropper:before { + content: "\e955"; +} +.jui .icon-x-mark:before { + content: "\e956"; +} +.jui .icon-server2:before { + content: "\e957"; +} +.jui .icon-server1:before { + content: "\e958"; +} +.jui .icon-unhappy:before { + content: "\e959"; +} +.jui .icon-layout2:before { + content: "\e95a"; +} +.jui .icon-layout1:before { + content: "\e95b"; +} +.jui .icon-d:before { + content: "\e95c"; +} +.jui .icon-cursor:before { + content: "\e95d"; +} +.jui .icon-feed:before { + content: "\e95e"; +} +.jui .icon-filter:before { + content: "\e95f"; +} +.jui .icon-column:before { + content: "\e960"; +} +.jui .icon-analysis:before { + content: "\e961"; +} +.jui .icon-wireless:before { + content: "\e962"; +} +.jui .icon-network:before { + content: "\e963"; +} +.jui .icon-cloud:before { + content: "\e964"; +} +.jui .icon-checkbox:before { + content: "\e965"; +} +.jui .icon-checkbox2:before { + content: "\e966"; +} +.jui .icon-stop:before { + content: "\e967"; +} +.jui .icon-link2:before { + content: "\e968"; +} +.jui .icon-minus2:before { + content: "\e969"; +} +.jui .icon-more:before { + content: "\e96a"; +} +.jui .icon-zip:before { + content: "\e96b"; +} +.jui .icon-mobile:before { + content: "\e96c"; +} +.jui .icon-tablet:before { + content: "\e96d"; +} +.jui .icon-share2:before { + content: "\e96e"; +} +.jui .icon-caution3:before { + content: "\e96f"; +} +.jui .icon-lock:before { + content: "\e970"; +} +.jui .icon-script:before { + content: "\e971"; +} +.jui .icon-business:before { + content: "\e972"; +} +.jui .icon-build:before { + content: "\e973"; +} +.jui .icon-themes2:before { + content: "\e974"; +} +.jui .icon-pin:before { + content: "\e975"; +} +.jui .icon-template:before { + content: "\e976"; +} +.jui .icon-line-height:before { + content: "\e977"; +} +.jui .icon-outdent:before { + content: "\e978"; +} +.jui .icon-indent:before { + content: "\e979"; +} +.jui .icon-like:before { + content: "\e97a"; +} +.jui .icon-blogger:before { + content: "\e97b"; +} +.jui .icon-github:before { + content: "\e97c"; +} +.jui .icon-facebook:before { + content: "\e97d"; +} +.jui .icon-googleplus:before { + content: "\e97e"; +} +.jui .icon-share:before { + content: "\e97f"; +} +.jui .icon-twitter:before { + content: "\e980"; +} +.jui .icon-image:before { + content: "\e981"; +} +.jui .icon-refresh2:before { + content: "\e982"; +} +.jui .icon-connection:before { + content: "\e983"; +} +.jui .icon-analysis2:before { + content: "\e984"; +} +.jui .icon-chart-scatter:before { + content: "\e985"; +} +.jui .icon-chart-radar:before { + content: "\e986"; +} +.jui .icon-chart-area:before { + content: "\e987"; +} +.jui .icon-chart-column:before { + content: "\e988"; +} +.jui .icon-chart-bar:before { + content: "\e989"; +} +.jui .icon-chart-line:before { + content: "\e98a"; +} +.jui .icon-info-message:before { + content: "\e98b"; +} +.jui .icon-report:before { + content: "\e98c"; +} +.jui .icon-menu:before { + content: "\e98d"; +} +.jui .icon-report-build:before { + content: "\e98e"; +} +.jui .icon-jennifer-server:before { + content: "\e98f"; +} +.jui .icon-user:before { + content: "\e990"; +} +.jui .icon-rule:before { + content: "\e991"; +} +.jui .icon-profile:before { + content: "\e992"; +} +.jui .icon-device:before { + content: "\e993"; +} +.jui .icon-caution2:before { + content: "\e994"; +} +.jui .icon-db:before { + content: "\e995"; +} +.jui .icon-checkmark:before { + content: "\e996"; +} +.jui .icon-stoppage:before { + content: "\e997"; +} +.jui .icon-align-right:before { + content: "\e998"; +} +.jui .icon-caution:before { + content: "\e999"; +} +.jui .icon-loading:before { + content: "\e99a"; +} +.jui .icon-play:before { + content: "\e99b"; +} +.jui .icon-right:before { + content: "\e99c"; +} +.jui .icon-left:before { + content: "\e99d"; +} +.jui .icon-bold:before { + content: "\e99e"; +} +.jui .icon-chart:before { + content: "\e99f"; +} +.jui .icon-document:before { + content: "\e9a0"; +} +.jui .icon-link:before { + content: "\e9a1"; +} +.jui .icon-arrow3:before { + content: "\e9a2"; +} +.jui .icon-arrow1:before { + content: "\e9a3"; +} +.jui .icon-textcolor:before { + content: "\e9a4"; +} +.jui .icon-text:before { + content: "\e9a5"; +} +.jui .icon-refresh:before { + content: "\e9a6"; +} +.jui .icon-align-center:before { + content: "\e9a7"; +} +.jui .icon-align-left:before { + content: "\e9a8"; +} +.jui .icon-preview:before { + content: "\e9a9"; +} +.jui .icon-exit:before { + content: "\e9aa"; +} +.jui .icon-dashboardlist:before { + content: "\e9ab"; +} +.jui .icon-add-dir:before { + content: "\e9ac"; +} +.jui .icon-add-dir2:before { + content: "\e9ad"; +} +.jui .icon-calendar:before { + content: "\e9ae"; +} +.jui .icon-gear:before { + content: "\e9af"; +} +.jui .icon-help:before { + content: "\e9b0"; +} +.jui .icon-hide:before { + content: "\e9b1"; +} +.jui .icon-home:before { + content: "\e9b2"; +} +.jui .icon-html:before { + content: "\e9b3"; +} +.jui .icon-italic:before { + content: "\e9b4"; +} +.jui .icon-new-window:before { + content: "\e9b5"; +} +.jui .icon-orderedlist:before { + content: "\e9b6"; +} +.jui .icon-printer:before { + content: "\e9b7"; +} +.jui .icon-save:before { + content: "\e9b8"; +} +.jui .icon-search:before { + content: "\e9b9"; +} +.jui .icon-table:before { + content: "\e9ba"; +} +.jui .icon-trashcan:before { + content: "\e9bb"; +} +.jui .icon-underline:before { + content: "\e9bc"; +} +.jui .icon-unorderedlist:before { + content: "\e9bd"; +} +.jui .colorpicker { + position: relative; + width: 226px; +} +.jui .colorpicker > .color { + position: relative; + height: 145px; + overflow: hidden; + cursor: pointer; +} +.jui .colorpicker > .color > .saturation { + position: relative; + width: 100%; + height: 100%; +} +.jui .colorpicker > .color > .saturation > .value { + position: relative; + width: 100%; + height: 100%; +} +.jui .colorpicker > .color > .saturation > .value > .drag-pointer { + position: absolute; + width: 10px; + height: 10px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + left: -5px; + top: -5px; +} +.jui .colorpicker > .control { + position: relative; + padding: 18px 0px 20px 0px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} +.jui .colorpicker > .control > .color, +.jui .colorpicker > .control > .empty { + position: absolute; + left: 11px; + top: 24px; + width: 30px; + height: 30px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.jui .colorpicker > .control > .hue { + position: relative; + padding: 8px 12px; + margin: 0px 0px 0px 45px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; +} +.jui .colorpicker > .control > .hue > .container { + position: relative; + width: 157px; + height: 6px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.jui .colorpicker > .control > .opacity { + position: relative; + width: 143px; + padding: 8px 12px; + margin: 0px 0px 0px 45px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; +} +.jui .colorpicker > .control > .opacity > .container { + position: relative; + width: 100%; + height: 3px; + z-index: 2; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.jui .colorpicker > .control > .input { + position: absolute; + font-size: 10px; + right: 10px; + bottom: 20px; + width: 30px; + height: 20px; + padding: 0 0 0 2px; +} +.jui .colorpicker > .control .drag-bar, +.jui .colorpicker > .control .drag-bar2 { + position: absolute; + cursor: pointer; + top: 50% !important; + margin-top: -7px !important; + left: -3px; + width: 12px; + height: 12px; + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; +} +.jui .colorpicker > .information { + position: relative; + height: 73px; + -webkit-box-sizing: padding-box; + -moz-box-sizing: padding-box; + box-sizing: padding-box; +} +.jui .colorpicker > .information > .input { + position: absolute; + font-size: 10px; + height: 20px; + bottom: 20px; + padding: 0 0 0 2px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + -o-user-select: text; + user-select: text; +} +.jui .colorpicker > .information > .input:nth-child(1) { + width: 93px; + left: 10px; +} +.jui .colorpicker > .information > .input:nth-child(2) { + width: 30px; + right: 74px; +} +.jui .colorpicker > .information > .input:nth-child(3) { + width: 30px; + right: 42px; +} +.jui .colorpicker > .information > .input:nth-child(4) { + width: 30px; + right: 10px; +} +.jui .colorpicker > .information > .title { + position: absolute; + font-size: 11px; + top: 15px; +} +.jui .colorpicker > .information > .title:nth-child(5) { + left: 10px; +} +.jui .colorpicker > .information > .title:nth-child(6) { + left: 123px; +} +.jui .colorpicker > .information > .title:nth-child(7) { + left: 155px; +} +.jui .colorpicker > .information > .title:nth-child(8) { + left: 187px; +} +.jui .window { + position: absolute; + margin: 0 auto; + z-index: 2000; + min-width: 200px; + min-height: 100px; + font-size: 13px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.jui .window > .head { + position: relative; + height: 32px; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} +.jui .window > .head > .left { + left: 10px; + right: 40px; + font-weight: bold; +} +.jui .window > .head > .left > .title { + display: inline-block; +} +.jui .window > .head > .right { + min-width: 20px; + right: 5px; +} +.jui .window > .head > .right > .close { + cursor: pointer; + right: 0px; +} +.jui .window > .head > * { + position: absolute; + padding: 8px 8px 6px 8px; +} +.jui .window > .head > * > a { + text-decoration: none; + color: inherit; +} +.jui .window > .body { + position: relative; + overflow: auto; + padding: 15px; + word-break: break-all; +} +.jui .window > .body.has-property { + padding: 0px; +} +.jui .window > .foot { + position: absolute; + left: 0px; + right: 0px; + bottom: 0px; + height: 47px; + text-align: center; + -webkit-border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; +} +.jui .window > .foot > .btn { + margin-top: 9px; +} +.jui .window > .resize { + position: absolute; + right: 0px; + bottom: 0px; + cursor: nw-resize; +} +.jui label { + max-width: none; +} +.brtc-button-default{float:right;width:100px;height:32px;cursor:pointer;color:#656eea;border:1px solid #656eea;background-color:#fff}.brtc-button-primary{float:right;width:100px;height:32px;cursor:pointer;color:#656eea;border:1px solid #656eea;background-color:#fff;color:#fff;background-color:#656eea} +.brtc-radio-button-wrapper{background-color:transparent;border:none}.brtc-radio-button-wrapper input[type="radio"]{width:0;height:0;margin:-1px}.brtc-radio-button-wrapper input[type="radio"]+label{display:inline-block;position:relative}.brtc-radio-button-wrapper input[type="radio"]+label:before{float:left;padding:0;margin:0 7px 0 0;width:18px;height:18px;line-height:19px;content:close-quote;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:0 0}.brtc-radio-button-wrapper input[type="radio"]:hover+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:0px -28px}.brtc-radio-button-wrapper input[type="radio"]:checked+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:0 -56px} +.brtc-toggle-button{background-color:#fff;border:1px solid #d4d4d4}.brtc-toggle-button__check--checked{background-color:#3420c3;border:1px solid #d9d9d9;color:#fff} +.brtc-chekckbox-wrapper.brtc-state-normal{background-color:transparent;border:none}.brtc-chekckbox-wrapper input[type="checkbox"]{width:0;height:0;margin:-1px;cursor:pointer}.brtc-chekckbox-wrapper input[type="checkbox"]+label{display:inline-block;position:relative}.brtc-chekckbox-wrapper input[type="checkbox"]+label:before{float:left;padding:0px;margin:0px 7px 0px 3px;width:17px;height:17px;line-height:19px;content:close-quote;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:-38px 0px}.brtc-chekckbox-wrapper input[type="checkbox"]:hover+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoZvcEsAAAhvSURBVHja7J1tiFRlFMfPHVdnd0fdXVPBFdNSzBKCvohE6ZIZEWFfymCXJXo3sKIPfij8UCFB+CGooKQgQV2hlw8LEeVLZSqEX8PcTMXKF3xpd9Wddcd1ZzvHe26Od+7sztw7L2dn/n847PjcOQ/j8+M893k79zoUrBa2Wfo3rmUptj62C/o3S6Ojo1QsOY7TFrUO/j0/Uw2qzvfvRrbFbJPZzrKdYhvSa/VsM9gWsQ2zHWUbLOaPYZD+oihQ2qhGlQm1me0etpMK1B92g2qn2VrZ7mM7zNZPkCnFMiJ0KdsRtjMBQG/p1RTs7+rTiGa0CXWJRmhfAb596rMEzWgPqgyGJmmEFqoz6tuCprQFdXaOe2heA0z1nY2mtAVVBki9Eero1TogQ1DjGdOWMBrKmMtCRqBGXTFw0Iz2oKZ0YSGs6rUOyBDUK+SuFIWVjHwvoyltQT3HNidkN+qo7zk0pS2oMnodIXfpr1C1qm8vmtIWVFEP24ICFxFa1KcHzWgTqizUy+L83Rp9zjhd7lxyF/8PU5F3aqDo8sOTxXlZy5Wlv7ParV5V+PUanXO0y+3xA8V+qk2onmQ0LJvkzQozrdOWS+RukvfmaESEiWGoYSMDLWpAdQBRvQMlCFAhQIUAFQJUyD/6tfRjNm5OFrW+TRsStQn11bfOF62yj97DUSUTUJtaEiWPtFqNGGv31IfYtrD9Se7yYEo/S9mqMv220SIYoJK7mP+T9KTkLtivYZuutkbLPtTvlOMQtxPBEKmslWz72L5ku5ftA3LTMLxIPaJlcu0btgPqAxkd/UrUfcXWzrZnHB/ZdvuY7Q/1WUHYKDcXqdJVfcH2bh5AM7Wb7R31xTFRY1Bl4DON7ZMQ/p+q7yo0pS2oa9k+1261UI2o71o0pS2oMn35IUId32sdkCGo89hORKjjhNYBGYKaijhRn4JmtAdVEofvjFDHfHIf+AEZgnqI7dEIdTzMdhBNaQvqDrbnyT3rW6jE5wW27WhKW1B3sQ2wrQvh/7L67kZT2lGdDpKeZfuF3OW+vXn6rmZ7m9z1X5wzNRappDCfYuvSiI2N47Oebaf6HEEz2oQq2qdR9wzbb2yvs91F7iPtZJd7qZbJtQ62B9SnlMJeasjuN1MSsfdr1/ok22u6sHCN7R+2/Wxv6D201A2HTYIiQfWiY5caNBGh4vxQ9clBglR1D5QgQIUAFQJUCFChzNHv+jeL97Ay5NIYmacWM5cGMgI1R7kcJHta/96uZX+z/UjuCf69pf5hGzcnI0+gN21IOIDqntSX879tAd9dpPYSue+LeYVwMt/8QEl2aA5Rfi/padPvIpfGMFSJ0G5yT9vnq2nqg1eYGITq5dI0hfBvIuTSmLynSh7Mcv+F25pj9MjKybRwvnse7fhfI7Rr3zD925/2f3W51rGnkv8R2W0q9jMjJnKkZuXBzGyJ0brOelq6uI7q484Nk89SJtcCtLbSQKFboWblwaxeMZka6rN7VCmTazmmQBUB55UjSm+FmpUH43W5QVq0IPDavEpEJIDmhjohXj/igfNAAujYULNe3CeDolw6djLw2qlKgAXQ3FAP+Qt37x+mq0PZq3RSJtcCdLDcEQugY0Pd4S+82JumLduH6PDR65RKjd4w+Sxlci1AZc2lAdDx56lyFPRX/1z1Yl+adnbndbsVX+TSGItUL5fmUgh/8XmOkEtjDqpIdlueIPe9b/nqivogl8YoVJHkxSzT7jSfLncZlT6XBgp5T82UP5dmFWXn0nxNZcilqdUN7lJAJUIuzYQX0i6q/J4KASoEqBCgQoAKAWqVT2mKWRmmR4hUqETKlUsTZ2sg97Gv3qEkOfIgy4XyjvKSH4FxHKe1CD3HGUB1/92kUIO+K9ZIN99Pfh1xYbv7laiclQNoUCTPIjzA2TRUicAZBQ6cHPWpQzPahNocctAUU1/IGNR4UDe6devWOwYGBj5Lp9M9YvJZygLqmJJnl11S8aDoNHDe7EKbdfDzv7Zt27awvb3921gsNj2znOFe7urqeryzs/O4r55Btv5izlMLGf16QNlnLka/LtTZ/vuiRGUikXgsyCGZTH43derUF33FMgo+X0qoAs4PbSygtQw1RgHPzm9sbHwwlwNfC8oen1SOH+vvYscCioHSROhSFJwHEkDHhpqVHDM4OLg/lwNfCzpBmK4EWADNDTUrOaa7u/t9GRRlkeMyuRZQz7VyRyyAjg110F/Y0dFxTEa5MijiqBgQk89SJteCArgSXTGUe/Qrmknhl/wkSi9qt1iRKc0YA6uaHf2K+kPeF9PqCxmEKvPMXirs1P2o+mCnxvCURrrRC3kOegr5LlShe6pf3iZ5PAP8uJvkOM5iG2rYgQla1IDqAKK676kQoEKACgEqBKgQoGKeinkqIhWqtJBLUwNQvVwaASkb3wN087iLlNXrdSkrei4Ng/QXRYHSikh1o1LSKOTxdEGP6byukMXkgbuysd5L2Kkxe0/1cmn6cgD1K6nfRS6NYajNGqGF3CtT6oNcGoNQvT3TME9GTmbUARmC2hASaCbYBjSlLahTIk5RUoTkY3NQJ1HAKf0CNEJlyqWBChsoQVUGNWqkiW8aTWkL6nDE0WscCxD2oMpyYJTXGiaozLk00PhQU9p9JkICTdMEeV9crQ2UJB9mWoHdcFx9kEtjFKqXS9OSZ8Qm9LvIpTEo/16XLM57z1RKareaufUWz+hy+/1AkcpoE2pm14pcmokKFSCq954KASoEqBCgQoAKASqgQoAKASoEqBCgAioEqBCgQoAKASoEqIAKASoEqBCgQoAKqBCgQoAKASoEqBCgAioEqBCgQoAKASqgQoAKASoEqBCgQoAKqBCgQoAKASoEqIAKASoEqFDZ9J8AAwAyQneDN6BG7AAAAABJRU5ErkJggg==) no-repeat;background-position:-38px -28px}.brtc-chekckbox-wrapper input[type="checkbox"]:checked+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAUFJREFUOBFjNFE4/J+BioCJimaBjRrmBvLwMWOEGNlellfiZFi/34QhMkkKxVCyDFRS5WKYs1qPQUCIlYGNHdUIFhTjieCADJsNNIyPn4VhStcDhoXTn6DoQjGekZGBwcCUD0UBMkddm5thzhqIYbMnPsIwDKQWxcCKFhWGGct0GawdBZHNAbO19HgYZi7XY+DlY2FYAHTVrAmPMNSABFAM/PrlLwMzCyND7ywtFENBhk0HWsTNyww2bCrQq7gAs5RAUgNM8uSRD2CmqZUAg6u3KMP1K18YBIEBP3WJLgMXN2HDQJoZseXlhEwZhuwyBYa/fxkYfv38x8DJxUTQZTBHoXgZJggKo4lt9xmYgekWZNiyec8Y8HkTpg9E40w2S2Y/BbtOWp6Tob/5HrIevGysXsarg4AkVi8T0INXegQaCADwSFOCVRRIJgAAAABJRU5ErkJggg==) no-repeat;background-position:0px 0px} +.brtc-input{width:100%;height:25px;box-sizing:border-box;min-width:16px;min-height:16px;margin:0;padding:0;padding-right:10px;padding-left:10px;border-width:1px;border-style:solid}.brtc-input.number{padding-right:10px;padding-left:10px;text-align:right;word-wrap:normal} +.brtc-text-area{height:80px;width:100%} +.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bos-datepicker-calendar{font-family:"NotoSansCJKkr",Verdana,Arial,sans-serif;font-size:13px;background-color:#fff;border:1px solid #555;display:none;position:absolute;top:100px;left:700px;width:200px;height:205px;z-index:9999999;outline:none}.bos-datepicker-calendar--visible{display:block}.bos-datepicker-calendar tr{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;flex:1 1 0}.bos-datepicker-calendar__title{width:100px;text-align:center}.bos-datepicker-calendar__title:hover{cursor:pointer}.bos-datepicker-calendar__head{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;background-color:#e8e8e8;height:10%}.bos-datepicker-calendar__body{width:100%;height:90%}.bos-datepicker-calendar tbody{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;flex-direction:column;height:100%}.bos-datepicker-calendar__prev{border-radius:6px;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;justify-content:center;align-items:center;width:20px;height:20px}.bos-datepicker-calendar__prev:hover{cursor:pointer}.bos-datepicker-calendar__next{border-radius:6px;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;justify-content:center;align-items:center;width:20px;height:20px}.bos-datepicker-calendar__next:hover{cursor:pointer}.bos-datepicker-calendar__row{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bos-datepicker-calendar__date{background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);flex:1 1 0;box-sizing:border-box;display:flex;align-items:center;justify-content:center}.bos-datepicker-calendar__date:hover{cursor:pointer}.bos-datepicker-calendar__date.active{border:1px solid #999;border-radius:3px;background-color:#d1d1d1}.bos-datepicker-calendar__date:hover{border:1px solid #999;border-radius:3px;background-color:#e8e8e8}.bos-datepicker-calendar__date.none{color:#898989}.bos-datepicker-calendar__date.none:hover{color:#898989}.bos-datepicker-clock{display:none;position:absolute;top:100px;left:700px;z-index:9999999;outline:none}.bos-datepicker-clock--visible{display:block}.bos-datepicker-clock__up-arrow{width:30px}.bos-datepicker-clock__up-arrow:hover{cursor:pointer}.bos-datepicker-clock__down-arrow{width:30px}.bos-datepicker-clock__down-arrow:hover{cursor:pointer}.bos-datepicker-clock__time-input{width:26px;height:30px;text-align:center}.bos-datepicker-clock__input-bar{display:flex;align-items:center}.bos-datepicker-clock__arrow-bar-upper{display:flex;height:22px}.bos-datepicker-clock__arrow-bar-lower{display:flex;height:22px}.bos-datepicker-main-view{display:flex}.bos-datepicker-main-view__input{width:100%}.bos-datepicker-main-view__clock-button{display:none}.bos-datepicker-main-view__clock-button--visible{display:block} +.brtc-state-normal{border:1px solid #d4d4d4;color:#444444;background-color:#fff}.brtc-widget.brtc-state-disabled,.brtc-widget.brtc-state-disabled *,.brtc-state-disabled,.brtc-state-disabled *{cursor:default;opacity:.55;user-select:none}.brtc-state-error{border:1px solid rgba(194,6,17,0.65)}.brtc-state-focus{border:1px solid #626fdb}.brtc-state-pressed{background-color:#eff1fd}.brtc-state-empty{border:1px solid #626fdb}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}.brtc-widget .brtc-drop-down-list-wrapper{width:100%;height:100%;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.brtc-widget .brtc-drop-down-list-wrapper:hover{cursor:pointer}.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list{background-color:transparent;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center}.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn:hover,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn:active{flex-grow:1;border-radius:0px;background-image:none;border:none;box-shadow:none;padding:0 0 0 2px}.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn.toggle,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn.toggle:active,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn.toggle.active{flex-grow:0;flex-shrink:0;width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAARCAYAAABkUAr2AAAAoklEQVRYhe2U4QqAIAyEV/TMUU+g2UOvHyWIKDqdFHTfPwV3t3NKBAAAQI0ptcnMagLrtnOo46xRqy3wEC75PGyybyKiebyd20RvgSfY4T4WqbizJptuhZmms97Puu3cqV8kOSE50Q4zHvEtx5fTOCnVZ7JPJm5eIQwi4YTkmm8IpVo3+WQ8zpqpc0xDxDWUdEP9YpDFT/WtMAbxFR8AAPAPLsPrN6x9pXB+AAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:center;background-position-x:0;background-color:transparent;box-shadow:none;border:none;padding:0 2px}.brtc-drop-down-list{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:0}ul.brtc-drop-down-list{background-color:#fff;padding-left:0;border:1px solid #626fdb;box-shadow:none;border-radius:0;z-index:10;overflow:auto}ul.brtc-drop-down-list>li{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:1px;padding:3px;height:14px;font-size:12px;display:block}ul.brtc-drop-down-list>li>.bos-display-flex-center{width:100%}ul.brtc-drop-down-list>li.active,ul.brtc-drop-down-list>li:focus:not(.divider):not(.title),ul.brtc-drop-down-list>li:hover:not(.divider):not(.title){background-color:#e5e5e5;border:#ccc;color:inherit;background-image:none}.brtc-widget-drop-down{background-color:white}.brtc-widget-drop-down__value-view{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:100%;border:1px solid #d4d4d4;padding-left:4px;padding-right:10px;align-items:center}.brtc-widget-drop-down__value-view:hover{cursor:pointer;background-color:#e5e5e5;border:1px solid #ccc}.brtc-widget-drop-down__value-view-left{flex:1 1 auto;display:inline-block}.brtc-widget-drop-down__value-view-right{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center}.brtc-widget-drop-down__list{width:100%;height:100%;margin-block-start:0;margin-block-end:0;padding-inline-start:0;padding:0;box-sizing:border-box;cursor:pointer}.brtc-widget-drop-down__list-wrapper{overflow:auto;border:1px solid #626fdb;box-sizing:border-box;background-color:#fff;z-index:1000000000;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.brtc-widget-drop-down__list-item{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;height:30px;flex:1 1 auto}.brtc-widget-drop-down__list-item:hover{background-color:#e5e5e5;border:1px solid #ccc}.brtc-widget-drop-down__list-item--selected{background-color:#eff1fd;border:1px solid #ccc}.brtc-widget-drop-down__list-item-inner{padding:3px;margin:1px}.brtc-widget-drop-down__list-item>div{height:unset}.brtc-widget-drop-down[disabled="disabled"]{background-color:#e5e5e5}.brtc-widget-drop-down[disabled="disabled"]__value-view{cursor:none;background-color:transparent}.brtc-widget-drop-down[disabled="disabled"]__value-view:hover{cursor:none} +.brtc-expander-wrapper:before,.brtc-expander-wrapper:after,.brtc-expander-wrapper-expanded:before,.brtc-expander-wrapper-expanded:after{content:'';position:absolute;width:100%;height:1px;background-color:#DBDDE2;z-index:1}.brtc-expander-wrapper{position:relative;box-sizing:border-box}.brtc-expander-wrapper-expanded:before{z-index:2}.brtc-expander-wrapper-expanded:after{z-index:2}.brtc-expander-wrapper-expanded div[class*="expander-header"]{color:#000}.brtc-expander-wrapper-collapsed div[class*="expander-header"]{color:rgba(0,0,0,0.8)}.brtc-expander-wrapper .brtc-expander-header{border:none;background-color:#ffffff;display:flex;align-items:center;padding:0 20px;box-sizing:border-box;font-size:14px;height:40px !important;position:relative;cursor:pointer}.brtc-expander-wrapper .brtc-expander-header.active{background-color:#ffffff}.brtc-expander-wrapper .brtc-expander-header.active>div.brtc-expander-arrow{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAGCAYAAAD37n+BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDNkJFNTcxNDFEQjExRTc5OTEyRTgxNjU2Qzk3MDNBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDNkJFNTcyNDFEQjExRTc5OTEyRTgxNjU2Qzk3MDNBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUM2QkU1NkY0MURCMTFFNzk5MTJFODE2NTZDOTcwM0EiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUM2QkU1NzA0MURCMTFFNzk5MTJFODE2NTZDOTcwM0EiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz50CJiNAAAAO0lEQVR42mL8//8/AzpgZGQECwLlGNHlmHApRmdj1YBsMsx0dE1M+JyBTRMTITejawJxcCrG5lyAAAMAc8MmC4srl00AAAAASUVORK5CYII=)}.brtc-expander-wrapper .brtc-expander-header.active:after{content:'';position:absolute;top:39px;left:20px;box-sizing:border-box;width:calc(100% - 40px);height:1px;background-color:#d9d9d9}.brtc-expander-wrapper .brtc-expander-header>div:not(.brtc-expander-arrow){width:100%;margin-left:10px}.brtc-expander-wrapper .brtc-expander-header .brtc-expander-arrow{width:12px;height:6px;margin:0 !important;left:20px;top:17px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAGCAYAAAD37n+BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlCNjU4RTRDNDFEQjExRTc5QUUzQ0FBRDM4MDkwNDM5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlCNjU4RTRENDFEQjExRTc5QUUzQ0FBRDM4MDkwNDM5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUI2NThFNEE0MURCMTFFNzlBRTNDQUFEMzgwOTA0MzkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUI2NThFNEI0MURCMTFFNzlBRTNDQUFEMzgwOTA0MzkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4g/DmhAAAASUlEQVR42mJhYGCYCcQM////T2fAAxgZGcHqmGAKYQL4FIPUMiGbjk0TsmKwDTAJbJrQFYPFgBysJqIbBANM6E5AVoAtIAACDAD20Sps8AF5DgAAAABJRU5ErkJggg==)}.brtc-expander-wrapper .brtc-expander-header div[class*="expander-header-content"]{padding:0 !important;margin:0 24px !important;flex-grow:1;width:calc(100% - 48px)}.brtc-expander-wrapper .brtc-expander-contents{font-style:normal;font-size:13px;border:none;padding:0 20px;background-color:#ffffff} +.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}.brtc-tab-header{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding-inline-start:0;display:flex}.brtc-tabs-list{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style-type:none;height:auto;align-items:center;justify-content:center}.brtc-tabs-list:hover{cursor:pointer}.brtc-tabs-list--selected-tab{border-bottom:2px solid #8190FF;height:32px;width:50%;color:#8190FF}.brtc-tab-content-wrapper{height:100%}.brtc-tab-content{height:100%}.brtc-tab-content--hidden{display:none} +div.brtc-context-menu.dropdown{font-family:'NotoSansCJKkr','Arial', Dotum, Tahoma, sans-serif;font-size:12px;color:rgba(0,0,0,0.7);z-index:3}div.brtc-context-menu.dropdown ul{background-color:#fff;border:1px solid #dddddd;border-radius:0px;cursor:pointer}div.brtc-context-menu.dropdown ul>li{color:rgba(0,0,0,0.7)}div.brtc-context-menu.dropdown ul>li:not(.divider){line-height:32px;padding:4px 8px 4px 8px}div.brtc-context-menu.dropdown ul>li.divider{width:100%;height:1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}div.brtc-context-menu.dropdown ul>li:hover:not(.divider):not(.title),div.brtc-context-menu.dropdown ul>li:focus:not(.divider):not(.title),div.brtc-context-menu.dropdown ul>li.active{background-color:#d9d9d9}div.brtc-context-menu.dropdown ul,div.brtc-context-menu.dropdown menu,div.brtc-context-menu.dropdown dir{display:block;list-style:none;margin:2px;padding:2px} +.listbox table.table{border-bottom:1px solid #dfdce3 !important;cursor:pointer;display:block}.listbox table.table>thead th{color:#000;background:#f5f5f5;border-top:1px solid #dedede;border-bottom:1px solid #dedede}.listbox table.table>tbody{display:block}.listbox table.table>tbody>tr{display:block;background:#fff}.listbox table.table>tbody>tr>td{display:block;color:#000}.listbox table.table>tbody>tr>td:first-child{border-left-width:0px}.listbox table.table>tbody>tr>td.none{border-bottom-width:0px;background:#fafafa}.listbox table.table>tbody>tr>td.none>.msg{text-shadow:0 1px 0 rgba(255,255,255,0.1)}.listbox table.table>tbody>tr:last-child>td{border-bottom-width:0px}.listbox table.table>tbody>tr.selected{background-color:#ebe9f9}.listbox table.table>tbody>tr.selected>td{color:#3420c3;outline:1px dotted #3420c3}.listbox table.table>tbody>tr.checked{background-color:#ebe9f9}.listbox table.table>tbody>tr.checked>td{color:#3420c3;outline:1px dotted #3420c3} +.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}div.brtc-widget-slider.slider{position:relative;user-select:none;overflow:hidden;width:100%;height:40px}div.brtc-widget-slider.slider .track{left:15px;right:15px;top:50%;margin-top:-3px;height:8px;background:#ececec;border-radius:3px;position:absolute}div.brtc-widget-slider.slider .track .progress{border:1px solid #ccc;background-color:#86bfa0;border-radius:3px;position:absolute;width:100%;height:100%}div.brtc-widget-slider.slider .track .handle{height:20px;width:20px;border:1px solid #d4d4d4;background-color:#fdfdfd;margin-top:-7px;left:50%;margin-left:-7px;border-radius:20px;box-shadow:0 1px 0 rgba(0,0,0,0.05);border-radius:20px;position:absolute}div.brtc-widget-slider.slider .track .handle:hover{border:1px solid #ccc;background-color:#e5e5e5;cursor:pointer}div.brtc-widget-slider.slider.horizontal.has-tooltip{height:60px}div.brtc-widget-slider.slider.horizontal.has-tooltip .track{top:40px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track{display:block;left:15px;right:15px;top:6px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track .tooltip{position:absolute;z-index:6000;display:block;font-size:11px;line-height:1.4;visibility:visible;opacity:.9;min-width:50px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track .tooltip.top{padding:5px 0;margin-top:-3px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track .tooltip .message{padding:3px 8px;text-decoration:none;word-break:break-all;border-radius:2px;color:#fff;background-color:#000;text-align:center}div.brtc-widget-slider.slider .tooltip-track{position:absolute;display:none} +div.brtc-window.window{background-color:#ffffff;border:1px solid #dddddd;border-radius:0px;z-index:2000}div.brtc-window.window div.brtc-window-header.head{height:34px;cursor:default}div.brtc-window.window div.brtc-window-header.head .left{display:inline-block}div.brtc-window.window div.brtc-window-header.head .right{margin-right:10px;float:right}div.brtc-window.window div.brtc-window-header.head .close{position:absolute;right:auto !important;width:18px;height:18px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAFVSURBVEhLzZVNbsJADEZHlcqKc3CirnsGjlD6w4U4Blcohe56hy6CX2RHxvFMSoVELD0FBme+pzgkpeu6WZEu3pqyuoL+hFLWwofwwJc/FH1bgfOG4Kfnn71wEha21oI+4ZvzohABG+FdP7fKZOjve0PAp3Dks61naC8y9C+iEMXmr0pNymQuepKgLyWV0h5kDtaTCVEtqVSG8mGggamU/obMxW81IYowRjeMRI/IpCO1TT0azOj6kbg1ZEYjbQlRhHKTvwiPQlWG8ht7VICbHKmlkMrAlBBlV2Wnx1SGipt7CFeRXz2OZOBaoeYjIW7uCULVR8KUEOGM6BYjs/vo3yMj9E3Ibur0kRA3B0I1PLupR/++mhBhs/nbmwxXJ8pYmZS/ekMYaCAPvHQ0rgep4epFITaf1auDlyQhUzJWJpW9XAlpyhj0af/e1kZN9yZdvB9dOQOg2XCk26eBqgAAAABJRU5ErkJggg==);background-repeat:no-repeat;background-position:0 0}div.brtc-window.window div.brtc-window-body.body{border-top:1px solid #dddddd;padding:10px 0px} +.brtc-widget-notification__default-container{position:absolute;top:5%;left:100%;width:500px;display:flex;flex-direction:column;z-index:999999;transform:translateX(-100%)}.brtc-widget-notification__notification-wrapper{padding:10px;height:50px;width:calc(100% - 20px);z-index:999999;color:white;background-color:rgba(0,0,0,0.95)}.brtc-widget-notification__notification-message-wrapper{font-size:12px}.brtc-widget-notification__icon-wrapper{width:26px}.brtc-widget-notification__icon-wrapper>i{font-size:18px;float:left}.brtc-widget-notification__close-wrapper>i{font-size:18px;float:right}.brtc-widget-notification__close-wrapper>i:hover{cursor:pointer} +.bos-color-picker-control{padding:5px 15px}.jui.colorpicker{position:relative;width:223px;box-sizing:content-box}.jui.colorpicker>.color{position:relative;height:145px;overflow:hidden;cursor:pointer}.jui.colorpicker>.color>.saturation{position:relative;width:100%;height:100%}.jui.colorpicker>.color>.saturation>.value{position:relative;width:100%;height:100%}.jui.colorpicker>.color>.saturation>.value>.drag-pointer{position:absolute;width:10px;height:10px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;left:-5px;top:-5px}.jui.colorpicker>.control{position:relative;padding:5px 0 20px 0}.jui.colorpicker>.control>.color,.jui.colorpicker>.control>.empty{position:absolute;left:11px;top:15px;width:30px;height:30px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.control>.hue{position:relative;padding:8px 12px;margin:10px 0px 0px 42px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.jui.colorpicker>.control>.hue>.container{position:relative;width:157px;height:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.control>.opacity,.jui.colorpicker>.control .input{display:none}.jui.colorpicker>.control .drag-bar,.jui.colorpicker>.control .drag-bar2{position:absolute;cursor:pointer;top:50% !important;margin-top:-8px !important;left:-3px;width:16px;height:16px;border:1px solid #000;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.jui.colorpicker>.information{position:relative;height:70px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.information>.input{position:absolute;font-size:10px;height:20px;bottom:20px;padding:0 0 0 2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.information>.input:nth-child(1){width:93px;left:10px}.jui.colorpicker>.information>.input:nth-child(2){width:30px;right:74px}.jui.colorpicker>.information>.input:nth-child(3){width:30px;right:42px}.jui.colorpicker>.information>.input:nth-child(4){width:30px;right:10px}.jui.colorpicker>.information>.title{position:absolute;font-size:11px;top:15px}.jui.colorpicker>.information>.title:nth-child(5){left:10px}.jui.colorpicker>.information>.title:nth-child(6){left:123px}.jui.colorpicker>.information>.title:nth-child(7){left:155px}.jui.colorpicker>.information>.title:nth-child(8){left:187px}.colorpicker{background-color:#fff}.colorpicker .color{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px}.colorpicker .color>.saturation{background-color:rgba(204,154,129,0);background-image:-moz-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-webkit-gradient(linear, 0 0, 100% 0, from(#fff), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-o-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:linear-gradient(to right, #fff, rgba(204,154,129,0));background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#00cc9a81', GradientType=1)}.colorpicker .color>.saturation>.value{background-image:-webkit-gradient(linear, 0 100%, 0 0, from(#000), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-o-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:linear-gradient(to top, #000, rgba(204,154,129,0))}.colorpicker .color>.saturation>.value>.drag-pointer{border:1px solid #fff;-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);-moz-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px 0 rgba(0,0,0,0.05)}.colorpicker .control>.hue>.container{background:-moz-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-ms-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-o-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-webkit-gradient(linear, left top, right top, from(red), color-stop(0.17, #ff0), color-stop(0.33, lime), color-stop(0.5, cyan), color-stop(0.67, blue), color-stop(0.83, #f0f), to(red));background:-webkit-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:linear-gradient(to right, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%)}.colorpicker .control>.input{color:#333}.colorpicker .control>.empty{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAJElEQVQYV2NctWrVfwYkEBYWxojMZ6SDAmT7QGx0K1EcRBsFAADeG/3M/HteAAAAAElFTkSuQmCC") repeat}.colorpicker .control .drag-bar,.colorpicker .control .drag-bar2{border:1px solid rgba(0,0,0,0.1);-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);-moz-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px 0 rgba(0,0,0,0.05);background-color:#FFFFFF}.colorpicker .information{border-top:1px solid #e8e8e8}.colorpicker .information>.title{color:#a3a3a3}.colorpicker .information>.input{color:#333} +div.brtc-layout-splitter-container{position:relative;width:100%;height:100%}div.brtc-layout-splitter-container div.ui-splitter-vertical,div.brtc-layout-splitter-container div.ui-splitter-horizontal{z-index:1249} +.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}.brtc-widget-tree{padding:5px;background-color:white;border:1px solid black;overflow:hidden}.brtc-widget-tree ul{margin-block-start:0;margin-block-end:0;padding-inline-start:16px}.brtc-widget-tree__item--hidden{display:none}.brtc-widget-tree__item-wrapper{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block}.brtc-widget-tree__item-wrapper:hover{cursor:pointer;background-color:#e5e5e5}.brtc-widget-tree__item-wrapper--selected{background-color:#dee9ef;border:1px solid #ccc}.brtc-widget-tree__item-wrapper--selected:hover{background-color:#dee9ef}.brtc-widget-tree__empty{float:left;width:12px}.brtc-widget-tree__arrow{float:left;width:12px}.brtc-widget-tree__arrow:hover{cursor:pointer} diff --git a/va-server/visual-analytics/public/css/plugins/brightics/brtc-widgets-all.min.css b/va-server/visual-analytics/public/css/plugins/brightics/brtc-widgets-all.min.css new file mode 100644 index 000000000..e4ae20950 --- /dev/null +++ b/va-server/visual-analytics/public/css/plugins/brightics/brtc-widgets-all.min.css @@ -0,0 +1,2096 @@ +.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute} +.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row} +.brtc-state-normal{border:1px solid #d4d4d4;color:#444444;background-color:#fff}.brtc-widget.brtc-state-disabled,.brtc-widget.brtc-state-disabled *,.brtc-state-disabled,.brtc-state-disabled *{cursor:default;opacity:.55;user-select:none}.brtc-state-error{border:1px solid rgba(194,6,17,0.65)}.brtc-state-focus{border:1px solid #626fdb}.brtc-state-pressed{background-color:#eff1fd}.brtc-state-empty{border:1px solid #626fdb} +.jui { + /* Icon Base */ + /* Icon Animations */ + /* Icon List */ +} +.jui .clearfix { + *zoom: 1; +} +.jui .clearfix:before, +.jui .clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.jui .clearfix:after { + clear: both; +} +.jui .hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.jui label, +.jui input, +.jui button, +.jui select, +.jui textarea { + font-weight: normal; +} +.jui select, +.jui button, +.jui input[type="button"], +.jui input[type="reset"], +.jui input[type="submit"], +.jui input[type="radio"], +.jui input[type="checkbox"] { + cursor: pointer; +} +.jui button, +.jui html input[type="button"], +.jui input[type="reset"], +.jui input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} +.jui button, +.jui input { + line-height: normal; +} +.jui button, +.jui input, +.jui select, +.jui textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +.jui select[disabled], +.jui textarea[disabled], +.jui select[readonly], +.jui textarea[readonly] { + cursor: not-allowed; +} +.jui [class^="icon-"], +.jui [class*=" icon-"] { + font-family: "jennifer"; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + display: inline-block; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.jui [class^="icon-"].spin, +.jui [class*=" icon-"].spin { + -webkit-animation: spin 2s infinite linear; + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].flash, +.jui [class*=" icon-"].flash { + -webkit-animation: flash 2s infinite ease; + -moz-animation: flash 2s infinite ease; + -o-animation: flash 2s infinite ease; + animation: flash 2s infinite ease; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].bounce, +.jui [class*=" icon-"].bounce { + -webkit-animation: bounce 2s infinite ease; + -moz-animation: bounce 2s infinite ease; + -o-animation: bounce 2s infinite ease; + animation: bounce 2s infinite ease; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].float, +.jui [class*=" icon-"].float { + -webkit-animation: float 2s infinite linear; + -moz-animation: float 2s infinite linear; + -o-animation: float 2s infinite linear; + animation: float 2s infinite linear; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui [class^="icon-"].pulse, +.jui [class*=" icon-"].pulse { + -webkit-animation: pulse 2s infinite linear; + -moz-animation: pulse 2s infinite linear; + -o-animation: pulse 2s infinite linear; + animation: pulse 2s infinite linear; + /* SPIN */ + /* Flash */ + /* BOUNCE */ + /* FLOAT */ + /* PULSE */ +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -ms-transform: rotate(0deg); + } + 100% { + -ms-transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } +} +@-moz-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-webkit-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-ms-keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@keyframes flash { + 0%, + 100%, + 50% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +@-moz-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -moz-transform: translateY(0); + } + 40% { + -moz-transform: translateY(-10px); + } + 60% { + -moz-transform: translateY(-10px); + } +} +@-webkit-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -webkit-transform: translateY(0); + } + 40% { + -webkit-transform: translateY(-10px); + } + 60% { + -webkit-transform: translateY(-10px); + } +} +@-ms-keyframes bounce { + 0%, + 100%, + 20%, + 50%, + 80% { + -ms-transform: translateY(0); + } + 40% { + -ms-transform: translateY(-10px); + } + 60% { + -ms-transform: translateY(-10px); + } +} +@keyframes bounce { + 0%, + 10%, + 20%, + 50%, + 80% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-10px); + } +} +@-moz-keyframes float { + 0% { + -moz-transform: translateY(0); + } + 50% { + -moz-transform: translateY(-6px); + } + 100% { + -moz-transform: translateY(0); + } +} +@-webkit-keyframes float { + 0% { + -webkit-transform: translateY(0); + } + 50% { + -webkit-transform: translateY(-6px); + } + 100% { + -webkit-transform: translateY(0); + } +} +@-ms-keyframes float { + 0% { + -ms-transform: translateY(0); + } + 50% { + -ms-transform: translateY(-6px); + } + 100% { + -ms-transform: translateY(0); + } +} +@keyframes float { + 0% { + transform: translateY(0); + } + 50% { + transform: translateY(-6px); + } + 100% { + transform: translateY(0); + } +} +@-moz-keyframes pulse { + 0% { + -moz-transform: scale(1.1); + } + 50% { + -moz-transform: scale(0.8); + } + 100% { + -moz-transform: scale(1); + } +} +@-webkit-keyframes pulse { + 0% { + -webkit-transform: scale(1); + } + 50% { + -webkit-transform: scale(0.8); + } + 100% { + -webkit-transform: scale(1); + } +} +@-ms-keyframes pulse { + 0% { + -ms-transform: scale(1.1); + } + 50% { + -ms-transform: scale(0.8); + } + 100% { + -ms-transform: scale(1); + } +} +@keyframes pulse { + 0% { + transform: scale(1.1); + } + 50% { + transform: scale(0.8); + } + 100% { + transform: scale(1); + } +} +.jui .icon-chevron-left:before { + content: "\e90e"; +} +.jui .icon-iframe:before { + content: "\e9be"; +} +.jui .icon-textbox:before { + content: "\e9bf"; +} +.jui .icon-arrow5:before { + content: "\e905"; +} +.jui .icon-arrow7:before { + content: "\e900"; +} +.jui .icon-loveit2:before { + content: "\e901"; +} +.jui .icon-favorites2:before { + content: "\e902"; +} +.jui .icon-favorites1:before { + content: "\e903"; +} +.jui .icon-arrow6:before { + content: "\e904"; +} +.jui .icon-happy2:before { + content: "\e906"; +} +.jui .icon-unhappy2:before { + content: "\e907"; +} +.jui .icon-happy:before { + content: "\e908"; +} +.jui .icon-gear2:before { + content: "\e909"; +} +.jui .icon-expand:before { + content: "\e90a"; +} +.jui .icon-export:before { + content: "\e90b"; +} +.jui .icon-back:before { + content: "\e90c"; +} +.jui .icon-report-link:before { + content: "\e90d"; +} +.jui .icon-chevron-right:before { + content: "\e90f"; +} +.jui .icon-dot:before { + content: "\e910"; +} +.jui .icon-list1:before { + content: "\e911"; +} +.jui .icon-pause:before { + content: "\e912"; +} +.jui .icon-minus:before { + content: "\e913"; +} +.jui .icon-plus:before { + content: "\e914"; +} +.jui .icon-close:before { + content: "\e915"; +} +.jui .icon-tool2:before { + content: "\e916"; +} +.jui .icon-time:before { + content: "\e917"; +} +.jui .icon-check:before { + content: "\e918"; +} +.jui .icon-download:before { + content: "\e919"; +} +.jui .icon-upload:before { + content: "\e91a"; +} +.jui .icon-layout3:before { + content: "\e91b"; +} +.jui .icon-tool:before { + content: "\e91c"; +} +.jui .icon-screenshot:before { + content: "\e91d"; +} +.jui .icon-server:before { + content: "\e91e"; +} +.jui .icon-slider:before { + content: "\e91f"; +} +.jui .icon-statistics:before { + content: "\e920"; +} +.jui .icon-themes:before { + content: "\e921"; +} +.jui .icon-was:before { + content: "\e922"; +} +.jui .icon-realtime:before { + content: "\e923"; +} +.jui .icon-report2:before { + content: "\e924"; +} +.jui .icon-resize:before { + content: "\e925"; +} +.jui .icon-return:before { + content: "\e926"; +} +.jui .icon-label:before { + content: "\e927"; +} +.jui .icon-mail:before { + content: "\e928"; +} +.jui .icon-message:before { + content: "\e929"; +} +.jui .icon-monitoring:before { + content: "\e92a"; +} +.jui .icon-grip1:before { + content: "\e92b"; +} +.jui .icon-grip2:before { + content: "\e92c"; +} +.jui .icon-grip3:before { + content: "\e92d"; +} +.jui .icon-dashboard:before { + content: "\e92e"; +} +.jui .icon-domain:before { + content: "\e92f"; +} +.jui .icon-edit:before { + content: "\e930"; +} +.jui .icon-etc:before { + content: "\e931"; +} +.jui .icon-chart-candle:before { + content: "\e932"; +} +.jui .icon-chart-gauge:before { + content: "\e933"; +} +.jui .icon-arrow2:before { + content: "\e934"; +} +.jui .icon-arrow4:before { + content: "\e935"; +} +.jui .icon-bell:before { + content: "\e936"; +} +.jui .icon-info:before { + content: "\e937"; +} +.jui .icon-tumblr:before { + content: "\e938"; +} +.jui .icon-kakao:before { + content: "\e939"; +} +.jui .icon-googleplus2:before { + content: "\e93a"; +} +.jui .icon-close2:before { + content: "\e93b"; +} +.jui .icon-facebook2:before { + content: "\e93c"; +} +.jui .icon-github2:before { + content: "\e93d"; +} +.jui .icon-hierarchy:before { + content: "\e93e"; +} +.jui .icon-loveit:before { + content: "\e93f"; +} +.jui .icon-return2:before { + content: "\e940"; +} +.jui .icon-theme:before { + content: "\e941"; +} +.jui .icon-line-merge:before { + content: "\e942"; +} +.jui .icon-line-separate:before { + content: "\e943"; +} +.jui .icon-enter:before { + content: "\e944"; +} +.jui .icon-ws:before { + content: "\e945"; +} +.jui .icon-clip:before { + content: "\e946"; +} +.jui .icon-scissors:before { + content: "\e947"; +} +.jui .icon-topology:before { + content: "\e948"; +} +.jui .icon-equalizer:before { + content: "\e949"; +} +.jui .icon-idea:before { + content: "\e94a"; +} +.jui .icon-tag:before { + content: "\e94b"; +} +.jui .icon-all:before { + content: "\e94c"; +} +.jui .icon-cursor1:before { + content: "\e94d"; +} +.jui .icon-roundsquare:before { + content: "\e94e"; +} +.jui .icon-paintbucket:before { + content: "\e94f"; +} +.jui .icon-square:before { + content: "\e950"; +} +.jui .icon-circle:before { + content: "\e951"; +} +.jui .icon-eraser:before { + content: "\e952"; +} +.jui .icon-paintbrush:before { + content: "\e953"; +} +.jui .icon-pen:before { + content: "\e954"; +} +.jui .icon-eyedropper:before { + content: "\e955"; +} +.jui .icon-x-mark:before { + content: "\e956"; +} +.jui .icon-server2:before { + content: "\e957"; +} +.jui .icon-server1:before { + content: "\e958"; +} +.jui .icon-unhappy:before { + content: "\e959"; +} +.jui .icon-layout2:before { + content: "\e95a"; +} +.jui .icon-layout1:before { + content: "\e95b"; +} +.jui .icon-d:before { + content: "\e95c"; +} +.jui .icon-cursor:before { + content: "\e95d"; +} +.jui .icon-feed:before { + content: "\e95e"; +} +.jui .icon-filter:before { + content: "\e95f"; +} +.jui .icon-column:before { + content: "\e960"; +} +.jui .icon-analysis:before { + content: "\e961"; +} +.jui .icon-wireless:before { + content: "\e962"; +} +.jui .icon-network:before { + content: "\e963"; +} +.jui .icon-cloud:before { + content: "\e964"; +} +.jui .icon-checkbox:before { + content: "\e965"; +} +.jui .icon-checkbox2:before { + content: "\e966"; +} +.jui .icon-stop:before { + content: "\e967"; +} +.jui .icon-link2:before { + content: "\e968"; +} +.jui .icon-minus2:before { + content: "\e969"; +} +.jui .icon-more:before { + content: "\e96a"; +} +.jui .icon-zip:before { + content: "\e96b"; +} +.jui .icon-mobile:before { + content: "\e96c"; +} +.jui .icon-tablet:before { + content: "\e96d"; +} +.jui .icon-share2:before { + content: "\e96e"; +} +.jui .icon-caution3:before { + content: "\e96f"; +} +.jui .icon-lock:before { + content: "\e970"; +} +.jui .icon-script:before { + content: "\e971"; +} +.jui .icon-business:before { + content: "\e972"; +} +.jui .icon-build:before { + content: "\e973"; +} +.jui .icon-themes2:before { + content: "\e974"; +} +.jui .icon-pin:before { + content: "\e975"; +} +.jui .icon-template:before { + content: "\e976"; +} +.jui .icon-line-height:before { + content: "\e977"; +} +.jui .icon-outdent:before { + content: "\e978"; +} +.jui .icon-indent:before { + content: "\e979"; +} +.jui .icon-like:before { + content: "\e97a"; +} +.jui .icon-blogger:before { + content: "\e97b"; +} +.jui .icon-github:before { + content: "\e97c"; +} +.jui .icon-facebook:before { + content: "\e97d"; +} +.jui .icon-googleplus:before { + content: "\e97e"; +} +.jui .icon-share:before { + content: "\e97f"; +} +.jui .icon-twitter:before { + content: "\e980"; +} +.jui .icon-image:before { + content: "\e981"; +} +.jui .icon-refresh2:before { + content: "\e982"; +} +.jui .icon-connection:before { + content: "\e983"; +} +.jui .icon-analysis2:before { + content: "\e984"; +} +.jui .icon-chart-scatter:before { + content: "\e985"; +} +.jui .icon-chart-radar:before { + content: "\e986"; +} +.jui .icon-chart-area:before { + content: "\e987"; +} +.jui .icon-chart-column:before { + content: "\e988"; +} +.jui .icon-chart-bar:before { + content: "\e989"; +} +.jui .icon-chart-line:before { + content: "\e98a"; +} +.jui .icon-info-message:before { + content: "\e98b"; +} +.jui .icon-report:before { + content: "\e98c"; +} +.jui .icon-menu:before { + content: "\e98d"; +} +.jui .icon-report-build:before { + content: "\e98e"; +} +.jui .icon-jennifer-server:before { + content: "\e98f"; +} +.jui .icon-user:before { + content: "\e990"; +} +.jui .icon-rule:before { + content: "\e991"; +} +.jui .icon-profile:before { + content: "\e992"; +} +.jui .icon-device:before { + content: "\e993"; +} +.jui .icon-caution2:before { + content: "\e994"; +} +.jui .icon-db:before { + content: "\e995"; +} +.jui .icon-checkmark:before { + content: "\e996"; +} +.jui .icon-stoppage:before { + content: "\e997"; +} +.jui .icon-align-right:before { + content: "\e998"; +} +.jui .icon-caution:before { + content: "\e999"; +} +.jui .icon-loading:before { + content: "\e99a"; +} +.jui .icon-play:before { + content: "\e99b"; +} +.jui .icon-right:before { + content: "\e99c"; +} +.jui .icon-left:before { + content: "\e99d"; +} +.jui .icon-bold:before { + content: "\e99e"; +} +.jui .icon-chart:before { + content: "\e99f"; +} +.jui .icon-document:before { + content: "\e9a0"; +} +.jui .icon-link:before { + content: "\e9a1"; +} +.jui .icon-arrow3:before { + content: "\e9a2"; +} +.jui .icon-arrow1:before { + content: "\e9a3"; +} +.jui .icon-textcolor:before { + content: "\e9a4"; +} +.jui .icon-text:before { + content: "\e9a5"; +} +.jui .icon-refresh:before { + content: "\e9a6"; +} +.jui .icon-align-center:before { + content: "\e9a7"; +} +.jui .icon-align-left:before { + content: "\e9a8"; +} +.jui .icon-preview:before { + content: "\e9a9"; +} +.jui .icon-exit:before { + content: "\e9aa"; +} +.jui .icon-dashboardlist:before { + content: "\e9ab"; +} +.jui .icon-add-dir:before { + content: "\e9ac"; +} +.jui .icon-add-dir2:before { + content: "\e9ad"; +} +.jui .icon-calendar:before { + content: "\e9ae"; +} +.jui .icon-gear:before { + content: "\e9af"; +} +.jui .icon-help:before { + content: "\e9b0"; +} +.jui .icon-hide:before { + content: "\e9b1"; +} +.jui .icon-home:before { + content: "\e9b2"; +} +.jui .icon-html:before { + content: "\e9b3"; +} +.jui .icon-italic:before { + content: "\e9b4"; +} +.jui .icon-new-window:before { + content: "\e9b5"; +} +.jui .icon-orderedlist:before { + content: "\e9b6"; +} +.jui .icon-printer:before { + content: "\e9b7"; +} +.jui .icon-save:before { + content: "\e9b8"; +} +.jui .icon-search:before { + content: "\e9b9"; +} +.jui .icon-table:before { + content: "\e9ba"; +} +.jui .icon-trashcan:before { + content: "\e9bb"; +} +.jui .icon-underline:before { + content: "\e9bc"; +} +.jui .icon-unorderedlist:before { + content: "\e9bd"; +} +.jui .colorpicker { + position: relative; + width: 226px; +} +.jui .colorpicker > .color { + position: relative; + height: 145px; + overflow: hidden; + cursor: pointer; +} +.jui .colorpicker > .color > .saturation { + position: relative; + width: 100%; + height: 100%; +} +.jui .colorpicker > .color > .saturation > .value { + position: relative; + width: 100%; + height: 100%; +} +.jui .colorpicker > .color > .saturation > .value > .drag-pointer { + position: absolute; + width: 10px; + height: 10px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + left: -5px; + top: -5px; +} +.jui .colorpicker > .control { + position: relative; + padding: 18px 0px 20px 0px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} +.jui .colorpicker > .control > .color, +.jui .colorpicker > .control > .empty { + position: absolute; + left: 11px; + top: 24px; + width: 30px; + height: 30px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.jui .colorpicker > .control > .hue { + position: relative; + padding: 8px 12px; + margin: 0px 0px 0px 45px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; +} +.jui .colorpicker > .control > .hue > .container { + position: relative; + width: 157px; + height: 6px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.jui .colorpicker > .control > .opacity { + position: relative; + width: 143px; + padding: 8px 12px; + margin: 0px 0px 0px 45px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + cursor: pointer; +} +.jui .colorpicker > .control > .opacity > .container { + position: relative; + width: 100%; + height: 3px; + z-index: 2; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.jui .colorpicker > .control > .input { + position: absolute; + font-size: 10px; + right: 10px; + bottom: 20px; + width: 30px; + height: 20px; + padding: 0 0 0 2px; +} +.jui .colorpicker > .control .drag-bar, +.jui .colorpicker > .control .drag-bar2 { + position: absolute; + cursor: pointer; + top: 50% !important; + margin-top: -7px !important; + left: -3px; + width: 12px; + height: 12px; + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + border-radius: 50px; +} +.jui .colorpicker > .information { + position: relative; + height: 73px; + -webkit-box-sizing: padding-box; + -moz-box-sizing: padding-box; + box-sizing: padding-box; +} +.jui .colorpicker > .information > .input { + position: absolute; + font-size: 10px; + height: 20px; + bottom: 20px; + padding: 0 0 0 2px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + -o-user-select: text; + user-select: text; +} +.jui .colorpicker > .information > .input:nth-child(1) { + width: 93px; + left: 10px; +} +.jui .colorpicker > .information > .input:nth-child(2) { + width: 30px; + right: 74px; +} +.jui .colorpicker > .information > .input:nth-child(3) { + width: 30px; + right: 42px; +} +.jui .colorpicker > .information > .input:nth-child(4) { + width: 30px; + right: 10px; +} +.jui .colorpicker > .information > .title { + position: absolute; + font-size: 11px; + top: 15px; +} +.jui .colorpicker > .information > .title:nth-child(5) { + left: 10px; +} +.jui .colorpicker > .information > .title:nth-child(6) { + left: 123px; +} +.jui .colorpicker > .information > .title:nth-child(7) { + left: 155px; +} +.jui .colorpicker > .information > .title:nth-child(8) { + left: 187px; +} +.jui .window { + position: absolute; + margin: 0 auto; + z-index: 2000; + min-width: 200px; + min-height: 100px; + font-size: 13px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} +.jui .window > .head { + position: relative; + height: 32px; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} +.jui .window > .head > .left { + left: 10px; + right: 40px; + font-weight: bold; +} +.jui .window > .head > .left > .title { + display: inline-block; +} +.jui .window > .head > .right { + min-width: 20px; + right: 5px; +} +.jui .window > .head > .right > .close { + cursor: pointer; + right: 0px; +} +.jui .window > .head > * { + position: absolute; + padding: 8px 8px 6px 8px; +} +.jui .window > .head > * > a { + text-decoration: none; + color: inherit; +} +.jui .window > .body { + position: relative; + overflow: auto; + padding: 15px; + word-break: break-all; +} +.jui .window > .body.has-property { + padding: 0px; +} +.jui .window > .foot { + position: absolute; + left: 0px; + right: 0px; + bottom: 0px; + height: 47px; + text-align: center; + -webkit-border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; +} +.jui .window > .foot > .btn { + margin-top: 9px; +} +.jui .window > .resize { + position: absolute; + right: 0px; + bottom: 0px; + cursor: nw-resize; +} +.jui label { + max-width: none; +} +.brtc-button-default{float:right;width:100px;height:32px;cursor:pointer;color:#656eea;border:1px solid #656eea;background-color:#fff}.brtc-button-primary{float:right;width:100px;height:32px;cursor:pointer;color:#656eea;border:1px solid #656eea;background-color:#fff;color:#fff;background-color:#656eea} +.brtc-radio-button-wrapper{background-color:transparent;border:none}.brtc-radio-button-wrapper input[type="radio"]{width:0;height:0;margin:-1px}.brtc-radio-button-wrapper input[type="radio"]+label{display:inline-block;position:relative}.brtc-radio-button-wrapper input[type="radio"]+label:before{float:left;padding:0;margin:0 7px 0 0;width:18px;height:18px;line-height:19px;content:close-quote;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:0 0}.brtc-radio-button-wrapper input[type="radio"]:hover+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:0px -28px}.brtc-radio-button-wrapper input[type="radio"]:checked+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:0 -56px} +.brtc-toggle-button{background-color:#fff;border:1px solid #d4d4d4}.brtc-toggle-button__check--checked{background-color:#3420c3;border:1px solid #d9d9d9;color:#fff} +.brtc-chekckbox-wrapper.brtc-state-normal{background-color:transparent;border:none}.brtc-chekckbox-wrapper input[type="checkbox"]{width:0;height:0;margin:-1px;cursor:pointer}.brtc-chekckbox-wrapper input[type="checkbox"]+label{display:inline-block;position:relative}.brtc-chekckbox-wrapper input[type="checkbox"]+label:before{float:left;padding:0px;margin:0px 7px 0px 3px;width:17px;height:17px;line-height:19px;content:close-quote;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:-38px 0px}.brtc-chekckbox-wrapper input[type="checkbox"]:hover+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHUAAACyCAYAAAB86YCwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowM2JkNTc1Ny05MGYxLWUyNDItOWYxNy1jZjMxZTZmOWIxZjUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTlBMkI0OTIyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTlBMkI0OTEyRTBFMTFFNkI0QzhFMzQ2MjdCRjExNEYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Y2Q5MDQ5YWUtNjViYy0zYzRmLWEwMDItMmI1NjY4MjYyYWIwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAzYmQ1NzU3LTkwZjEtZTI0Mi05ZjE3LWNmMzFlNmY5YjFmNSIv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) no-repeat;background-position:-38px -28px}.brtc-chekckbox-wrapper input[type="checkbox"]:checked+label:before{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAUFJREFUOBFjNFE4/J+BioCJimaBjRrmBvLwMWOEGNlellfiZFi/34QhMkkKxVCyDFRS5WKYs1qPQUCIlYGNHdUIFhTjieCADJsNNIyPn4VhStcDhoXTn6DoQjGekZGBwcCUD0UBMkddm5thzhqIYbMnPsIwDKQWxcCKFhWGGct0GawdBZHNAbO19HgYZi7XY+DlY2FYAHTVrAmPMNSABFAM/PrlLwMzCyND7ywtFENBhk0HWsTNyww2bCrQq7gAs5RAUgNM8uSRD2CmqZUAg6u3KMP1K18YBIEBP3WJLgMXN2HDQJoZseXlhEwZhuwyBYa/fxkYfv38x8DJxUTQZTBHoXgZJggKo4lt9xmYgekWZNiyec8Y8HkTpg9E40w2S2Y/BbtOWp6Tob/5HrIevGysXsarg4AkVi8T0INXegQaCADwSFOCVRRIJgAAAABJRU5ErkJggg==) no-repeat;background-position:0px 0px} +.brtc-input{width:100%;height:25px;box-sizing:border-box;min-width:16px;min-height:16px;margin:0;padding:0;padding-right:10px;padding-left:10px;border-width:1px;border-style:solid}.brtc-input.number{padding-right:10px;padding-left:10px;text-align:right;word-wrap:normal} +.brtc-text-area{height:80px;width:100%} +.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bos-datepicker-calendar{font-family:"NotoSansCJKkr",Verdana,Arial,sans-serif;font-size:13px;background-color:#fff;border:1px solid #555;display:none;position:absolute;top:100px;left:700px;width:200px;height:205px;z-index:9999999;outline:none}.bos-datepicker-calendar--visible{display:block}.bos-datepicker-calendar tr{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;flex:1 1 0}.bos-datepicker-calendar__title{width:100px;text-align:center}.bos-datepicker-calendar__title:hover{cursor:pointer}.bos-datepicker-calendar__head{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;background-color:#e8e8e8;height:10%}.bos-datepicker-calendar__body{width:100%;height:90%}.bos-datepicker-calendar tbody{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;flex-direction:column;height:100%}.bos-datepicker-calendar__prev{border-radius:6px;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;justify-content:center;align-items:center;width:20px;height:20px}.bos-datepicker-calendar__prev:hover{cursor:pointer}.bos-datepicker-calendar__next{border-radius:6px;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;justify-content:center;align-items:center;width:20px;height:20px}.bos-datepicker-calendar__next:hover{cursor:pointer}.bos-datepicker-calendar__row{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bos-datepicker-calendar__date{background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);flex:1 1 0;box-sizing:border-box;display:flex;align-items:center;justify-content:center}.bos-datepicker-calendar__date:hover{cursor:pointer}.bos-datepicker-calendar__date.active{border:1px solid #999;border-radius:3px;background-color:#d1d1d1}.bos-datepicker-calendar__date:hover{border:1px solid #999;border-radius:3px;background-color:#e8e8e8}.bos-datepicker-calendar__date.none{color:#898989}.bos-datepicker-calendar__date.none:hover{color:#898989}.bos-datepicker-clock{display:none;position:absolute;top:100px;left:700px;z-index:9999999;outline:none}.bos-datepicker-clock--visible{display:block}.bos-datepicker-clock__up-arrow{width:30px}.bos-datepicker-clock__up-arrow:hover{cursor:pointer}.bos-datepicker-clock__down-arrow{width:30px}.bos-datepicker-clock__down-arrow:hover{cursor:pointer}.bos-datepicker-clock__time-input{width:26px;height:30px;text-align:center}.bos-datepicker-clock__input-bar{display:flex;align-items:center}.bos-datepicker-clock__arrow-bar-upper{display:flex;height:22px}.bos-datepicker-clock__arrow-bar-lower{display:flex;height:22px}.bos-datepicker-main-view{display:flex}.bos-datepicker-main-view__input{width:100%}.bos-datepicker-main-view__clock-button{display:none}.bos-datepicker-main-view__clock-button--visible{display:block} +.brtc-state-normal{border:1px solid #d4d4d4;color:#444444;background-color:#fff}.brtc-widget.brtc-state-disabled,.brtc-widget.brtc-state-disabled *,.brtc-state-disabled,.brtc-state-disabled *{cursor:default;opacity:.55;user-select:none}.brtc-state-error{border:1px solid rgba(194,6,17,0.65)}.brtc-state-focus{border:1px solid #626fdb}.brtc-state-pressed{background-color:#eff1fd}.brtc-state-empty{border:1px solid #626fdb}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}.brtc-widget .brtc-drop-down-list-wrapper{width:100%;height:100%;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.brtc-widget .brtc-drop-down-list-wrapper:hover{cursor:pointer}.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list{background-color:transparent;display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center}.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn:hover,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn:active{flex-grow:1;border-radius:0px;background-image:none;border:none;box-shadow:none;padding:0 0 0 2px}.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn.toggle,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn.toggle:active,.brtc-widget .brtc-drop-down-list-wrapper .brtc-drop-down-list.btn.toggle.active{flex-grow:0;flex-shrink:0;width:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAAARCAYAAABkUAr2AAAAoklEQVRYhe2U4QqAIAyEV/TMUU+g2UOvHyWIKDqdFHTfPwV3t3NKBAAAQI0ptcnMagLrtnOo46xRqy3wEC75PGyybyKiebyd20RvgSfY4T4WqbizJptuhZmms97Puu3cqV8kOSE50Q4zHvEtx5fTOCnVZ7JPJm5eIQwi4YTkmm8IpVo3+WQ8zpqpc0xDxDWUdEP9YpDFT/WtMAbxFR8AAPAPLsPrN6x9pXB+AAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:center;background-position-x:0;background-color:transparent;box-shadow:none;border:none;padding:0 2px}.brtc-drop-down-list{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:0}ul.brtc-drop-down-list{background-color:#fff;padding-left:0;border:1px solid #626fdb;box-shadow:none;border-radius:0;z-index:10;overflow:auto}ul.brtc-drop-down-list>li{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:1px;padding:3px;height:14px;font-size:12px;display:block}ul.brtc-drop-down-list>li>.bos-display-flex-center{width:100%}ul.brtc-drop-down-list>li.active,ul.brtc-drop-down-list>li:focus:not(.divider):not(.title),ul.brtc-drop-down-list>li:hover:not(.divider):not(.title){background-color:#e5e5e5;border:#ccc;color:inherit;background-image:none}.brtc-widget-drop-down{background-color:white}.brtc-widget-drop-down__value-view{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;height:100%;border:1px solid #d4d4d4;padding-left:4px;padding-right:10px;align-items:center}.brtc-widget-drop-down__value-view:hover{cursor:pointer;background-color:#e5e5e5;border:1px solid #ccc}.brtc-widget-drop-down__value-view-left{flex:1 1 auto;display:inline-block}.brtc-widget-drop-down__value-view-right{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center}.brtc-widget-drop-down__list{width:100%;height:100%;margin-block-start:0;margin-block-end:0;padding-inline-start:0;padding:0;box-sizing:border-box;cursor:pointer}.brtc-widget-drop-down__list-wrapper{overflow:auto;border:1px solid #626fdb;box-sizing:border-box;background-color:#fff;z-index:1000000000;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.brtc-widget-drop-down__list-item{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;height:30px;flex:1 1 auto}.brtc-widget-drop-down__list-item:hover{background-color:#e5e5e5;border:1px solid #ccc}.brtc-widget-drop-down__list-item--selected{background-color:#eff1fd;border:1px solid #ccc}.brtc-widget-drop-down__list-item-inner{padding:3px;margin:1px}.brtc-widget-drop-down__list-item>div{height:unset}.brtc-widget-drop-down[disabled="disabled"]{background-color:#e5e5e5}.brtc-widget-drop-down[disabled="disabled"]__value-view{cursor:none;background-color:transparent}.brtc-widget-drop-down[disabled="disabled"]__value-view:hover{cursor:none} +.brtc-expander-wrapper:before,.brtc-expander-wrapper:after,.brtc-expander-wrapper-expanded:before,.brtc-expander-wrapper-expanded:after{content:'';position:absolute;width:100%;height:1px;background-color:#DBDDE2;z-index:1}.brtc-expander-wrapper{position:relative;box-sizing:border-box}.brtc-expander-wrapper-expanded:before{z-index:2}.brtc-expander-wrapper-expanded:after{z-index:2}.brtc-expander-wrapper-expanded div[class*="expander-header"]{color:#000}.brtc-expander-wrapper-collapsed div[class*="expander-header"]{color:rgba(0,0,0,0.8)}.brtc-expander-wrapper .brtc-expander-header{border:none;background-color:#ffffff;display:flex;align-items:center;padding:0 20px;box-sizing:border-box;font-size:14px;height:40px !important;position:relative;cursor:pointer}.brtc-expander-wrapper .brtc-expander-header.active{background-color:#ffffff}.brtc-expander-wrapper .brtc-expander-header.active>div.brtc-expander-arrow{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAGCAYAAAD37n+BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlDNkJFNTcxNDFEQjExRTc5OTEyRTgxNjU2Qzk3MDNBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlDNkJFNTcyNDFEQjExRTc5OTEyRTgxNjU2Qzk3MDNBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUM2QkU1NkY0MURCMTFFNzk5MTJFODE2NTZDOTcwM0EiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUM2QkU1NzA0MURCMTFFNzk5MTJFODE2NTZDOTcwM0EiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz50CJiNAAAAO0lEQVR42mL8//8/AzpgZGQECwLlGNHlmHApRmdj1YBsMsx0dE1M+JyBTRMTITejawJxcCrG5lyAAAMAc8MmC4srl00AAAAASUVORK5CYII=)}.brtc-expander-wrapper .brtc-expander-header.active:after{content:'';position:absolute;top:39px;left:20px;box-sizing:border-box;width:calc(100% - 40px);height:1px;background-color:#d9d9d9}.brtc-expander-wrapper .brtc-expander-header>div:not(.brtc-expander-arrow){width:100%;margin-left:10px}.brtc-expander-wrapper .brtc-expander-header .brtc-expander-arrow{width:12px;height:6px;margin:0 !important;left:20px;top:17px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAGCAYAAAD37n+BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlCNjU4RTRDNDFEQjExRTc5QUUzQ0FBRDM4MDkwNDM5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlCNjU4RTRENDFEQjExRTc5QUUzQ0FBRDM4MDkwNDM5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUI2NThFNEE0MURCMTFFNzlBRTNDQUFEMzgwOTA0MzkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUI2NThFNEI0MURCMTFFNzlBRTNDQUFEMzgwOTA0MzkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4g/DmhAAAASUlEQVR42mJhYGCYCcQM////T2fAAxgZGcHqmGAKYQL4FIPUMiGbjk0TsmKwDTAJbJrQFYPFgBysJqIbBANM6E5AVoAtIAACDAD20Sps8AF5DgAAAABJRU5ErkJggg==)}.brtc-expander-wrapper .brtc-expander-header div[class*="expander-header-content"]{padding:0 !important;margin:0 24px !important;flex-grow:1;width:calc(100% - 48px)}.brtc-expander-wrapper .brtc-expander-contents{font-style:normal;font-size:13px;border:none;padding:0 20px;background-color:#ffffff} +.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;align-items:center;justify-content:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}.brtc-tab-header{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin:0;padding-inline-start:0;display:flex}.brtc-tabs-list{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style-type:none;height:auto;align-items:center;justify-content:center}.brtc-tabs-list:hover{cursor:pointer}.brtc-tabs-list--selected-tab{border-bottom:2px solid #8190FF;height:32px;width:50%;color:#8190FF}.brtc-tab-content-wrapper{height:100%}.brtc-tab-content{height:100%}.brtc-tab-content--hidden{display:none} +div.brtc-context-menu.dropdown{font-family:'NotoSansCJKkr','Arial', Dotum, Tahoma, sans-serif;font-size:12px;color:rgba(0,0,0,0.7);z-index:3}div.brtc-context-menu.dropdown ul{background-color:#fff;border:1px solid #dddddd;border-radius:0px;cursor:pointer}div.brtc-context-menu.dropdown ul>li{color:rgba(0,0,0,0.7)}div.brtc-context-menu.dropdown ul>li:not(.divider){line-height:32px;padding:4px 8px 4px 8px}div.brtc-context-menu.dropdown ul>li.divider{width:100%;height:1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}div.brtc-context-menu.dropdown ul>li:hover:not(.divider):not(.title),div.brtc-context-menu.dropdown ul>li:focus:not(.divider):not(.title),div.brtc-context-menu.dropdown ul>li.active{background-color:#d9d9d9}div.brtc-context-menu.dropdown ul,div.brtc-context-menu.dropdown menu,div.brtc-context-menu.dropdown dir{display:block;list-style:none;margin:2px;padding:2px} +.listbox table.table{border-bottom:1px solid #dfdce3 !important;cursor:pointer;display:block}.listbox table.table>thead th{color:#000;background:#f5f5f5;border-top:1px solid #dedede;border-bottom:1px solid #dedede}.listbox table.table>tbody{display:block}.listbox table.table>tbody>tr{display:block;background:#fff}.listbox table.table>tbody>tr>td{display:block;color:#000}.listbox table.table>tbody>tr>td:first-child{border-left-width:0px}.listbox table.table>tbody>tr>td.none{border-bottom-width:0px;background:#fafafa}.listbox table.table>tbody>tr>td.none>.msg{text-shadow:0 1px 0 rgba(255,255,255,0.1)}.listbox table.table>tbody>tr:last-child>td{border-bottom-width:0px}.listbox table.table>tbody>tr.selected{background-color:#ebe9f9}.listbox table.table>tbody>tr.selected>td{color:#3420c3;outline:1px dotted #3420c3}.listbox table.table>tbody>tr.checked{background-color:#ebe9f9}.listbox table.table>tbody>tr.checked>td{color:#3420c3;outline:1px dotted #3420c3} +.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}div.brtc-widget-slider.slider{position:relative;user-select:none;overflow:hidden;width:100%;height:40px}div.brtc-widget-slider.slider .track{left:15px;right:15px;top:50%;margin-top:-3px;height:8px;background:#ececec;border-radius:3px;position:absolute}div.brtc-widget-slider.slider .track .progress{border:1px solid #ccc;background-color:#86bfa0;border-radius:3px;position:absolute;width:100%;height:100%}div.brtc-widget-slider.slider .track .handle{height:20px;width:20px;border:1px solid #d4d4d4;background-color:#fdfdfd;margin-top:-7px;left:50%;margin-left:-7px;border-radius:20px;box-shadow:0 1px 0 rgba(0,0,0,0.05);border-radius:20px;position:absolute}div.brtc-widget-slider.slider .track .handle:hover{border:1px solid #ccc;background-color:#e5e5e5;cursor:pointer}div.brtc-widget-slider.slider.horizontal.has-tooltip{height:60px}div.brtc-widget-slider.slider.horizontal.has-tooltip .track{top:40px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track{display:block;left:15px;right:15px;top:6px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track .tooltip{position:absolute;z-index:6000;display:block;font-size:11px;line-height:1.4;visibility:visible;opacity:.9;min-width:50px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track .tooltip.top{padding:5px 0;margin-top:-3px}div.brtc-widget-slider.slider.horizontal.has-tooltip .tooltip-track .tooltip .message{padding:3px 8px;text-decoration:none;word-break:break-all;border-radius:2px;color:#fff;background-color:#000;text-align:center}div.brtc-widget-slider.slider .tooltip-track{position:absolute;display:none} +div.brtc-window.window{background-color:#ffffff;border:1px solid #dddddd;border-radius:0px;z-index:2000}div.brtc-window.window div.brtc-window-header.head{height:34px;cursor:default}div.brtc-window.window div.brtc-window-header.head .left{display:inline-block}div.brtc-window.window div.brtc-window-header.head .right{margin-right:10px;float:right}div.brtc-window.window div.brtc-window-header.head .close{position:absolute;right:auto !important;width:18px;height:18px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAASCAYAAAAzI3woAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuOWwzfk4AAAFVSURBVEhLzZVNbsJADEZHlcqKc3CirnsGjlD6w4U4Blcohe56hy6CX2RHxvFMSoVELD0FBme+pzgkpeu6WZEu3pqyuoL+hFLWwofwwJc/FH1bgfOG4Kfnn71wEha21oI+4ZvzohABG+FdP7fKZOjve0PAp3Dks61naC8y9C+iEMXmr0pNymQuepKgLyWV0h5kDtaTCVEtqVSG8mGggamU/obMxW81IYowRjeMRI/IpCO1TT0azOj6kbg1ZEYjbQlRhHKTvwiPQlWG8ht7VICbHKmlkMrAlBBlV2Wnx1SGipt7CFeRXz2OZOBaoeYjIW7uCULVR8KUEOGM6BYjs/vo3yMj9E3Ibur0kRA3B0I1PLupR/++mhBhs/nbmwxXJ8pYmZS/ekMYaCAPvHQ0rgep4epFITaf1auDlyQhUzJWJpW9XAlpyhj0af/e1kZN9yZdvB9dOQOg2XCk26eBqgAAAABJRU5ErkJggg==);background-repeat:no-repeat;background-position:0 0}div.brtc-window.window div.brtc-window-body.body{border-top:1px solid #dddddd;padding:10px 0px} +.brtc-widget-notification__default-container{position:absolute;top:5%;left:100%;width:500px;display:flex;flex-direction:column;z-index:999999;transform:translateX(-100%)}.brtc-widget-notification__notification-wrapper{padding:10px;height:50px;width:calc(100% - 20px);z-index:999999;color:white;background-color:rgba(0,0,0,0.95)}.brtc-widget-notification__notification-message-wrapper{font-size:12px}.brtc-widget-notification__icon-wrapper{width:26px}.brtc-widget-notification__icon-wrapper>i{font-size:18px;float:left}.brtc-widget-notification__close-wrapper>i{font-size:18px;float:right}.brtc-widget-notification__close-wrapper>i:hover{cursor:pointer} +.bos-color-picker-control{padding:5px 15px}.jui.colorpicker{position:relative;width:223px;box-sizing:content-box}.jui.colorpicker>.color{position:relative;height:145px;overflow:hidden;cursor:pointer}.jui.colorpicker>.color>.saturation{position:relative;width:100%;height:100%}.jui.colorpicker>.color>.saturation>.value{position:relative;width:100%;height:100%}.jui.colorpicker>.color>.saturation>.value>.drag-pointer{position:absolute;width:10px;height:10px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;left:-5px;top:-5px}.jui.colorpicker>.control{position:relative;padding:5px 0 20px 0}.jui.colorpicker>.control>.color,.jui.colorpicker>.control>.empty{position:absolute;left:11px;top:15px;width:30px;height:30px;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.control>.hue{position:relative;padding:8px 12px;margin:10px 0px 0px 42px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.jui.colorpicker>.control>.hue>.container{position:relative;width:157px;height:12px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.control>.opacity,.jui.colorpicker>.control .input{display:none}.jui.colorpicker>.control .drag-bar,.jui.colorpicker>.control .drag-bar2{position:absolute;cursor:pointer;top:50% !important;margin-top:-8px !important;left:-3px;width:16px;height:16px;border:1px solid #000;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.jui.colorpicker>.information{position:relative;height:70px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.information>.input{position:absolute;font-size:10px;height:20px;bottom:20px;padding:0 0 0 2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.jui.colorpicker>.information>.input:nth-child(1){width:93px;left:10px}.jui.colorpicker>.information>.input:nth-child(2){width:30px;right:74px}.jui.colorpicker>.information>.input:nth-child(3){width:30px;right:42px}.jui.colorpicker>.information>.input:nth-child(4){width:30px;right:10px}.jui.colorpicker>.information>.title{position:absolute;font-size:11px;top:15px}.jui.colorpicker>.information>.title:nth-child(5){left:10px}.jui.colorpicker>.information>.title:nth-child(6){left:123px}.jui.colorpicker>.information>.title:nth-child(7){left:155px}.jui.colorpicker>.information>.title:nth-child(8){left:187px}.colorpicker{background-color:#fff}.colorpicker .color{-webkit-border-top-right-radius:5px;-moz-border-radius-topright:5px;border-top-right-radius:5px;-webkit-border-top-left-radius:5px;-moz-border-radius-topleft:5px;border-top-left-radius:5px}.colorpicker .color>.saturation{background-color:rgba(204,154,129,0);background-image:-moz-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-webkit-gradient(linear, 0 0, 100% 0, from(#fff), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:-o-linear-gradient(left, #fff, rgba(204,154,129,0));background-image:linear-gradient(to right, #fff, rgba(204,154,129,0));background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#00cc9a81', GradientType=1)}.colorpicker .color>.saturation>.value{background-image:-webkit-gradient(linear, 0 100%, 0 0, from(#000), to(rgba(204,154,129,0)));background-image:-webkit-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-moz-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-o-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:-ms-linear-gradient(bottom, #000, rgba(204,154,129,0));background-image:linear-gradient(to top, #000, rgba(204,154,129,0))}.colorpicker .color>.saturation>.value>.drag-pointer{border:1px solid #fff;-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);-moz-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px 0 rgba(0,0,0,0.05)}.colorpicker .control>.hue>.container{background:-moz-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-ms-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-o-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:-webkit-gradient(linear, left top, right top, from(red), color-stop(0.17, #ff0), color-stop(0.33, lime), color-stop(0.5, cyan), color-stop(0.67, blue), color-stop(0.83, #f0f), to(red));background:-webkit-linear-gradient(left, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%);background:linear-gradient(to right, red 0%, #ff0 17%, lime 33%, cyan 50%, blue 67%, #f0f 83%, red 100%)}.colorpicker .control>.input{color:#333}.colorpicker .control>.empty{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAJElEQVQYV2NctWrVfwYkEBYWxojMZ6SDAmT7QGx0K1EcRBsFAADeG/3M/HteAAAAAElFTkSuQmCC") repeat}.colorpicker .control .drag-bar,.colorpicker .control .drag-bar2{border:1px solid rgba(0,0,0,0.1);-webkit-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);-moz-box-shadow:0 0 2px 0 rgba(0,0,0,0.05);box-shadow:0 0 2px 0 rgba(0,0,0,0.05);background-color:#FFFFFF}.colorpicker .information{border-top:1px solid #e8e8e8}.colorpicker .information>.title{color:#a3a3a3}.colorpicker .information>.input{color:#333} +div.brtc-layout-splitter-container{position:relative;width:100%;height:100%}div.brtc-layout-splitter-container div.ui-splitter-vertical,div.brtc-layout-splitter-container div.ui-splitter-horizontal{z-index:1249} +.brtc-widget{font-family:'NotoSansCJKkr', Arial, Helvetica, sans-serif;font-size:1em}.brtc-display-flex{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.brtc-display-flex-center{display:flex;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;justify-content:center;align-items:center;height:100%}.brtc-flex-direction-column{flex-direction:column}.brtc-flex-direction-row{flex-direction:row}.bo-control-container-expander{background-color:white}.dropdown.jui{display:block;top:0;left:0;position:absolute}.brtc-widget-tree{padding:5px;background-color:white;border:1px solid black;overflow:hidden}.brtc-widget-tree ul{margin-block-start:0;margin-block-end:0;padding-inline-start:16px}.brtc-widget-tree__item--hidden{display:none}.brtc-widget-tree__item-wrapper{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block}.brtc-widget-tree__item-wrapper:hover{cursor:pointer;background-color:#e5e5e5}.brtc-widget-tree__item-wrapper--selected{background-color:#dee9ef;border:1px solid #ccc}.brtc-widget-tree__item-wrapper--selected:hover{background-color:#dee9ef}.brtc-widget-tree__empty{float:left;width:12px}.brtc-widget-tree__arrow{float:left;width:12px}.brtc-widget-tree__arrow:hover{cursor:pointer} diff --git a/va-server/visual-analytics/public/css/va/brightics-va.css b/va-server/visual-analytics/public/css/va/brightics-va.css index 5ba30c245..df8fb3a89 100644 --- a/va-server/visual-analytics/public/css/va/brightics-va.css +++ b/va-server/visual-analytics/public/css/va/brightics-va.css @@ -1,4 +1,4 @@ -/* Brightics VA Build 191105 */ +/* Brightics VA Build 200629 */ * { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; @@ -15593,6 +15593,7 @@ div.brtc-va-refine-step-validation-error { .brtc-va-editors-sheet-fnunitviewer { background-color: #f4f6f8; + display: flex; } .brtc-va-editors-sheet-fnunitviewer .brtc-va-progress > div { @@ -19483,24 +19484,28 @@ div.brtc-va-refine-step-validation-error { } .brtc-style-views-palette-fnunit { - font-family: Arial, helvetica, sans-serif; - font-size: 11px; + font-family: 'Noto Sans KR', helvetica, sans-serif; + font-size: 10.5px; position: relative; z-index: 5100; display: flex !important; float: left; box-sizing: border-box; width: 130px; - height: 32px; - margin: 0 3px 3px 0; + height: 38px; + margin: 0 3px 4px 0; cursor: move; color: #667185; border: 1px solid #dcdcdc; - border-radius: 16px; + border-radius: 18px; background: #fff; align-items: center; } +.brtc-va-dialogs-selectfnunit .brtc-style-views-palette-fnunit { + width: 146px; +} + .brtc-va-editors-sheet-panels-basepanel-contents-area .brtc-va-views-palette-fnunit { z-index: 0; } @@ -19524,9 +19529,9 @@ div.brtc-va-refine-step-validation-error { display: -webkit-box; overflow: hidden; max-width: calc(100% - 45px); - max-height: calc(1em * 1.2 * 2); + max-height: calc(1em * 1.2 * 3); text-overflow: ellipsis; - -webkit-line-clamp: 2; + -webkit-line-clamp: 3; -webkit-box-orient: vertical; } diff --git a/va-server/visual-analytics/public/js/plugins/bcharts/bcharts-adonis-all.js b/va-server/visual-analytics/public/js/plugins/bcharts/bcharts-adonis-all.js index 08a4bc3a3..d2873a04a 100644 --- a/va-server/visual-analytics/public/js/plugins/bcharts/bcharts-adonis-all.js +++ b/va-server/visual-analytics/public/js/plugins/bcharts/bcharts-adonis-all.js @@ -60,7 +60,7 @@ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 559); +/******/ return __webpack_require__(__webpack_require__.s = 581); /******/ }) /************************************************************************/ /******/ ([ @@ -122,8 +122,16 @@ exports.createCenterPositionNumberWidget = createCenterPositionNumberWidget; exports.createToolTipTriggerRadioButtonWidget = createToolTipTriggerRadioButtonWidget; exports.createEdgeTypeSelectorWidget = createEdgeTypeSelectorWidget; exports.createLabelWidget = createLabelWidget; +exports.createColumnWidthsWidget = createColumnWidthsWidget; +exports.createMarkerLabelPositionSelectorWidget = createMarkerLabelPositionSelectorWidget; +exports.createBaseSliderWidget = createBaseSliderWidget; +exports.createSortRadioButtonWidget = createSortRadioButtonWidget; +exports.createSortAxisValueRadioButtonWidget = createSortAxisValueRadioButtonWidget; +exports.createSortLegendValueRadioButtonWidget = createSortLegendValueRadioButtonWidget; +exports.createPieLabelPositionSelectorWidget = createPieLabelPositionSelectorWidget; +exports.createColumnListWidget = createColumnListWidget; -var _widgetIndex = __webpack_require__(564); +var _widgetIndex = __webpack_require__(587); var Widgets = _interopRequireWildcard(_widgetIndex); @@ -314,10 +322,209 @@ function createLabelWidget(parentId, options) { return new Widgets.LabelWidget(parentId, options); } +function createColumnWidthsWidget(parentId, options) { + return new Widgets.ColumnWidthsWidget(parentId, options); +} + +function createMarkerLabelPositionSelectorWidget(parentId, options) { + return new Widgets.MarkerLabelPositionWidget(parentId, options); +} + +function createBaseSliderWidget(parentId, options) { + return new Widgets.BaseSliderWidget(parentId, options); +} + +function createSortRadioButtonWidget(parentId, options) { + return new Widgets.SortRuleRadioButtonWidget(parentId, options); +} + +function createSortAxisValueRadioButtonWidget(parentId, options) { + return new Widgets.SortAxisValueRadioButtonWidget(parentId, options); +} + +function createSortLegendValueRadioButtonWidget(parentId, options) { + return new Widgets.SortLegendValueRadioButtonWidget(parentId, options); +} + +function createPieLabelPositionSelectorWidget(parentId, options) { + return new Widgets.PieLabelPositionWidget(parentId, options); +} + +function createColumnListWidget(parentId, options) { + return new Widgets.ColumnListWidget(parentId, options); +} + /***/ }), /* 4 */, -/* 5 */, -/* 6 */ +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _widgetFactory = __webpack_require__(3); + +var WidgetFactory = _interopRequireWildcard(_widgetFactory); + +var _controlContainerPreview = __webpack_require__(126); + +var ControlContainerPreview = _interopRequireWildcard(_controlContainerPreview); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +/** + * Created by mk90.kim on 2017-05-10. + */ + +var ChartWidget = Brightics.Chart.Widget; + + +function BaseControl(parentId, options, headerKey) { + if (headerKey) { + this.headerKey = headerKey; + } + + ChartWidget.call(this, parentId, options); + this.renderProblem(); + this.renderWarning(); +} + +BaseControl.prototype = Object.create(ChartWidget.prototype); +BaseControl.prototype.constructor = BaseControl; + +BaseControl.prototype._init = function () { + ChartWidget.prototype._init.call(this); + this._widgetList = []; +}; + +BaseControl.prototype._createContents = function ($parent) { + if (this.$controlMain) { + this.destroy(); + } + this.$controlMain = $('
'); + $parent.append(this.$controlMain); +}; + +/** + var headerOption = { + label: 'View Range', + showBtn: { + defaultVal: false, + clickfunc: function () { + console.log('show btn clicked'); + } + }, + showBtn: { + clickfunc: function () { + console.log('show btn clicked'); + } + } +}; + */ +BaseControl.prototype.createComponentHeader = function (headerOption) { + var _this = this; + + var $controlHeader = $('
'); + + this.$controlMain.append($controlHeader); + + if (!headerOption) { + return; + } + if (headerOption.additionalType) { + $controlHeader.attr('type', headerOption.additionalType); + } + + if (headerOption.label) { + var $controlHeaderLabel = $('
'); + $controlHeader.append($controlHeaderLabel); + $controlHeaderLabel.text(headerOption.label); + } + + if (headerOption.showBtn) { + this.headerShowBtn = WidgetFactory.createShowButtonWidget($controlHeader, headerOption.showBtn); + } + + if (headerOption.addIcon) { + if (!headerOption.label && !headerOption.showBtn) { + $controlHeader.removeClass('bos-flex-space-between').addClass('bos-flex-center'); + } + var $panelHeaderAddBtn = $('
'); + $controlHeader.append($panelHeaderAddBtn); + if (typeof headerOption.addIcon.clickfunc === 'function') { + $panelHeaderAddBtn.click(headerOption.addIcon.clickfunc); + } else { + console.error('Header [' + headerOption.label + '] add button: click event function is not existed.'); + } + } else if (headerOption.addBtn) { + if (!headerOption.label && !headerOption.showBtn) { + $controlHeader.removeClass('bos-flex-space-between').addClass('bos-flex-left'); + } + var panelHeaderAddBtn = $(''); + $controlHeader.append(panelHeaderAddBtn); + if (typeof headerOption.addBtn.clickfunc === 'function') { + panelHeaderAddBtn.click(headerOption.addBtn.clickfunc); + } else { + console.error('Header [' + headerOption.label + '] add button: click event function is not existed.'); + } + } +}; + +BaseControl.prototype.createComponentContents = function () { + this.$controlContents = $('
'); + this.$controlMain.append(this.$controlContents); +}; + +BaseControl.setTemplate = function (template, refData) { + var copiedData = $.extend(true, {}, refData); + $.extend(true, refData, template, copiedData); +}; + +BaseControl.prototype.setComponentShow = function () { + if (this.headerShowBtn && !this.headerShowBtn.getValue()) { + this.toggleDisableComponent(false); + } +}; + +BaseControl.prototype.toggleDisableComponent = function (checkedVal) { + this._widgetList.forEach(function (widget) { + widget.toggleDisable(!checkedVal); + }); +}; + +BaseControl.prototype.render = function () {}; + +BaseControl.prototype.destroy = function () { + this._widgetList.forEach(function (widget) { + widget.destroy(); + }); + this.$controlMain.remove(); +}; + +BaseControl.prototype.close = function () { + this._widgetList.forEach(function (widget) { + widget.close(); + }); +}; + +BaseControl.prototype.renderProblem = function () {}; + +BaseControl.prototype.renderWarning = function (warningList) {}; + +BaseControl.prototype.setExpanderPreview = function () { + var $previewTarget = this.$parent.closest('.brtc-expander-wrapper').find('.bo-control-container-header-preview'); + this.options.expanderCallBack(ControlContainerPreview[this.headerKey].call(this), $previewTarget); +}; + +exports.default = BaseControl; + +/***/ }), +/* 6 */, +/* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -327,11 +534,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _controlContainerPreview = __webpack_require__(119); +var _controlContainerPreview = __webpack_require__(126); var ControlContainerPreview = _interopRequireWildcard(_controlContainerPreview); -var _controlContainerFactory = __webpack_require__(272); +var _controlContainerFactory = __webpack_require__(279); var ControlContainerFactory = _interopRequireWildcard(_controlContainerFactory); @@ -521,9 +728,20 @@ ChartOptionBase.prototype._configureSwitchConf = function (switchSetting) { exports.default = ChartOptionBase; /***/ }), -/* 7 */, /* 8 */, -/* 9 */ +/* 9 */, +/* 10 */, +/* 11 */, +/* 12 */, +/* 13 */, +/* 14 */, +/* 15 */, +/* 16 */, +/* 17 */, +/* 18 */, +/* 19 */, +/* 20 */, +/* 21 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -532,242 +750,79 @@ exports.default = ChartOptionBase; Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Source: chart-option-const + * Created by SDS on 2018-05-29 + */ -var _widgetFactory = __webpack_require__(3); +var ChartOptionConst = { + Theme: 'office', + EXTRA_AXIS_TYPE: 'SCHEMA', + EXTRA_AXIS_TYPE_LIST: [{ + name: '(Column Names)', + type: 'SCHEMA', + value: 'byColumnNames' + }, { + name: '(Row Index)', + type: 'SCHEMA', + value: 'byRowIndex' + }], + AggregationMap: { + NONE: { label: "(None)", value: "none" }, + SUM: { label: "Sum", value: "sum" }, + AVG: { label: "Average", value: "average" }, + COUNT: { label: "Count", value: "count" }, + UNIQUE_COUNT: { label: "Unique Count", value: "unique_count" }, + MIN: { label: "Min", value: "min" }, + MAX: { label: "Max", value: "max" } + }, + LineStyleList: [{ label: 'Solid', value: 'solid' }, { label: 'Dashed', value: 'dashed' }, { label: 'Dotted', value: 'dotted' }, { label: 'Double', value: 'double' }, + // {label: 'Groove', value: 'groove'}, + // {label: 'Inset', value: 'inset'}, + // {label: 'Outset', value: 'outset'}, + // {label: 'Ridge', value: 'ridge'}, + { label: 'None', value: 'none' }], + OpacityList: [{ label: '0%', value: 0 }, { label: '10%', value: 0.1 }, { label: '20%', value: 0.2 }, { label: '30%', value: 0.3 }, { label: '40%', value: 0.4 }, { label: '50%', value: 0.5 }, { label: '60%', value: 0.6 }, { label: '70%', value: 0.7 }, { label: '80%', value: 0.8 }, { label: '90%', value: 0.9 }, { label: '100%', value: 1 }], + FontList: [{ label: 'Arial', value: 'Arial' }, { label: 'Arial Black', value: 'Arial Black' }, { label: 'Comic Sans MS', value: 'Comic Sans MS' }, { label: 'Courier New', value: 'Courier New' }, { label: 'Impact', value: 'Impact' }, { label: 'Tahoma', value: 'Tahoma' }, { label: 'Times New Roman', value: 'Times New Roman' }, { label: 'Verdana', value: 'Verdana' }], + FormatList: [{ label: 'Numbers', value: 'number' }, + // {label: 'Time', value: 'time'}, + { label: 'Exponential', value: 'exponential' }], + // @deprecated + ColorPaletteList: { + Brightics: ['#FFC14A', '#20BAC2', '#6952DB', '#1E5FCB', '#0EBB59', '#D7C7FE', '#FD9C94', '#5C0931', '#8EDDCF', '#166440', '#E6E6E6', '#7394FF', '#8B21A6', '#BDBDBD', '#F56813', '#EBE3FE', '#FECDC9', '#AE8498', '#C6EEE7', '#8BB2A0', '#F2F2F2', '#B9C9FF', '#C590D2', '#DEDEDE', '#FAB489'], + RainBow: ['#FF0000', '#FF9D00', '#EEFF00', '#34B545', '#3E6DC4', '#863DCC'] + }, + edgeStyle: [{ label: 'Arrow', value: 'arrow' }, { label: 'Triangle', value: 'triangle' }, { label: 'Circle', value: 'circle' }, { label: 'Rect', value: 'rect' }, { label: 'None', value: 'none' }], + chartLineStyleList: [{ label: 'Solid', value: 'solid' }, { label: 'Dashed', value: 'dashed' }, { label: 'Dotted', value: 'dotted' }, { label: 'Double', value: 'double' }] +}; -var WidgetFactory = _interopRequireWildcard(_widgetFactory); +exports.default = ChartOptionConst; -var _controlContainerPreview = __webpack_require__(119); +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { -var ControlContainerPreview = _interopRequireWildcard(_controlContainerPreview); +"use strict"; -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +Object.defineProperty(exports, "__esModule", { + value: true +}); /** * Created by mk90.kim on 2017-05-10. */ var ChartWidget = Brightics.Chart.Widget; - -function BaseControl(parentId, options, headerKey) { - if (headerKey) { - this.headerKey = headerKey; - } - +function BaseWidget(parentId, options) { ChartWidget.call(this, parentId, options); - this.renderProblem(); - this.renderWarning(); } -BaseControl.prototype = Object.create(ChartWidget.prototype); -BaseControl.prototype.constructor = BaseControl; +BaseWidget.prototype = Object.create(ChartWidget.prototype); +BaseWidget.prototype.constructor = BaseWidget; -BaseControl.prototype._init = function () { - ChartWidget.prototype._init.call(this); - this._widgetList = []; -}; - -BaseControl.prototype._createContents = function ($parent) { - if (this.$controlMain) { - this.destroy(); - } - this.$controlMain = $('
'); - $parent.append(this.$controlMain); -}; - -/** - var headerOption = { - label: 'View Range', - showBtn: { - defaultVal: false, - clickfunc: function () { - console.log('show btn clicked'); - } - }, - showBtn: { - clickfunc: function () { - console.log('show btn clicked'); - } - } -}; - */ -BaseControl.prototype.createComponentHeader = function (headerOption) { - var _this = this; - - var $controlHeader = $('
'); - - this.$controlMain.append($controlHeader); - - if (!headerOption) { - return; - } - if (headerOption.additionalType) { - $controlHeader.attr('type', headerOption.additionalType); - } - - if (headerOption.label) { - var $controlHeaderLabel = $('
'); - $controlHeader.append($controlHeaderLabel); - $controlHeaderLabel.text(headerOption.label); - } - - if (headerOption.showBtn) { - this.headerShowBtn = WidgetFactory.createShowButtonWidget($controlHeader, headerOption.showBtn); - } - - if (headerOption.addBtn) { - if (!headerOption.label && !headerOption.showBtn) { - $controlHeader.removeClass('bos-flex-space-between').addClass('bos-flex-center'); - } - var $panelHeaderAddBtn = $('
'); - $controlHeader.append($panelHeaderAddBtn); - if (typeof headerOption.addBtn.clickfunc === 'function') { - $panelHeaderAddBtn.click(headerOption.addBtn.clickfunc); - } else { - console.error('Header [' + headerOption.label + '] add button: click event function is not existed.'); - } - } -}; - -BaseControl.prototype.createComponentContents = function () { - this.$controlContents = $('
'); - this.$controlMain.append(this.$controlContents); -}; - -BaseControl.setTemplate = function (template, refData) { - var copiedData = $.extend(true, {}, refData); - $.extend(true, refData, template, copiedData); -}; - -BaseControl.prototype.setComponentShow = function () { - if (this.headerShowBtn && !this.headerShowBtn.getValue()) { - this.toggleDisableComponent(false); - } -}; - -BaseControl.prototype.toggleDisableComponent = function (checkedVal) { - this._widgetList.forEach(function (widget) { - widget.toggleDisable(!checkedVal); - }); -}; - -BaseControl.prototype.render = function () {}; - -BaseControl.prototype.destroy = function () { - this._widgetList.forEach(function (widget) { - widget.destroy(); - }); - this.$controlMain.remove(); -}; - -BaseControl.prototype.close = function () { - this._widgetList.forEach(function (widget) { - widget.close(); - }); -}; - -BaseControl.prototype.renderProblem = function () {}; - -BaseControl.prototype.renderWarning = function (warningList) {}; - -BaseControl.prototype.setExpanderPreview = function () { - var $previewTarget = this.$parent.closest('.bo-control-container-expander').find('.bo-control-container-header-preview'); - this.options.expanderCallBack(ControlContainerPreview[this.headerKey].call(this), $previewTarget); -}; - -exports.default = BaseControl; - -/***/ }), -/* 10 */, -/* 11 */, -/* 12 */, -/* 13 */, -/* 14 */, -/* 15 */, -/* 16 */, -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -/** - * Source: chart-option-const - * Created by SDS on 2018-05-29 - */ - -var ChartOptionConst = { - Theme: 'office', - EXTRA_AXIS_TYPE: 'SCHEMA', - EXTRA_AXIS_TYPE_LIST: [{ - name: '(Column Names)', - type: 'SCHEMA', - value: 'byColumnNames' - }, { - name: '(Row Index)', - type: 'SCHEMA', - value: 'byRowIndex' - }], - AggregationMap: { - NONE: { label: "(None)", value: "none" }, - SUM: { label: "Sum", value: "sum" }, - AVG: { label: "Average", value: "average" }, - COUNT: { label: "Count", value: "count" }, - UNIQUE_COUNT: { label: "Unique Count", value: "unique_count" }, - MIN: { label: "Min", value: "min" }, - MAX: { label: "Max", value: "max" } - }, - LineStyleList: [{ label: 'Solid', value: 'solid' }, { label: 'Dashed', value: 'dashed' }, { label: 'Dotted', value: 'dotted' }, { label: 'None', value: 'none' }], - OpacityList: [{ label: '0%', value: 0 }, { label: '10%', value: 0.1 }, { label: '20%', value: 0.2 }, { label: '30%', value: 0.3 }, { label: '40%', value: 0.4 }, { label: '50%', value: 0.5 }, { label: '60%', value: 0.6 }, { label: '70%', value: 0.7 }, { label: '80%', value: 0.8 }, { label: '90%', value: 0.9 }, { label: '100%', value: 1 }], - FontList: [{ label: 'Arial', value: 'Arial' }, { label: 'Arial Black', value: 'Arial Black' }, { label: 'Comic Sans MS', value: 'Comic Sans MS' }, { label: 'Courier New', value: 'Courier New' }, { label: 'Impact', value: 'Impact' }, { label: 'Tahoma', value: 'Tahoma' }, { label: 'Times New Roman', value: 'Times New Roman' }, { label: 'Verdana', value: 'Verdana' }], - FormatList: [{ label: 'Numbers', value: 'number' }, - // {label: 'Time', value: 'time'}, - { label: 'Exponential', value: 'exponential' }], - // @deprecated - ColorPaletteList: { - Brightics: ['#FD026C', '#4682B8', '#A5D221', '#F5CC0A', '#FE8C01', '#6B9494', '#B97C46', '#84ACD0', '#C2E173', '#F9DD5B', '#FE569D', '#FEB356', '#9CB8B8', '#D0A884', '#2E6072', '#6D8C1E', '#A48806', '#A90148', '#A95E01', '#476363', '#7B532F'], - RainBow: ['#FF0000', '#FF9D00', '#EEFF00', '#34B545', '#3E6DC4', '#863DCC'] - }, - edgeStyle: [{ label: 'Arrow', value: 'arrow' }, { label: 'Triangle', value: 'triangle' }, { label: 'Circle', value: 'circle' }, { label: 'Rect', value: 'rect' }, { label: 'None', value: 'none' }], - chartLineStyleList: [{ label: 'Solid', value: 'solid' }, { label: 'Dashed', value: 'dashed' }, { label: 'Dotted', value: 'dotted' }] -}; - -exports.default = ChartOptionConst; - -/***/ }), -/* 18 */, -/* 19 */, -/* 20 */, -/* 21 */, -/* 22 */, -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -/** - * Created by mk90.kim on 2017-05-10. - */ - -var ChartWidget = Brightics.Chart.Widget; - -function BaseWidget(parentId, options) { - ChartWidget.call(this, parentId, options); -} - -BaseWidget.prototype = Object.create(ChartWidget.prototype); -BaseWidget.prototype.constructor = BaseWidget; - -BaseWidget.prototype._fireEvent = function (eventName, eventParam) { - this.$mainControl.closest('.bo-container').trigger(eventName, eventParam); +BaseWidget.prototype._fireEvent = function (eventName, eventParam) { + this.$mainControl.closest('.bo-container').trigger(eventName, eventParam); }; BaseWidget.prototype._setPreValue = function (preVal) { @@ -794,13 +849,10 @@ BaseWidget.prototype.close = function () {}; exports.default = BaseWidget; /***/ }), +/* 23 */, /* 24 */, /* 25 */, -/* 26 */, -/* 27 */, -/* 28 */, -/* 29 */, -/* 30 */ +/* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -815,7 +867,7 @@ exports.getAllColumnList = getAllColumnList; exports.isEmpty = isEmpty; exports.mergeChartOption = mergeChartOption; -var _chartOptionConst = __webpack_require__(17); +var _chartOptionConst = __webpack_require__(21); var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); @@ -835,9 +887,19 @@ function getColumnInternalType(column, columnList) { return ''; } var internalList = _chartOptionConst2.default.EXTRA_AXIS_TYPE_LIST.concat(columnList); - var foundColumn = internalList.find(function (columnObj) { - return columnObj.name === column.name; - }); + var foundColumn; + if (typeof column === 'string') { + foundColumn = internalList.find(function (columnObj) { + return columnObj.name === column; + }); + } else { + foundColumn = internalList.find(function (columnObj) { + return columnObj.name === column.name; + }); + } + // var foundColumn = internalList.find(function (columnObj) { + // return columnObj.name === column.name; + // }); if (foundColumn) { return foundColumn.internalType || foundColumn.type; } else { @@ -883,9 +945,10 @@ function mergeChartOption(a, b) { } /***/ }), -/* 31 */, -/* 32 */, -/* 33 */ +/* 27 */, +/* 28 */, +/* 29 */, +/* 30 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -895,11 +958,11 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _baseWidget = __webpack_require__(23); +var _baseWidget = __webpack_require__(22); var _baseWidget2 = _interopRequireDefault(_baseWidget); -var _chartOptionConst = __webpack_require__(17); +var _chartOptionConst = __webpack_require__(21); var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); @@ -915,6 +978,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de * onChanged: function(){] * } */ +/* global brtcWidget */ /** * Created by mk90.kim on 2017-05-10. */ @@ -937,87 +1001,65 @@ BaseSelectorWidget.prototype._createContents = function ($parent) { BaseSelectorWidget.prototype._createIconArea = function () {}; BaseSelectorWidget.prototype._createSelectorArea = function ($parent) { - this.$selectorControl = $('
'); //bos-border-only-bottom - $parent.append(this.$selectorControl); var source = this._createListSource(); var option = { - width: this.options.width || '100%', - height: this.options.height || '30px', - scrollBarSize: 8, + width: this.options.width, + height: this.options.height, source: source, - placeHolder: this.options.placeHolder || ' ', - animationType: 'none', - enableBrowserBoundsDetection: true, - autoDropDownHeight: true, - theme: _chartOptionConst2.default.Theme, - disabled: this.options.disabled || false + type: this.options.type, + value: this.options.value + // onChange: this.options.onChanged }; - var selectorOption = this._createSelectorOption(); - $.extend(true, option, selectorOption); - this.$selectorControl.jqxDropDownList(option); + $.extend(true, option, this._createSelectorOption()); - this._bindCallbackFunc(); + this.selectorControl = brtcWidget.dropDownList($parent, option); + this.selectorControl.subscribe('change', this.options.onChanged); }; BaseSelectorWidget.prototype._createListSource = function () { return []; }; -BaseSelectorWidget.prototype._createSelectorOption = function () { - if (this.options.type && this.options.type === 'number') { - this.options.value = Number(this.options.value); - } - var selectedIdx = this._getItemIndexInSource(this.options.value); - return { selectedIndex: selectedIdx }; -}; - BaseSelectorWidget.prototype._getItemIndexInSource = function (item) { return $.inArray(item, this._createListSource()); }; -BaseSelectorWidget.prototype._bindCallbackFunc = function () { - if (typeof this.options.onChanged === 'function') { - var _this = this; - var callbackFunc = this.options.onChanged; - if (this.options.type && this.options.type === 'number') { - this.$selectorControl.on('change', function (event) { - callbackFunc.bind(_this)(Number(event.args.item.value)); - }); - } else { - this.$selectorControl.on('change', function (event) { - callbackFunc.bind(_this)(event.args.item.value); - }); - } - } +BaseSelectorWidget.prototype._bindRenderer = function () { + var selectorOption = this._createSelectorOption(); + this.selectorControl.setOption(selectorOption); +}; + +BaseSelectorWidget.prototype._createSelectorOption = function () { + return {}; }; BaseSelectorWidget.prototype.clearSelection = function () { - this.$selectorControl.jqxDropDownList('clearSelection'); + this.selectorControl.setOption('clearSelection'); }; BaseSelectorWidget.prototype.toggleDisable = function (disabled) { - this.$selectorControl.jqxDropDownList({ disabled: disabled }); + this.selectorControl.setOption({ disabled: disabled }); }; BaseSelectorWidget.prototype.render = function (changedValue) { - var selectedIdx = this._getItemIndexInSource(changedValue); - this.$selectorControl.jqxDropDownList({ selectedIndex: selectedIdx }); + this.selectorControl.setOption({ value: changedValue }); }; BaseSelectorWidget.prototype.close = function () { - this.$selectorControl.jqxDropDownList('close'); + this.selectorControl.execute('close'); }; BaseSelectorWidget.prototype.destroy = function () { - this.$selectorControl.jqxDropDownList('destroy'); + this.selectorControl.execute('destroy'); }; exports.default = BaseSelectorWidget; /***/ }), -/* 34 */, -/* 35 */, -/* 36 */ +/* 31 */, +/* 32 */, +/* 33 */, +/* 34 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1027,7 +1069,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _baseWidget = __webpack_require__(23); +var _baseWidget = __webpack_require__(22); var _baseWidget2 = _interopRequireDefault(_baseWidget); @@ -1087,12 +1129,7 @@ BaseComplexWidget.prototype.destroy = function () { exports.default = BaseComplexWidget; /***/ }), -/* 37 */, -/* 38 */, -/* 39 */, -/* 40 */, -/* 41 */, -/* 42 */ +/* 35 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1126,13 +1163,16 @@ Dialog.prototype._init = function () { }; Dialog.prototype._createContents = function () { - this.$mainControl = $('' + '
' + '
' + '
' + '
' + '
' + '
' + '
'); + var _this = this; + this.$mainControl = $('' + '
' + '
' + '
' + '
' + '
' + '
' + '
'); + this.$parent.append(this.$mainControl); this._setDialogsHeader(); var defaults = this._getDefaultWindowOption(); var opts = $.extend(defaults, this.options.window); - this.$mainControl.jqxWindow(opts); + + this.controlWindow = brtcWidget.window(this.$mainControl, opts); this._createDialogsBody(); }; @@ -1152,20 +1192,25 @@ Dialog.prototype._getTitle = function () { Dialog.prototype._createDialogsBody = function () { this._setFocus(); this._createCloseHandler(); - this.$mainControl.on('close', this._destroy.bind(this)); + + this.controlWindow.subscribe('close', this._destroyWithOutHideEvent.bind(this)); }; Dialog.prototype._getDefaultWindowOption = function () { var _this = this; + var width = 600; + var height = 500; + var position = _this._configurePosition(width, height, _this.options.windowPosition); + return { - theme: ChartOptionConst.Theme, - width: '600px', - height: '500px', - maxWidth: '600px', - maxHeight: '500px', - resizable: false, + modal: false, + width: width, + height: height, + left: position ? position.left : 'auto', + top: position ? position.top : 'auto', + move: true, + resize: false, initContent: function initContent() { - _this._configurePosition(_this.options.windowPosition); _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); } }; @@ -1175,13 +1220,13 @@ Dialog.prototype._createCloseHandler = function () { var _this = this; this._closeHandler = function (event) { if (!event || _this.$mainControl.has(event.target).length === 0) { - _this.$mainControl.jqxWindow('close'); + _this.controlWindow.execute('close'); } }; $(window).on('mousedown', this._closeHandler); }; -Dialog.prototype._configurePosition = function (position, isSwitch) { +Dialog.prototype._configurePosition = function (windowWidth, windowHeight, position, isSwitch) { position = position || this.options.windowPosition; if (!position) return; var $window = this.$mainControl; @@ -1189,12 +1234,13 @@ Dialog.prototype._configurePosition = function (position, isSwitch) { anchorWidth = this.$parent.width(), anchorHeight = this.$parent.height(), windowOffset = this.$mainControl.offset(), - windowWidth = this.$mainControl.width(), - windowHeight = this.$mainControl.height(), windowLeft, windowTop, isChanged = false; + if (!windowWidth) windowWidth = $window.width(); + if (!windowHeight) windowHeight = $window.height(); + switch (position) { case 'left': windowLeft = anchorOffset.left - windowWidth - 3; @@ -1228,21 +1274,22 @@ Dialog.prototype._configurePosition = function (position, isSwitch) { if (windowTop < 0) windowTop = 5, isChanged = true; if (isChanged === true && this.options.switchPosition && isSwitch !== true) { - this._configurePosition(this.options.switchPosition, true); + return this._configurePosition(windowWidth, windowHeight, this.options.switchPosition, true); } else { $window.css('left', windowLeft); $window.css('top', windowTop); + return { 'left': windowLeft, 'top': windowTop }; } }; Dialog.prototype._setPosition = function (posititon) {}; Dialog.prototype._setFocus = function () { - this.$mainControl.jqxWindow('focus'); + this.controlWindow.execute('focus'); }; Dialog.prototype._close = function () { - this.$mainControl.jqxWindow('close'); + this.controlWindow.execute('close'); }; Dialog.prototype._destroy = function () { @@ -1250,8 +1297,17 @@ Dialog.prototype._destroy = function () { this.options.close(this._getDialogResult()); } - $(window).off('mousedown', this._closeHandler); - this.$mainControl.jqxWindow('destroy'); + $(window).off('mousedown'); + this.controlWindow.execute('hide'); + this.$mainControl.remove(); +}; + +Dialog.prototype._destroyWithOutHideEvent = function () { + if (typeof this.options.close === 'function') { + this.options.close(this._getDialogResult()); + } + + $(window).off('mousedown'); this.$mainControl.remove(); }; @@ -1266,22 +1322,150 @@ Dialog.prototype._createDialogContentsArea = function ($parent) {}; exports.default = Dialog; /***/ }), -/* 43 */, -/* 44 */, -/* 45 */, -/* 46 */, -/* 47 */, -/* 48 */, -/* 49 */, -/* 50 */, -/* 51 */, -/* 52 */, -/* 53 */, -/* 54 */, -/* 55 */, -/* 56 */, -/* 57 */, -/* 58 */ +/* 36 */, +/* 37 */, +/* 38 */, +/* 39 */, +/* 40 */, +/* 41 */, +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _baseWidget = __webpack_require__(22); + +var _baseWidget2 = _interopRequireDefault(_baseWidget); + +var _chartOptionConst = __webpack_require__(21); + +var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + +var _chartOptionUtil = __webpack_require__(26); + +var ChartOptionUtil = _interopRequireWildcard(_chartOptionUtil); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * options = { + * width: % or px default 100%, + * height:% or px default 30px, + * value: '' + * onChanged: function(){] + * } + * @param parentId + * @param options + * @constructor + */ +function BaseRadioButtonGroupWidget(parentId, options) { + _baseWidget2.default.call(this, parentId, options); +} /* global brtcWidget */ +/** + * Created by mk90.kim on 2017-05-10. + */ + +BaseRadioButtonGroupWidget.prototype = Object.create(_baseWidget2.default.prototype); +BaseRadioButtonGroupWidget.prototype.constructor = BaseRadioButtonGroupWidget; + +BaseRadioButtonGroupWidget.prototype._init = function () { + _baseWidget2.default.prototype._init.call(this); + this._buttonList = []; + this._setRadioButtonList(); + this.$buttonObjList = []; +}; + +BaseRadioButtonGroupWidget.prototype._setRadioButtonList = function () { + //implement +}; + +BaseRadioButtonGroupWidget.prototype._createContents = function ($parent) { + this._isRendered = false; + this.$radioButtonControl = $('' + '
' + ''); + $parent.append(this.$radioButtonControl); + this._createRadioBtnGrpUnits(); + this._renderButtonSelected(this.options.value); + this._setPreValue(this.options.value); + this._isRendered = true; +}; + +BaseRadioButtonGroupWidget.prototype._renderButtonSelected = function (selectedValue) { + var selectedBtn = this.$buttonObjList.find(function (btn) { + return btn.getOption('value') === selectedValue; + }); + if (selectedBtn) { + selectedBtn.setOption({ check: true }); + } else { + this.$buttonObjList.forEach(function ($el) { + return $el.setOption({ check: false }); + }); + } +}; + +BaseRadioButtonGroupWidget.prototype._createRadioBtnGrpUnits = function () { + var btnSetList = this._buttonList; + var _this = this; + var clickFunc = function clickFunc(btnId) { + _this.$buttonObjList.forEach(function (btn) { + var clickedBtn = btn.getOption('value'); + if (clickedBtn !== btnId) { + btn.execute('uncheck'); + } else { + btn.execute('check'); + } + }); + if (ChartOptionUtil.isEmpty(_this.options.onChanged) || _this._isRendered === false) return; + if (!_this._isChanged(btnId)) return; + _this.options.onChanged(btnId); + }; + + for (var btnSetIdx = 0; btnSetIdx < btnSetList.length; btnSetIdx++) { + var button = brtcWidget.toggleButton(this.$radioButtonControl, { + height: this.options.height || '30px', + label: btnSetList[btnSetIdx].label, + imageClass: btnSetList[btnSetIdx].imageClass, + value: btnSetList[btnSetIdx].value + }); + + button.subscribe('click', clickFunc); + this.$buttonObjList.push(button); + } +}; + +BaseRadioButtonGroupWidget.prototype.toggleDisable = function (disabledVal) { + this.$buttonObjList.forEach(function ($btn) { + $btn.setOption({ disabled: disabledVal }); + }); +}; + +BaseRadioButtonGroupWidget.prototype.unselect = function () { + this.options.value = null; + this._setPreValue(null); + this.render(null); +}; + +BaseRadioButtonGroupWidget.prototype.render = function (changedValue) { + this._renderButtonSelected(changedValue); +}; + +exports.default = BaseRadioButtonGroupWidget; + +/***/ }), +/* 43 */, +/* 44 */, +/* 45 */, +/* 46 */, +/* 47 */, +/* 48 */, +/* 49 */, +/* 50 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1291,15 +1475,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _baseWidget = __webpack_require__(23); +var _baseWidget = __webpack_require__(22); var _baseWidget2 = _interopRequireDefault(_baseWidget); -var _chartOptionUtil = __webpack_require__(30); +var _chartOptionUtil = __webpack_require__(26); var ChartOptionUtil = _interopRequireWildcard(_chartOptionUtil); -var _columnSelectorDialog = __webpack_require__(120); +var _columnSelectorDialog = __webpack_require__(127); var _columnSelectorDialog2 = _interopRequireDefault(_columnSelectorDialog); @@ -1347,7 +1531,7 @@ ColumnSelectorWidget.prototype._init = function () { }; ColumnSelectorWidget.prototype._createContents = function ($parent) { - this.$mainControl = $('' + '
' + '
' + '
' + '
'); + this.$mainControl = $('' + '
' + '
' + '
' + '
'); $parent.append(this.$mainControl); if (this.options.hideLabel) { @@ -1470,9 +1654,9 @@ ColumnSelectorWidget.prototype._createNewUnitWrapper = function () { ColumnSelectorWidget.prototype._createNewColumnUnit = function () { if (this.hasType) { - return $('
' + '
' + '
' + this.defaultMsg + '
' + '
' + '
'); + return $('
' + '
' + '
' + this.defaultMsg + '
' + '
' + '
'); } else { - return $('' + '
' + '
' + this.defaultMsg + '
' + '
'); + return $('' + '
' + '
' + this.defaultMsg + '
' + '
'); } }; @@ -1511,8 +1695,10 @@ ColumnSelectorWidget.prototype._renderColumnControlUnit = function (index, input $unit.find('.bo-widget-column-unit-type').text(columnInternalType); } - $unit.find('.bo-widget-column-unit-label').text(this._getColumnLabel(targetColumn) || ''); - $unit.find('.bo-widget-column-unit-label').attr('title', this._getColumnLabel(targetColumn)); + var columnLabel = this._getColumnLabel(targetColumn) || ''; + $unit.find('.bo-widget-column-unit-label').css({ width: this.defaultMsg == columnLabel ? '100%' : '60%' }); + $unit.find('.bo-widget-column-unit-label').text(columnLabel); + $unit.find('.bo-widget-column-unit-label').attr('title', columnLabel); }; ColumnSelectorWidget.prototype._getColumnLabel = function (selectedColumn) { @@ -1588,7 +1774,7 @@ ColumnSelectorWidget.prototype.close = function () { exports.default = ColumnSelectorWidget; /***/ }), -/* 59 */ +/* 51 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1598,143 +1784,106 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _baseWidget = __webpack_require__(23); +var _dialog = __webpack_require__(35); -var _baseWidget2 = _interopRequireDefault(_baseWidget); +var _dialog2 = _interopRequireDefault(_dialog); -var _chartOptionConst = __webpack_require__(17); +var _chartOptionConst = __webpack_require__(21); var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); -var _chartOptionUtil = __webpack_require__(30); - -var ChartOptionUtil = _interopRequireWildcard(_chartOptionUtil); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var ChartWidget = Brightics.Chart.Widget; /** + * Created by sds on 2018-04-09. + */ + /** - * options = { - * width: % or px default 100%, - * height:% or px default 30px, - * value: '' + * options = { + * value: '', + * chartTypeList: [], * onChanged: function(){] - * } - * @param parentId - * @param options - * @constructor + * } + * */ -function BaseRadioButtonGroupWidget(parentId, options) { - _baseWidget2.default.call(this, parentId, options); -} /** - * Created by mk90.kim on 2017-05-10. - */ - -BaseRadioButtonGroupWidget.prototype = Object.create(_baseWidget2.default.prototype); -BaseRadioButtonGroupWidget.prototype.constructor = BaseRadioButtonGroupWidget; - -BaseRadioButtonGroupWidget.prototype._init = function () { - _baseWidget2.default.prototype._init.call(this); - this._buttonList = []; - this._setRadioButtonList(); - this.$buttonObjList = []; -}; -BaseRadioButtonGroupWidget.prototype._setRadioButtonList = function () { - //implement -}; +function FormatHelperDialog(parentId, options) { + _dialog2.default.call(this, parentId, options); +} -BaseRadioButtonGroupWidget.prototype._createContents = function ($parent) { - this._isRendered = false; - this.$radioButtonControl = $('' + '
' + ''); - $parent.append(this.$radioButtonControl); - this._createRadioBtnGrpUnits(); - this._renderButtonSelected(this.options.value); - this._setPreValue(this.options.value); - this._isRendered = true; -}; +FormatHelperDialog.prototype = Object.create(_dialog2.default.prototype); +FormatHelperDialog.prototype.constructor = FormatHelperDialog; -BaseRadioButtonGroupWidget.prototype._renderButtonSelected = function (selectedValue) { - var selectedBtn = this.$buttonObjList.find(function (btn) { - return btn.attr('id') === selectedValue; - }); - if (selectedBtn) { - selectedBtn.jqxToggleButton('check'); - } else { - this.$buttonObjList.forEach(function ($el) { - return $el.jqxToggleButton('unCheck'); - }); - } +FormatHelperDialog.prototype._init = function () { + ChartWidget.prototype._init.call(this); + this.options.showHeader = false; }; -BaseRadioButtonGroupWidget.prototype._createRadioBtnGrpUnits = function () { - var btnSetList = this._buttonList; - - for (var btnSetIdx = 0; btnSetIdx < btnSetList.length; btnSetIdx++) { - var $radioButton = $('
'); - this.$radioButtonControl.append($radioButton); +// FormatHelperDialog.prototype._getTitle = function () { +// return 'Format Example'; +// }; - if (btnSetList[btnSetIdx].imageClass) { - $radioButton.addClass(btnSetList[btnSetIdx].imageClass); - } +FormatHelperDialog.prototype._getDefaultWindowOption = function () { + var _this = this; + var width = 170; + var height = 160; + var position = _this._configurePosition(width, height, _this.options.windowPosition); - if (btnSetList[btnSetIdx].label) { - $radioButton.attr('value', btnSetList[btnSetIdx].label); + return { + modal: false, + width: width, + height: height, + left: position ? position.left : 'auto', + top: position ? position.top : 'auto', + move: true, + resize: false, + initContent: function initContent() { + _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); } + }; +}; - $radioButton.attr('id', btnSetList[btnSetIdx].value); - - $radioButton.jqxToggleButton({ - theme: _chartOptionConst2.default.Theme, - height: this.options.height || '30px' - }); +FormatHelperDialog.prototype._createDialogContentsArea = function ($parent) { + var $exampleText = $('
' + '
All Types
' + '
${value}: 13.25 > $13.25
' + '
Number Type
' + '
' + ' {0,0}: 145000 > 145,000
' + ' {0.00}: 130.4721 > 130.47
' + '
' + '
'); - this.$buttonObjList.push($radioButton); - this._createClickEvent($radioButton); - } + $exampleText.css('line-height', '1.6'); + $parent.append($exampleText); }; -BaseRadioButtonGroupWidget.prototype._createClickEvent = function ($radioButton) { - var _this = this; - $radioButton.on('click', function (event) { - var selectedBtnId = $(event.target).attr('id'); - //set another buttons disabled. - _this.$buttonObjList.forEach(function (btn) { - if (btn.attr('id') !== selectedBtnId) { - btn.jqxToggleButton('unCheck'); - } else { - btn.jqxToggleButton('check'); - } - }); - - //call onChanged function - if (ChartOptionUtil.isEmpty(_this.options.onChanged) || _this._isRendered === false) return; - if (!_this._isChanged(selectedBtnId)) return; - _this.options.onChanged(selectedBtnId); - }); +FormatHelperDialog.prototype._destroy = function () { + $(window).off('mousedown', this._closeHandler); + this.controlWindow.execute('hide'); + this.$mainControl.remove(); }; -BaseRadioButtonGroupWidget.prototype.toggleDisable = function (disabledVal) { - this.$buttonObjList.forEach(function ($btn) { - $btn.jqxToggleButton({ disabled: disabledVal }); - $btn.addClass('jqx-fill-state-disabled jqx-fill-state-disabled-office'); - }); +FormatHelperDialog.prototype._destroyWithOutHideEvent = function () { + $(window).off('mousedown', this._closeHandler); + this.$mainControl.remove(); }; -BaseRadioButtonGroupWidget.prototype.unselect = function () { - this.options.value = null; - this._setPreValue(null); - this.render(null); +FormatHelperDialog.prototype._getItemList = function () { + if (this.options.itemList) { + return this.options.itemList; + } else { + return []; + } }; -BaseRadioButtonGroupWidget.prototype.render = function (changedValue) { - this._renderButtonSelected(changedValue); +FormatHelperDialog.prototype._getDialogResult = function () { + return this.$itemListContainer.find('.selected .bo-widget-item-selector-item').attr('item-value'); }; -exports.default = BaseRadioButtonGroupWidget; +exports.default = FormatHelperDialog; /***/ }), +/* 52 */, +/* 53 */, +/* 54 */, +/* 55 */, +/* 56 */, +/* 57 */, +/* 58 */, +/* 59 */, /* 60 */, /* 61 */, /* 62 */, @@ -1750,7 +1899,8 @@ exports.default = BaseRadioButtonGroupWidget; /* 72 */, /* 73 */, /* 74 */, -/* 75 */ +/* 75 */, +/* 76 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1759,91 +1909,37 @@ exports.default = BaseRadioButtonGroupWidget; Object.defineProperty(exports, "__esModule", { value: true }); +exports.createFilter = createFilter; +exports.getFilterTypes = getFilterTypes; -var _dialog = __webpack_require__(42); +var _filterControlBase = __webpack_require__(77); -var _dialog2 = _interopRequireDefault(_dialog); +var _filterControlBase2 = _interopRequireDefault(_filterControlBase); -var _chartOptionConst = __webpack_require__(17); +var _filterControlIndex = __webpack_require__(717); -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); +var FilterControl = _interopRequireWildcard(_filterControlIndex); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } -var ChartWidget = Brightics.Chart.Widget; /** - * Created by sds on 2018-04-09. - */ +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** - * options = { - * value: '', - * chartTypeList: [], - * onChanged: function(){] - * } - * + * Source: filter-control-factory.js + * Created by ji_sung.park on 2017-09-25. */ -function FormatHelperDialog(parentId, options) { - _dialog2.default.call(this, parentId, options); +function createFilter(parentId, type, options) { + var types = this.getFilterTypes(); + if (types.indexOf(type) === -1) return new _filterControlBase2.default(parentId, options);else return new FilterControl[type](parentId, options, type); } -FormatHelperDialog.prototype = Object.create(_dialog2.default.prototype); -FormatHelperDialog.prototype.constructor = FormatHelperDialog; - -FormatHelperDialog.prototype._init = function () { - ChartWidget.prototype._init.call(this); - this.options.showHeader = false; -}; - -// FormatHelperDialog.prototype._getTitle = function () { -// return 'Format Example'; -// }; - -FormatHelperDialog.prototype._getDefaultWindowOption = function () { - var _this = this; - - return { - theme: _chartOptionConst2.default.Theme, - width: '170px', - height: '110px', - maxWidth: '200px', - resizable: false, - initContent: function initContent() { - _this._configurePosition(_this.options.windowPosition); - _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); - } - }; -}; - -FormatHelperDialog.prototype._createDialogContentsArea = function ($parent) { - var $exampleText = $('
' + '
All Types
' + '
${value}: 13.25 > $13.25
' + '
Number Type
' + '
' + ' {0,0}: 145000 > 145,000
' + ' {0.00}: 130.4721 > 130.47
' + '
' + '
'); - - $exampleText.css('line-height', '1.6'); - $parent.append($exampleText); -}; - -FormatHelperDialog.prototype._destroy = function () { - $(window).off('mousedown', this._closeHandler); - this.$mainControl.jqxWindow('destroy'); - this.$mainControl.remove(); -}; - -FormatHelperDialog.prototype._getItemList = function () { - if (this.options.itemList) { - return this.options.itemList; - } else { - return []; - } -}; - -FormatHelperDialog.prototype._getDialogResult = function () { - return this.$itemListContainer.find('.selected .bo-widget-item-selector-item').attr('item-value'); -}; - -exports.default = FormatHelperDialog; +function getFilterTypes() { + return Object.keys(FilterControl); +} /***/ }), -/* 76 */ +/* 77 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1853,15 +1949,16 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _filterControlFactory = __webpack_require__(123); +var _filterControlFactory = __webpack_require__(76); var FilterControlFactory = _interopRequireWildcard(_filterControlFactory); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } -function FilterControl(parentId, options) { +function FilterControl(parentId, options, type) { this.parentId = parentId; this.options = options; + this.type = type; this.retrieveParent(); this.createContents(); } /** @@ -1874,73 +1971,42 @@ FilterControl.prototype.retrieveParent = function () { }; FilterControl.prototype.createContents = function () { - this.$mainContent = $('' + '
' + '
' + '
Condition
' + '
' + '
' + '
' + '
' + ''); + this.$mainContent = $('' + '
' + '
' + '
' + '
' + '
' + ''); this.$parent.append(this.$mainContent); - this.$changeFilterButton = this.$mainContent.find('.bf-control-change-filter-button'); - this.$controlArea = this.$mainContent.find('.bf-control-content-control-area'); + var filterTypes = FilterControlFactory.getFilterTypes(); + var isContinuous = this._isContinuous(); + var optionLength = this.options.values.length; + var defaultType = this.type; + + var menuItems = filterTypes.filter(function (type) { + return !(type == 'RangeSlider' && (optionLength < 2 || !isContinuous)); + }); - this.bindChangeFilterButtonClickEvent(this.$changeFilterButton); + var $wrapper = this.$mainContent.find('.bf-control-content-header-area'); + var _this = this; + this.selectorControl = brtcWidget.dropDownList($wrapper, { + width: '100%', + source: menuItems, + value: defaultType + }); + + this.selectorControl.subscribe('change', function (val) { + _this.options.switchFilter(val); + }); + + this.$controlArea = this.$mainContent.find('.bf-control-content-control-area'); this.createControlArea(this.$controlArea); if (this.options.getFilteredValues()) this.setSelected(this.options.getFilteredValues()); }; FilterControl.prototype.createControlArea = function ($parent) {}; -FilterControl.prototype.bindChangeFilterButtonClickEvent = function ($parent) { +FilterControl.prototype.bindChangeFilterButtonClickEvent = function ($menu) { var _this = this; - $parent.on('click', function (event) { - var filterId = _this.options.filterId; - - var $contextMenu = $("#bf-context-menu"), - point, - menuPoint; - - $contextMenu.jqxMenu('close'); - var scrollTop = $(window).scrollTop(); - var scrollLeft = $(window).scrollLeft(); - point = { - x: parseInt(event.clientX) + scrollLeft, - y: parseInt(event.clientY) + scrollTop - }; - - if (point) { - $.each(FilterControlFactory.getFilterTypes(), function (index, type) { - var id = 'bfs-context-menu-switch-item-' + type; - $contextMenu.jqxMenu('disable', id, _this.getType() === type); - }); - - var isContinuous = _this._isContinuous(); - - if (_this.options.values.length < 2 || !isContinuous) { - var id = 'bfs-context-menu-switch-item-RangeSlider'; - $contextMenu.jqxMenu('disable', id, true); - } else if (_this.options.values.length > 5) { - var id = 'bfs-context-menu-switch-item-CheckBox'; - $contextMenu.jqxMenu('disable', id, true); - } else if (_this.options.values.length > 50) { - var id = 'bfs-context-menu-switch-item-ListBox'; - $contextMenu.jqxMenu('disable', id, true); - } - - menuPoint = _this.getContextMenuPoint($contextMenu.width(), $contextMenu.height(), point.x, point.y); - $contextMenu.data('filterId', _this.options.filterId); - $contextMenu.data('chartId', _this.options.chartId); - $contextMenu.jqxMenu('open', menuPoint.x, menuPoint.y); - $contextMenu.on('shown', function () { - $.each($('div.jqx-menu-popup.jqx-menu-popup'), function (index, menuDiv) { - if ($(menuDiv).css('display') == 'block') { - if (menuDiv.offsetHeight + menuDiv.offsetTop > $(window).height()) { - menuDiv.style.top = $(window).height() - menuDiv.offsetHeight + 'px'; - } - if (menuDiv.offsetLeft + menuDiv.offsetWidth > $(window).width()) { - menuDiv.style.left = menuDiv.offsetLeft - menuDiv.offsetWidth - $contextMenu.width() + 5 + 'px'; - } - } - }); - }); - } + this.selectorControl.subscribe('change', function (val) { + _this.options.switchFilter(val); }); }; @@ -1993,7 +2059,6 @@ FilterControl.prototype.destroy = function () { exports.default = FilterControl; /***/ }), -/* 77 */, /* 78 */, /* 79 */, /* 80 */, @@ -2002,3833 +2067,6436 @@ exports.default = FilterControl; /* 83 */, /* 84 */, /* 85 */, -/* 86 */, -/* 87 */, -/* 88 */, -/* 89 */, -/* 90 */, -/* 91 */, -/* 92 */, -/* 93 */, -/* 94 */, -/* 95 */, -/* 96 */, -/* 97 */, -/* 98 */, -/* 99 */, -/* 100 */, -/* 101 */, -/* 102 */, -/* 103 */, -/* 104 */, -/* 105 */, -/* 106 */, -/* 107 */, -/* 108 */, -/* 109 */, -/* 110 */, -/* 111 */, -/* 112 */, -/* 113 */, -/* 114 */, -/* 115 */, -/* 116 */ +/* 86 */ +/***/ (function(module, exports) { + +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 228); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ /***/ (function(module, exports, __webpack_require__) { -"use strict"; +/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js +//! version : 2.27.0 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com +;(function (global, factory) { + true ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, (function () { 'use strict'; -Object.defineProperty(exports, "__esModule", { - value: true -}); + var hookCallback; -var _chartOptionRegister = __webpack_require__(117); + function hooks() { + return hookCallback.apply(null, arguments); + } -var ChartOptionRegistry = _interopRequireWildcard(_chartOptionRegister); + // This is done to register the method called with moment() + // without creating circular dependencies. + function setHookCallback(callback) { + hookCallback = callback; + } -var _chartOptionUtil = __webpack_require__(30); + function isArray(input) { + return ( + input instanceof Array || + Object.prototype.toString.call(input) === '[object Array]' + ); + } -var _autoOptionSelector = __webpack_require__(295); + function isObject(input) { + // IE8 will treat undefined and null as object if it wasn't for + // input != null + return ( + input != null && + Object.prototype.toString.call(input) === '[object Object]' + ); + } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); + } -/** - * Created by SDS on 2017-05-10. - */ + function isObjectEmpty(obj) { + if (Object.getOwnPropertyNames) { + return Object.getOwnPropertyNames(obj).length === 0; + } else { + var k; + for (k in obj) { + if (hasOwnProp(obj, k)) { + return false; + } + } + return true; + } + } -var ChartWidget = Brightics.Chart.Widget; + function isUndefined(input) { + return input === void 0; + } + function isNumber(input) { + return ( + typeof input === 'number' || + Object.prototype.toString.call(input) === '[object Number]' + ); + } -/** - * - * @param parentId - * @param options = { - chartOption: { - chart: { - type: 'area', - ... - }, - ... - }, - onChanged: function (chartOption) { - }, - dataSource: { - selectable: true (default: false), - getDataSourceList: function(){ - } - getDataSourceColumnList: function(dataSourceId){ - } - }, - chartTypeSelectable: false (default: true), - getControlContainerList: function(defaultControls){ - return defaultControls; - } - } - */ + function isDate(input) { + return ( + input instanceof Date || + Object.prototype.toString.call(input) === '[object Date]' + ); + } -/** - * @constructor - */ -function ChartOption(parentId, options) { - var defaultChartOptions = Brightics.Chart.getChartAttr(options.chartOption.chart.type).DefaultOptions; + function map(arr, fn) { + var res = [], + i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } - var chartOption = (0, _chartOptionUtil.mergeChartOption)(defaultChartOptions, options.chartOption); + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } - var opt = $.extend(true, {}, { - dataSource: {}, - setting: {}, - chartTypeSelectable: true, - chartOptionAPI: { - setChartOptions: this.setChartOptions.bind(this), - reloadColumnSelectorSetting: this.reloadColumnSelectorSetting.bind(this) + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; } - }, options); - opt.chartOption = chartOption; - ChartWidget.call(this, parentId, opt); -} -ChartOption.prototype = Object.create(ChartWidget.prototype); -ChartOption.prototype.constructor = ChartOption; + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } -ChartOption.prototype._init = function () { - ChartWidget.prototype._init.call(this); - this.options.onChanged = this._onChanged.bind(this); - this._validateChartOption(); -}; + return a; + } -ChartOption.prototype._validateChartOption = function ($parent) { - if (this.options.dataSource.selectable) { - if (!(this.options.dataSource.getDataSourceList && this.options.dataSource.getDataSourceColumnList)) { - this._setDataSourceOption(); + function createUTC(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); + } + + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty: false, + unusedTokens: [], + unusedInput: [], + overflow: -2, + charsLeftOver: 0, + nullInput: false, + invalidEra: null, + invalidMonth: null, + invalidFormat: false, + userInvalidated: false, + iso: false, + parsedDateParts: [], + era: null, + meridiem: null, + rfc2822: false, + weekdayMismatch: false, + }; + } + + function getParsingFlags(m) { + if (m._pf == null) { + m._pf = defaultParsingFlags(); } + return m._pf; } -}; -ChartOption.prototype._setDataSourceOption = function () { - var sourceList; - var dataSrcOption = this.options.dataSource; - if (this.options.chartOption.source.dataType === 'lazy') { - sourceList = this.options.chartOption.source.lazyData; + var some; + if (Array.prototype.some) { + some = Array.prototype.some; } else { - sourceList = this.options.chartOption.source.localData; + some = function (fun) { + var t = Object(this), + len = t.length >>> 0, + i; + + for (i = 0; i < len; i++) { + if (i in t && fun.call(this, t[i], i, t)) { + return true; + } + } + + return false; + }; } - dataSrcOption.getDataSourceList = function () { - var dataSourceList = []; - for (var dataIdx = 0; dataIdx < sourceList.length; dataIdx++) { - dataSourceList.push({ - value: sourceList[dataIdx].id.value, - label: sourceList[dataIdx].id.label, - dataSourceIndex: dataIdx - }); - } - return dataSourceList; - }; - dataSrcOption.getDataSourceColumnList = function (id) { - var dataSrcColumn = []; - return sourceList.find(function (dataSrc) { - return dataSrc.id.value == id; - }).columns(); - }; -}; -ChartOption.prototype._createContents = function ($parent) { - this.$mainControl = $('
'); - $parent.append(this.$mainControl); + function isValid(m) { + if (m._isValid == null) { + var flags = getParsingFlags(m), + parsedParts = some.call(flags.parsedDateParts, function (i) { + return i != null; + }), + isNowValid = + !isNaN(m._d.getTime()) && + flags.overflow < 0 && + !flags.empty && + !flags.invalidEra && + !flags.invalidMonth && + !flags.invalidWeekday && + !flags.weekdayMismatch && + !flags.nullInput && + !flags.invalidFormat && + !flags.userInvalidated && + (!flags.meridiem || (flags.meridiem && parsedParts)); + + if (m._strict) { + isNowValid = + isNowValid && + flags.charsLeftOver === 0 && + flags.unusedTokens.length === 0 && + flags.bigHour === undefined; + } - this.$controlWrapper = $('
'); - this.$mainControl.append(this.$controlWrapper); + if (Object.isFrozen == null || !Object.isFrozen(m)) { + m._isValid = isNowValid; + } else { + return isNowValid; + } + } + return m._isValid; + } - try { - this.chartOptionControl = ChartOptionRegistry.createChartOptionControl(this.options.chartOption.chart.type, this.$controlWrapper, this.options); - } catch (err) { - this.chartOptionControl = null; - this._createErrContents(); - console.error(err); + function createInvalid(flags) { + var m = createUTC(NaN); + if (flags != null) { + extend(getParsingFlags(m), flags); + } else { + getParsingFlags(m).userInvalidated = true; + } + + return m; } - this.$mainControl.perfectScrollbar(); - var _this = this; + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + var momentProperties = (hooks.momentProperties = []), + updateInProgress = false; - this.$mainControl.parents('.ps-container').on('scroll', function () { - if (_this.chartOptionControl != null) { - _this.chartOptionControl.close(); + function copyConfig(to, from) { + var i, prop, val; + + if (!isUndefined(from._isAMomentObject)) { + to._isAMomentObject = from._isAMomentObject; } - }); - this.$mainControl.on('scroll', function () { - if (_this.chartOptionControl != null) { - _this.chartOptionControl.close(); + if (!isUndefined(from._i)) { + to._i = from._i; } - }); - this.resizeHandler = function () { - if (_this.chartOptionControl != null) { - _this.chartOptionControl.close(); + if (!isUndefined(from._f)) { + to._f = from._f; + } + if (!isUndefined(from._l)) { + to._l = from._l; + } + if (!isUndefined(from._strict)) { + to._strict = from._strict; + } + if (!isUndefined(from._tzm)) { + to._tzm = from._tzm; + } + if (!isUndefined(from._isUTC)) { + to._isUTC = from._isUTC; + } + if (!isUndefined(from._offset)) { + to._offset = from._offset; + } + if (!isUndefined(from._pf)) { + to._pf = getParsingFlags(from); + } + if (!isUndefined(from._locale)) { + to._locale = from._locale; } - }; - $(window).resize(this.resizeHandler); -}; -ChartOption.prototype._createErrContents = function () {}; + if (momentProperties.length > 0) { + for (i = 0; i < momentProperties.length; i++) { + prop = momentProperties[i]; + val = from[prop]; + if (!isUndefined(val)) { + to[prop] = val; + } + } + } -ChartOption.prototype._onChanged = function (chartOptionAPI, param, forced) { - if (!this.options.callBack) return; + return to; + } - if (typeof this.options.callBack[chartOptionAPI] === 'function') { - this.options.callBack[chartOptionAPI](param || this.options.chartOption, forced); + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(config._d != null ? config._d.getTime() : NaN); + if (!this.isValid()) { + this._d = new Date(NaN); + } + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + hooks.updateOffset(this); + updateInProgress = false; + } } - //FIXME: 수정필요 - if (chartOptionAPI !== 'onChartTypeChanged') { - this.chartOptionControl.doValidate(); + + function isMoment(obj) { + return ( + obj instanceof Moment || (obj != null && obj._isAMomentObject != null) + ); } - this.chartOptionControl.renderProblem(); - this.chartOptionControl.renderWarning(); -}; -ChartOption.prototype.destroy = function () { - ChartWidget.prototype.destroy.call(this); + function warn(msg) { + if ( + hooks.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && + console.warn + ) { + console.warn('Deprecation warning: ' + msg); + } + } - if (this.resizeHandler) { - $(window).off('resize', this.resizeHandler); - this.resizeHandler = null; + function deprecate(msg, fn) { + var firstTime = true; + + return extend(function () { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(null, msg); + } + if (firstTime) { + var args = [], + arg, + i, + key; + for (i = 0; i < arguments.length; i++) { + arg = ''; + if (typeof arguments[i] === 'object') { + arg += '\n[' + i + '] '; + for (key in arguments[0]) { + if (hasOwnProp(arguments[0], key)) { + arg += key + ': ' + arguments[0][key] + ', '; + } + } + arg = arg.slice(0, -2); // Remove trailing comma and space + } else { + arg = arguments[i]; + } + args.push(arg); + } + warn( + msg + + '\nArguments: ' + + Array.prototype.slice.call(args).join('') + + '\n' + + new Error().stack + ); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); } - this.chartOptionControl.destroy(); - this.chartOptionControl = null; - this.$mainControl.remove(); -}; -/* - * @param options = { - chart: { - type: 'area', - ... - }, - } - */ -//Control Container 전체 render -ChartOption.prototype.setChartOptions = function (options) { - // if (options.chart.type && options.chart.type !== this.options.chartOption.chart.type) { - // this.chartOptionControl.destroy(); - // this.chartOptionControl = ChartOptionRegistry.createChartOptionControl(options.chart.type, this.$controlWrapper, this.options); - // } - var defaultChartOptions = Brightics.Chart.getChartAttr(options.chart.type).DefaultOptions; - var colorSet = (options.colorSet || defaultChartOptions.colorSet).slice(); - this.options.chartOption = $.extend(true, {}, defaultChartOptions, { source: this.options.chartOption.source }, options); - this.options.chartOption.colorSet = colorSet; - // this.chartOptionControl.render(); + var deprecations = {}; - //FIXME: 무조건 destroy 후 redraw(render완성되면 삭제하고 위 코드 사용) - if (this.chartOptionControl) this.chartOptionControl.destroy(); - this.chartOptionControl = ChartOptionRegistry.createChartOptionControl(options.chart.type, this.$controlWrapper, this.options); + function deprecateSimple(name, msg) { + if (hooks.deprecationHandler != null) { + hooks.deprecationHandler(name, msg); + } + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } - return this.options.chartOption; //FIXME: getChartOptions로 구분해야할듯 -}; + hooks.suppressDeprecationWarnings = false; + hooks.deprecationHandler = null; -ChartOption.prototype.show = function () { - ChartWidget.prototype.show.call(this); - this.$mainControl.perfectScrollbar('update'); -}; + function isFunction(input) { + return ( + (typeof Function !== 'undefined' && input instanceof Function) || + Object.prototype.toString.call(input) === '[object Function]' + ); + } -ChartOption.prototype.hide = function () { - ChartWidget.prototype.hide.call(this); -}; + function set(config) { + var prop, i; + for (i in config) { + if (hasOwnProp(config, i)) { + prop = config[i]; + if (isFunction(prop)) { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + } + this._config = config; + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _dayOfMonthOrdinalParse. + // TODO: Remove "ordinalParse" fallback in next major release. + this._dayOfMonthOrdinalParseLenient = new RegExp( + (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + + '|' + + /\d{1,2}/.source + ); + } -//특정 Control Container만 render -ChartOption.prototype.reloadColumnSelectorSetting = function () { - this.chartOptionControl.reloadColumnSelectorSetting(); -}; + function mergeConfigs(parentConfig, childConfig) { + var res = extend({}, parentConfig), + prop; + for (prop in childConfig) { + if (hasOwnProp(childConfig, prop)) { + if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { + res[prop] = {}; + extend(res[prop], parentConfig[prop]); + extend(res[prop], childConfig[prop]); + } else if (childConfig[prop] != null) { + res[prop] = childConfig[prop]; + } else { + delete res[prop]; + } + } + } + for (prop in parentConfig) { + if ( + hasOwnProp(parentConfig, prop) && + !hasOwnProp(childConfig, prop) && + isObject(parentConfig[prop]) + ) { + // make sure changes to properties don't modify parent config + res[prop] = extend({}, res[prop]); + } + } + return res; + } -ChartOption.prototype.getColumnSelectorSetting = function () { - //TODO MAP Chart인 경우 처리 어떻게 해야 하는지 확인 필요 - if (this.chartOptionControl.options.setting.columnSelector.constructor !== Array) { - return []; + function Locale(config) { + if (config != null) { + this.set(config); + } } - return this.chartOptionControl.options.setting.columnSelector; -}; -ChartOption.prototype.getOptions = function () { - return this.options; -}; + var keys; -exports.default = ChartOption; + if (Object.keys) { + keys = Object.keys; + } else { + keys = function (obj) { + var i, + res = []; + for (i in obj) { + if (hasOwnProp(obj, i)) { + res.push(i); + } + } + return res; + }; + } -/***/ }), -/* 117 */ -/***/ (function(module, exports, __webpack_require__) { + var defaultCalendar = { + sameDay: '[Today at] LT', + nextDay: '[Tomorrow at] LT', + nextWeek: 'dddd [at] LT', + lastDay: '[Yesterday at] LT', + lastWeek: '[Last] dddd [at] LT', + sameElse: 'L', + }; -"use strict"; + function calendar(key, mom, now) { + var output = this._calendar[key] || this._calendar['sameElse']; + return isFunction(output) ? output.call(mom, now) : output; + } + function zeroFill(number, targetLength, forceSign) { + var absNumber = '' + Math.abs(number), + zerosToFill = targetLength - absNumber.length, + sign = number >= 0; + return ( + (sign ? (forceSign ? '+' : '') : '-') + + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + + absNumber + ); + } -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.registerChartOptionControl = registerChartOptionControl; -exports.getChartOptionControlList = getChartOptionControlList; -exports.getChartOptionControl = getChartOptionControl; -exports.createChartOptionControl = createChartOptionControl; + var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + formatFunctions = {}, + formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken(token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal( + func.apply(this, arguments), + token + ); + }; + } + } -var _chartOptionIndex = __webpack_require__(562); + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } -var _chartOptionIndex2 = _interopRequireDefault(_chartOptionIndex); + function makeFormatFunction(format) { + var array = format.match(formattingTokens), + i, + length; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } -var chartOption = {}; /** - * Source: chart-option-register.js - * Created by ji_sung.park on 2018-05-30 - */ + return function (mom) { + var output = '', + i; + for (i = 0; i < length; i++) { + output += isFunction(array[i]) + ? array[i].call(mom, format) + : array[i]; + } + return output; + }; + } -_init(); + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } -function _init() { - var chartTypeList = Object.keys(_chartOptionIndex2.default); - chartTypeList.forEach(function (chartType) { - chartOption[chartType] = _chartOptionIndex2.default[chartType]; - }); -} + format = expandFormat(format, m.localeData()); + formatFunctions[format] = + formatFunctions[format] || makeFormatFunction(format); -exports.default = chartOption; -function registerChartOptionControl(option) { - if ($.isEmptyObject(chartOption)) { - console.log('chart option register is empty'); + return formatFunctions[format](m); } - chartOption[option.Key] = option.Func; -} -function getChartOptionControlList() { - return chartOption; -} + function expandFormat(format, locale) { + var i = 5; -function getChartOptionControl(chartType) { - return chartOption[chartType]; -} + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } -function createChartOptionControl(chartType, parentId, options) { - if (!chartOption[chartType] || !parentId || !options) { - throw new Error('Cannot create chart option control. ' + chartType); + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace( + localFormattingTokens, + replaceLongDateFormatTokens + ); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; } - return new chartOption[chartType](parentId, options); -} -/***/ }), -/* 118 */ -/***/ (function(module, exports, __webpack_require__) { + var defaultLongDateFormat = { + LTS: 'h:mm:ss A', + LT: 'h:mm A', + L: 'MM/DD/YYYY', + LL: 'MMMM D, YYYY', + LLL: 'MMMM D, YYYY h:mm A', + LLLL: 'dddd, MMMM D, YYYY h:mm A', + }; -"use strict"; + function longDateFormat(key) { + var format = this._longDateFormat[key], + formatUpper = this._longDateFormat[key.toUpperCase()]; + if (format || !formatUpper) { + return format; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + this._longDateFormat[key] = formatUpper + .match(formattingTokens) + .map(function (tok) { + if ( + tok === 'MMMM' || + tok === 'MM' || + tok === 'DD' || + tok === 'dddd' + ) { + return tok.slice(1); + } + return tok; + }) + .join(''); -var _chartOptionBase = __webpack_require__(6); + return this._longDateFormat[key]; + } -var _chartOptionBase2 = _interopRequireDefault(_chartOptionBase); + var defaultInvalidDate = 'Invalid date'; -var _chartOptionAreaStacked = __webpack_require__(291); + function invalidDate() { + return this._invalidDate; + } -var _chartOptionAreaStacked2 = _interopRequireDefault(_chartOptionAreaStacked); + var defaultOrdinal = '%d', + defaultDayOfMonthOrdinalParse = /\d{1,2}/; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function ordinal(number) { + return this._ordinal.replace('%d', number); + } -/** - * Created by SDS on 2017-05-10. - */ + var defaultRelativeTime = { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + ss: '%d seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + w: 'a week', + ww: '%d weeks', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years', + }; -function AreaChartOption(parentId, options) { - _chartOptionBase2.default.call(this, parentId, options); -} + function relativeTime(number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return isFunction(output) + ? output(number, withoutSuffix, string, isFuture) + : output.replace(/%d/i, number); + } -AreaChartOption.prototype = Object.create(_chartOptionBase2.default.prototype); -AreaChartOption.prototype.constructor = AreaChartOption; + function pastFuture(diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return isFunction(format) ? format(output) : format.replace(/%s/i, output); + } -AreaChartOption.prototype._init = function () { - _chartOptionBase2.default.prototype._init.call(this); - var _this = this; - var columnSelectorSetting = [[{ - key: 'xAxis', - ref: _this.options.chartOption.xAxis[0] - }, { - key: 'yAxis', - ref: _this.options.chartOption.yAxis[0] - }, { - key: 'colorBy', - ref: _this.options.chartOption.colorBy[0] - }]]; + var aliases = {}; - columnSelectorSetting = this._configureColumnConf(columnSelectorSetting); + function addUnitAlias(unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } - this.options.setting.columnSelector = columnSelectorSetting; - this.options.setting.marker = this.options.chartOption.plotOptions.area.marker; - this.options.setting.stripLine = this.options.chartOption.plotOptions.area.stripLine; - this.options.setting.tooltip = this.options.chartOption.plotOptions.area.tooltip; - this.options.setting.showSymbol = this.options.chartOption.plotOptions.area.showSymbol; -}; + function normalizeUnits(units) { + return typeof units === 'string' + ? aliases[units] || aliases[units.toLowerCase()] + : undefined; + } -AreaChartOption.prototype.getDefaultControlContainerList = function () { - return ['Data', 'ToolTipTrigger', 'Title', 'Axis', 'Legend', 'Marker', 'Lines', 'Frame']; -}; + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; -exports.default = AreaChartOption; + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } -/***/ }), -/* 119 */ -/***/ (function(module, exports, __webpack_require__) { + return normalizedInput; + } -"use strict"; + var priorities = {}; + function addUnitPriority(unit, priority) { + priorities[unit] = priority; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Data = Data; -exports.ComplexData = ComplexData; -exports.Format = Format; -exports.FormatCard = FormatCard; -exports.Title = Title; -exports.Axis = Axis; -exports.AxisR = AxisR; -exports.AxisEach = AxisEach; -exports.AxisRadar = AxisRadar; -exports.Legend = Legend; -exports.CustomLegend = CustomLegend; -exports.VisualMap = VisualMap; -exports.Marker = Marker; -exports.MarkerLine = MarkerLine; -exports.Lines = Lines; -exports.LinesWithTrend = LinesWithTrend; -exports.Frame = Frame; -exports.FrameStyle = FrameStyle; -exports.FramePie = FramePie; -exports.FrameDonut = FrameDonut; -exports.ToolTip = ToolTip; -exports.Label = Label; -exports.Figure = Figure; -exports.MapData = MapData; -exports.MapStyle = MapStyle; -exports.Layers = Layers; -exports.ToolTipTrigger = ToolTipTrigger; -exports.Grid = Grid; -/** - * Source: control-container-preview.js - * Created by SDS on 2018-05-30 - */ + function getPrioritizedUnits(unitsObj) { + var units = [], + u; + for (u in unitsObj) { + if (hasOwnProp(unitsObj, u)) { + units.push({ unit: u, priority: priorities[u] }); + } + } + units.sort(function (a, b) { + return a.priority - b.priority; + }); + return units; + } -var _axisTypePreview = function _axisTypePreview() { - var preViewText = '', - axisAttrUsed = false; - if (this.options.chartOption.xAxis[0].min || this.options.chartOption.xAxis[0].max || this.options.chartOption.yAxis[0].min || this.options.chartOption.yAxis[0].max) { - preViewText += 'Range'; - axisAttrUsed = true; + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; } - if (this.options.chartOption.xAxis[0].title.show || this.options.chartOption.yAxis[0].title.show) { - preViewText = preViewText === '' ? 'Title' : preViewText += ', Title'; - axisAttrUsed = true; + + function absFloor(number) { + if (number < 0) { + // -0 -> 0 + return Math.ceil(number) || 0; + } else { + return Math.floor(number); + } } - if (this.options.chartOption.xAxis[0].axisLabel.show || this.options.chartOption.yAxis[0].axisLabel.show) { - preViewText = preViewText === '' ? 'Label' : preViewText += ', Label'; - axisAttrUsed = true; + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + value = absFloor(coercedNumber); + } + + return value; } - return axisAttrUsed ? preViewText + ' ON' : 'OFF'; -}; -function Data() { - //TODO: multichart 고려안됨 - var preViewText = ''; - var columnList = this.options.setting.columnSelector[0]; - if (columnList && columnList.length > 0) { - columnList.forEach(function (columnInfo) { - if (columnInfo.ref.selected && columnInfo.ref.selected.length > 0 && columnInfo.ref.selected[0] !== null) { - preViewText = preViewText === '' ? columnInfo.label : preViewText += ', ' + columnInfo.label; + function makeGetSet(unit, keepTime) { + return function (value) { + if (value != null) { + set$1(this, unit, value); + hooks.updateOffset(this, keepTime); + return this; + } else { + return get(this, unit); } - }); + }; } - var itemSelector = this.options.setting.itemSelector; - if (itemSelector && itemSelector.length > 0) { - itemSelector[0].forEach(function (itemInfo) { - if (itemInfo.ref.selected && itemInfo.ref.selected !== '') { - preViewText = preViewText === '' ? itemInfo.label : preViewText += ', ' + itemInfo.label; - } - }); + function get(mom, unit) { + return mom.isValid() + ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() + : NaN; } - var onOffSwitch = this.options.setting.onOffSwitch; - if (onOffSwitch && onOffSwitch.length > 0) { - onOffSwitch[0].forEach(function (switchInfo) { - if (switchInfo.ref && switchInfo.ref !== '') { - preViewText = preViewText === '' ? switchInfo.label : preViewText += ', ' + switchInfo.label; + function set$1(mom, unit, value) { + if (mom.isValid() && !isNaN(value)) { + if ( + unit === 'FullYear' && + isLeapYear(mom.year()) && + mom.month() === 1 && + mom.date() === 29 + ) { + value = toInt(value); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit]( + value, + mom.month(), + daysInMonth(value, mom.month()) + ); + } else { + mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); } - }); + } } - return preViewText; -} + // MOMENTS -function ComplexData() { - //TODO: multichart 고려안됨 - var preViewText = ''; - var columnList = this.options.setting.columnSelector[0]; - if (columnList && columnList.length > 0) { - columnList.forEach(function (columnInfo) { - if (columnInfo.ref.selected && columnInfo.ref.selected.length > 0 && columnInfo.ref.selected[0] !== null) { - preViewText = preViewText === '' ? columnInfo.label : preViewText += ', ' + columnInfo.label; - } - }); + function stringGet(units) { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](); + } + return this; } - var itemSelector = this.options.setting.itemSelector; - if (itemSelector && itemSelector.length > 0) { - itemSelector[0].forEach(function (itemInfo) { - if (itemInfo.ref.selected && itemInfo.ref.selected !== '') { - preViewText = preViewText === '' ? itemInfo.label : preViewText += ', ' + itemInfo.label; + function stringSet(units, value) { + if (typeof units === 'object') { + units = normalizeObjectUnits(units); + var prioritized = getPrioritizedUnits(units), + i; + for (i = 0; i < prioritized.length; i++) { + this[prioritized[i].unit](units[prioritized[i].unit]); } - }); + } else { + units = normalizeUnits(units); + if (isFunction(this[units])) { + return this[units](value); + } + } + return this; } - return preViewText; -} - -function Format() { - return ''; -} -function FormatCard() { - return ''; -} + var match1 = /\d/, // 0 - 9 + match2 = /\d\d/, // 00 - 99 + match3 = /\d{3}/, // 000 - 999 + match4 = /\d{4}/, // 0000 - 9999 + match6 = /[+-]?\d{6}/, // -999999 - 999999 + match1to2 = /\d\d?/, // 0 - 99 + match3to4 = /\d\d\d\d?/, // 999 - 9999 + match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999 + match1to3 = /\d{1,3}/, // 0 - 999 + match1to4 = /\d{1,4}/, // 0 - 9999 + match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999 + matchUnsigned = /\d+/, // 0 - inf + matchSigned = /[+-]?\d+/, // -inf - inf + matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z + matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + // any word (or two) characters or numbers including two/three word month in arabic. + // includes scottish gaelic two word and hyphenated months + matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, + regexes; + + regexes = {}; + + function addRegexToken(token, regex, strictRegex) { + regexes[token] = isFunction(regex) + ? regex + : function (isStrict, localeData) { + return isStrict && strictRegex ? strictRegex : regex; + }; + } -function Title() { - var preViewText = ''; - if (this.options.chartOption.title.show) { - preViewText = preViewText + this.options.chartOption.title.text; - if (this.options.chartOption.title.subtext !== '') { - preViewText = preViewText + ' / ' + this.options.chartOption.title.subtext; + function getParseRegexForToken(token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); } + + return regexes[token](config._strict, config._locale); } - return preViewText && preViewText !== '' ? preViewText : 'OFF'; -} -function Axis() { - return _axisTypePreview.call(this); -} + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return regexEscape( + s + .replace('\\', '') + .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function ( + matched, + p1, + p2, + p3, + p4 + ) { + return p1 || p2 || p3 || p4; + }) + ); + } -function AxisR() { - return _axisTypePreview.call(this); -} + function regexEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } -function AxisEach() { - return _axisTypePreview.call(this); -} + var tokens = {}; -function AxisRadar() { - var preViewText = []; - var axisAttrUsed = false; - var min = this.options.chartOption.plotOptions.radar.min; - var max = this.options.chartOption.plotOptions.radar.max; - var show = this.options.chartOption.plotOptions.radar.name.show; + function addParseToken(token, callback) { + var i, + func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (isNumber(callback)) { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } - if (min || max) { - preViewText.push('Range'); - axisAttrUsed = true; + function addWeekParseToken(token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); } - if (show) { - preViewText.push('Label'); - axisAttrUsed = true; + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } } - return axisAttrUsed ? preViewText.join(', ') + ' ON' : 'OFF'; -} -function Legend() { - return this.options.chartOption.legend.show ? 'ON' : 'OFF'; -} + var YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + WEEK = 7, + WEEKDAY = 8; + + function mod(n, x) { + return ((n % x) + x) % x; + } -function CustomLegend() { - return Legend.call(this); -} + var indexOf; -function VisualMap() { - return this.options.chartOption.legend.show ? 'ON' : 'OFF'; -} + if (Array.prototype.indexOf) { + indexOf = Array.prototype.indexOf; + } else { + indexOf = function (o) { + // I know + var i; + for (i = 0; i < this.length; ++i) { + if (this[i] === o) { + return i; + } + } + return -1; + }; + } -function Marker() { - var $previewDiv = $('
'); - var border = '1px solid rgba(0, 0, 0, 0.6)'; - $previewDiv.css({ - border: border - }); - for (var colorSetIdx = 0; colorSetIdx < 4; colorSetIdx++) { - var $miniDiv = $('
'); - if (colorSetIdx === 0) { - $miniDiv.css({ - 'border-right': border, - 'border-bottom': border - }); - } else if (colorSetIdx === 1) { - $miniDiv.css({ - 'border-bottom': border - }); - } else if (colorSetIdx === 2) { - $miniDiv.css({ - 'border-right': border - }); + function daysInMonth(year, month) { + if (isNaN(year) || isNaN(month)) { + return NaN; } - $miniDiv.css({ - width: '8.5px', - height: '8.5px', - background: this.options.chartOption.colorSet[colorSetIdx] || 'transparent' - }); - $previewDiv.append($miniDiv); + var modMonth = mod(month, 12); + year += (month - modMonth) / 12; + return modMonth === 1 + ? isLeapYear(year) + ? 29 + : 28 + : 31 - ((modMonth % 7) % 2); } - return $previewDiv; -} -function MarkerLine() { - var $previewDiv = $('
'); - var border = '1px solid rgba(0, 0, 0, 0.6)'; - $previewDiv.css({ - border: border + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; }); - for (var colorSetIdx = 0; colorSetIdx < 4; colorSetIdx++) { - var $miniDiv = $('
'); - if (colorSetIdx === 0) { - $miniDiv.css({ - 'border-right': border, - 'border-bottom': border - }); - } else if (colorSetIdx === 1) { - $miniDiv.css({ - 'border-bottom': border - }); - } else if (colorSetIdx === 2) { - $miniDiv.css({ - 'border-right': border - }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PRIORITY + + addUnitPriority('month', 8); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', function (isStrict, locale) { + return locale.monthsShortRegex(isStrict); + }); + addRegexToken('MMMM', function (isStrict, locale) { + return locale.monthsRegex(isStrict); + }); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + getParsingFlags(config).invalidMonth = input; } - $miniDiv.css({ - width: '8.5px', - height: '8.5px', - background: this.options.chartOption.colorSet[colorSetIdx] || 'transparent' - }); - $previewDiv.append($miniDiv); + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split( + '_' + ), + defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split( + '_' + ), + MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, + defaultMonthsShortRegex = matchWord, + defaultMonthsRegex = matchWord; + + function localeMonths(m, format) { + if (!m) { + return isArray(this._months) + ? this._months + : this._months['standalone']; + } + return isArray(this._months) + ? this._months[m.month()] + : this._months[ + (this._months.isFormat || MONTHS_IN_FORMAT).test(format) + ? 'format' + : 'standalone' + ][m.month()]; } - return $previewDiv; -} -function Lines() { - var $previeDivParent = $('
'); - var stripLineList = this.options.setting.stripLine.data[0]; - var defaultLineStyle = this.options.setting.stripLine.lineStyle || { - 'normal': { - 'color': '#000000', - 'type': 'solid' + function localeMonthsShort(m, format) { + if (!m) { + return isArray(this._monthsShort) + ? this._monthsShort + : this._monthsShort['standalone']; } - }; - var maxLinePreviewCnt = 6, - totalCnt = 0; - for (var axisKey in stripLineList) { - if (stripLineList[axisKey] && stripLineList[axisKey].length > 0) { - for (var linePreviewCnt = 0; linePreviewCnt < stripLineList[axisKey].length; linePreviewCnt++) { - var lineInfo = stripLineList[axisKey][linePreviewCnt]; - if ($.isEmptyObject(lineInfo) || lineInfo.display == false) continue; - var $previeDiv = $('
'); - var slashDiv = $('
'); - $previeDiv.css({ - border: '1px solid rgba(0, 0, 0, 0.6)', - 'margin-right': '2px' - }); - var borderStyle = '2px' + (lineInfo.lineStyle && lineInfo.lineStyle.normal.color ? ' ' + lineInfo.lineStyle.normal.color : ' ' + defaultLineStyle.normal.color) + (lineInfo.lineStyle && lineInfo.lineStyle.normal.type ? ' ' + lineInfo.lineStyle.normal.type : ' ' + defaultLineStyle.normal.type); - slashDiv.css({ - 'border-top': borderStyle - }); - $previeDiv.append(slashDiv); - $previeDivParent.append($previeDiv); - totalCnt++; + return isArray(this._monthsShort) + ? this._monthsShort[m.month()] + : this._monthsShort[ + MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone' + ][m.month()]; + } + + function handleStrictParse(monthName, format, strict) { + var i, + ii, + mom, + llc = monthName.toLocaleLowerCase(); + if (!this._monthsParse) { + // this is not used + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + for (i = 0; i < 12; ++i) { + mom = createUTC([2000, i]); + this._shortMonthsParse[i] = this.monthsShort( + mom, + '' + ).toLocaleLowerCase(); + this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); } } - } - if (totalCnt === 0) { - return 'OFF'; - } else { - return $previeDivParent.children(); + if (strict) { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } else { + if (format === 'MMM') { + ii = indexOf.call(this._shortMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._longMonthsParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._longMonthsParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortMonthsParse, llc); + return ii !== -1 ? ii : null; + } + } } -} -function LinesWithTrend() { - var $previeDivParent = $('
'); - var stripLineList = this.options.setting.stripLine.data[0]; - var defaultLineStyle = this.options.setting.stripLine.lineStyle || { - 'normal': { - 'color': '#000000', - 'type': 'solid' + function localeMonthsParse(monthName, format, strict) { + var i, mom, regex; + + if (this._monthsParseExact) { + return handleStrictParse.call(this, monthName, format, strict); } - }; - var maxLinePreviewCnt = 6, - totalCnt = 0; - for (var axisKey in stripLineList) { - if (stripLineList[axisKey] && stripLineList[axisKey].length > 0) { - for (var linePreviewCnt = 0; linePreviewCnt < stripLineList[axisKey].length; linePreviewCnt++) { - var lineInfo = stripLineList[axisKey][linePreviewCnt]; - if ($.isEmptyObject(lineInfo) || lineInfo.display == false) continue; - var $previeDiv = $('
'); - var slashDiv = $('
'); - $previeDiv.css({ - border: '1px solid rgba(0, 0, 0, 0.6)', - 'margin-right': '2px' - }); - var borderStyle = '2px' + (lineInfo.lineStyle && lineInfo.lineStyle.normal.color ? ' ' + lineInfo.lineStyle.normal.color : ' ' + defaultLineStyle.normal.color) + (lineInfo.lineStyle && lineInfo.lineStyle.normal.type ? ' ' + lineInfo.lineStyle.normal.type : ' ' + defaultLineStyle.normal.type); - slashDiv.css({ - 'border-top': borderStyle - }); - $previeDiv.append(slashDiv); - $previeDivParent.append($previeDiv); - totalCnt++; + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + // TODO: add sorting + // Sorting makes sure if one month (or abbr) is a prefix of another + // see sorting in computeMonthsParse + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp( + '^' + this.months(mom, '').replace('.', '') + '$', + 'i' + ); + this._shortMonthsParse[i] = new RegExp( + '^' + this.monthsShort(mom, '').replace('.', '') + '$', + 'i' + ); + } + if (!strict && !this._monthsParse[i]) { + regex = + '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'MMMM' && + this._longMonthsParse[i].test(monthName) + ) { + return i; + } else if ( + strict && + format === 'MMM' && + this._shortMonthsParse[i].test(monthName) + ) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; } } } - if (this.options.setting.trendLine && this.options.setting.trendLine.data[0]) { - var trendLineList = this.options.setting.trendLine.data[0]; - for (var axisKey in trendLineList) { - if (trendLineList[axisKey] && trendLineList[axisKey].length > 0) { - for (var linePreviewCnt = 0; linePreviewCnt < trendLineList[axisKey].length; linePreviewCnt++) { - var lineInfo = trendLineList[axisKey][linePreviewCnt]; - if ($.isEmptyObject(lineInfo) || lineInfo.display == false) continue; - var $previeDiv = $('
'); - var slashDiv = $('
'); - $previeDiv.css({ - border: '1px solid rgba(0, 0, 0, 0.6)', - 'margin-right': '2px' - }); - var borderStyle = '2px' + (lineInfo.lineStyle && lineInfo.lineStyle.normal.color ? ' ' + lineInfo.lineStyle.normal.color : ' ' + defaultLineStyle.normal.color) + (lineInfo.lineStyle && lineInfo.lineStyle.normal.type ? ' ' + lineInfo.lineStyle.normal.type : ' ' + defaultLineStyle.normal.type); - slashDiv.css({ - 'border-top': borderStyle - }); - $previeDiv.append(slashDiv); - $previeDivParent.append($previeDiv); - totalCnt++; + + // MOMENTS + + function setMonth(mom, value) { + var dayOfMonth; + + if (!mom.isValid()) { + // No op + return mom; + } + + if (typeof value === 'string') { + if (/^\d+$/.test(value)) { + value = toInt(value); + } else { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (!isNumber(value)) { + return mom; } } } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; } - if (totalCnt === 0) { - return 'OFF'; - } else { - return $previeDivParent.children(); + function getSetMonth(value) { + if (value != null) { + setMonth(this, value); + hooks.updateOffset(this, true); + return this; + } else { + return get(this, 'Month'); + } } -} -function Frame() { - var $previewDiv = $('
'); - $previewDiv.css({ - border: this.options.chartOption.chart.border, - background: this.options.chartOption.chart.background - }); - return $previewDiv; -} + function getDaysInMonth() { + return daysInMonth(this.year(), this.month()); + } -function FrameStyle() { - var $previewDiv = $('
'); - $previewDiv.css({ - border: this.options.chartOption.chart.border, - background: this.options.chartOption.chart.background - }); - return $previewDiv; -} + function monthsShortRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsShortStrictRegex; + } else { + return this._monthsShortRegex; + } + } else { + if (!hasOwnProp(this, '_monthsShortRegex')) { + this._monthsShortRegex = defaultMonthsShortRegex; + } + return this._monthsShortStrictRegex && isStrict + ? this._monthsShortStrictRegex + : this._monthsShortRegex; + } + } -function FramePie() { - var $previewDiv = $('
'); - $previewDiv.css({ - border: this.options.chartOption.chart.border, - background: this.options.chartOption.chart.background - }); - return $previewDiv; -} + function monthsRegex(isStrict) { + if (this._monthsParseExact) { + if (!hasOwnProp(this, '_monthsRegex')) { + computeMonthsParse.call(this); + } + if (isStrict) { + return this._monthsStrictRegex; + } else { + return this._monthsRegex; + } + } else { + if (!hasOwnProp(this, '_monthsRegex')) { + this._monthsRegex = defaultMonthsRegex; + } + return this._monthsStrictRegex && isStrict + ? this._monthsStrictRegex + : this._monthsRegex; + } + } -function FrameDonut() { - var $previewDiv = $('
'); - $previewDiv.css({ - border: this.options.chartOption.chart.border, - background: this.options.chartOption.chart.background - }); - return $previewDiv; -} + function computeMonthsParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } -function ToolTip() { - var preViewText = ''; - if (this.options.chartOption.tooltip.triggerOn === 'click') preViewText = 'Click';else preViewText = 'Mouse Move'; - return preViewText; -} + var shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom; + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, i]); + shortPieces.push(this.monthsShort(mom, '')); + longPieces.push(this.months(mom, '')); + mixedPieces.push(this.months(mom, '')); + mixedPieces.push(this.monthsShort(mom, '')); + } + // Sorting makes sure if one month (or abbr) is a prefix of another it + // will match the longer piece. + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + for (i = 0; i < 12; i++) { + shortPieces[i] = regexEscape(shortPieces[i]); + longPieces[i] = regexEscape(longPieces[i]); + } + for (i = 0; i < 24; i++) { + mixedPieces[i] = regexEscape(mixedPieces[i]); + } -function Label() { - var labelShow = this.options.setting.labelSettings.some(function (setting) { - return setting.ref.show; + this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._monthsShortRegex = this._monthsRegex; + this._monthsStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._monthsShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + } + + // FORMATTING + + addFormatToken('Y', 0, 0, function () { + var y = this.year(); + return y <= 9999 ? zeroFill(y, 4) : '+' + y; }); - return labelShow ? 'ON' : 'OFF'; -} -function Figure() { - if (this.options.chartOption.chart.type != 'decisionTree') { - return; - } - var $previeDiv = $('
'); - var border = '3px solid ' + this.options.chartOption.plotOptions.decisionTree.style.link.color[0]; - $previeDiv.css({ - border: border, - 'background-color': this.options.chartOption.plotOptions.decisionTree.style.node.color[0] + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; }); - return $previeDiv; -} -function MapData() { - var preViewText = this.options.chartOption.plotOptions.map.mapName || ''; - return preViewText; -} + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); -function MapStyle() { - var $previewbackDiv = $('
'); - $previewbackDiv.css({ - border: this.options.chartOption.chart.border, - background: this.options.chartOption.chart.background + // ALIASES + + addUnitAlias('year', 'y'); + + // PRIORITIES + + addUnitPriority('year', 1); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYYY', 'YYYYYY'], YEAR); + addParseToken('YYYY', function (input, array) { + array[YEAR] = + input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input); }); - var $previewareaDiv = $('
'); - $previewareaDiv.css({ - border: this.options.chartOption.plotOptions.map.mapStyle.itemStyle.normal.borderColor, - background: this.options.chartOption.plotOptions.map.mapStyle.itemStyle.normal.areaColor + addParseToken('YY', function (input, array) { + array[YEAR] = hooks.parseTwoDigitYear(input); + }); + addParseToken('Y', function (input, array) { + array[YEAR] = parseInt(input, 10); }); - return $previewareaDiv; //$previewbackDiv;//+$previewareaDiv; -} -function Layers() { - var cntScatter = 0; - var cntLine = 0; - if (this.options.chartOption.plotOptions.map.layers.length > 0) { - for (var ele in this.options.chartOption.plotOptions.map.layers) { - if (this.options.chartOption.plotOptions.map.layers[ele].type == 'lines') { - cntLine++; - } else { - cntScatter++; - } - } - var previewText = ''; - if (cntScatter > 0) previewText += 'Point: ' + cntScatter; - if (cntLine > 0) previewText += ' Line: ' + cntLine; - return previewText; - } else return ''; -} + // HELPERS -function ToolTipTrigger() { - var preViewText = ''; - if (this.options.chartOption.tooltip.triggerOn === 'click') { - preViewText += 'Click'; - } else { - preViewText += 'Mouse Move'; - } - if (this.options.setting.tooltip.trigger === 'axis') { - preViewText += ', Axis'; - } else { - preViewText += ', Item'; + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; } - return preViewText; -} -function Grid() { - return ''; -} + // HOOKS -/***/ }), -/* 120 */ -/***/ (function(module, exports, __webpack_require__) { + hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; -"use strict"; + // MOMENTS + var getSetYear = makeGetSet('FullYear', true); -Object.defineProperty(exports, "__esModule", { - value: true -}); + function getIsLeapYear() { + return isLeapYear(this.year()); + } -var _dialog = __webpack_require__(42); + function createDate(y, m, d, h, M, s, ms) { + // can't just apply() to create a date: + // https://stackoverflow.com/q/181348 + var date; + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + date = new Date(y + 400, m, d, h, M, s, ms); + if (isFinite(date.getFullYear())) { + date.setFullYear(y); + } + } else { + date = new Date(y, m, d, h, M, s, ms); + } -var _dialog2 = _interopRequireDefault(_dialog); + return date; + } -var _chartOptionConst = __webpack_require__(17); + function createUTCDate(y) { + var date, args; + // the Date.UTC function remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + args = Array.prototype.slice.call(arguments); + // preserve leap years using a full 400 year cycle, then reset + args[0] = y + 400; + date = new Date(Date.UTC.apply(null, args)); + if (isFinite(date.getUTCFullYear())) { + date.setUTCFullYear(y); + } + } else { + date = new Date(Date.UTC.apply(null, arguments)); + } -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + return date; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // start-of-first-week - start-of-year + function firstWeekOffset(year, dow, doy) { + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + dow - doy, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; -/** - * Created by mk90.kim on 2016-08-20. - */ + return -fwdlw + fwd - 1; + } -var selectableColumnType = Brightics.Chart.Validator.selectableColumnType; + // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, dow, doy) { + var localWeekday = (7 + weekday - dow) % 7, + weekOffset = firstWeekOffset(year, dow, doy), + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, + resDayOfYear; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } -/** - * options = { - * column : [ - {name:'SepalLength','type':'number'}, - {name:'SepalWidth','type':'number'}, - {name:'PetalLength','type':'number'}, - {name:'PetalWidth','type':'number'}, - {name:'Species','type':'string'}, - {name:'Class','type':'string'}, - ], - selected: [{name: 'SepalLength', aggregation: 'none' }], - selectedIndex: 0, - unique: true, (default: false) - aggregation: true (default : false), - aggregationMandatory: false (aggregation이 true 일 경우만 사용 가능 default : false), - label: 'X-axis' (mandantory), - onChanged: function(){], - close: function(){} - * } - */ -var aggregationMap = _chartOptionConst2.default.AggregationMap; - -function ColumnSelectorDialog(parentId, options) { - _dialog2.default.call(this, parentId, options); -} + return { + year: resYear, + dayOfYear: resDayOfYear, + }; + } -ColumnSelectorDialog.prototype = Object.create(_dialog2.default.prototype); -ColumnSelectorDialog.prototype.constructor = ColumnSelectorDialog; + function weekOfYear(mom, dow, doy) { + var weekOffset = firstWeekOffset(mom.year(), dow, doy), + week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, + resWeek, + resYear; + + if (week < 1) { + resYear = mom.year() - 1; + resWeek = week + weeksInYear(resYear, dow, doy); + } else if (week > weeksInYear(mom.year(), dow, doy)) { + resWeek = week - weeksInYear(mom.year(), dow, doy); + resYear = mom.year() + 1; + } else { + resYear = mom.year(); + resWeek = week; + } -ColumnSelectorDialog.prototype._getTitle = function () { - return 'Select Column' + (this.options.label ? '(' + this.options.label + ')' : ''); -}; + return { + week: resWeek, + year: resYear, + }; + } -ColumnSelectorDialog.prototype._getDefaultWindowOption = function () { - var _this = this; - var defaultOption = { - theme: _chartOptionConst2.default.Theme, - width: '300px', - height: '400px', - maxWidth: '300px', - maxHeight: '400px', - resizable: false, - initContent: function initContent() { - _this._configurePosition(); - _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); - } - }; - if (this.options.aggregationEnabled === true) { - defaultOption.width = '600px'; - defaultOption.maxWidth = '600px'; + function weeksInYear(year, dow, doy) { + var weekOffset = firstWeekOffset(year, dow, doy), + weekOffsetNext = firstWeekOffset(year + 1, dow, doy); + return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; } - return defaultOption; -}; -ColumnSelectorDialog.prototype._createDialogContentsArea = function ($parent) { - this.$mainContainer = $('
'); - this.$columnArea = $('
'); - $parent.append(this.$mainContainer); - this.$mainContainer.append(this.$columnArea); + // FORMATTING - this._createFilterContents(this.$columnArea); - this._createColumnListContents(this.$columnArea); - this._createAggregationListContents(this.$mainContainer); - this._render(); -}; + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); -ColumnSelectorDialog.prototype._createFilterContents = function ($parent) { - var _this = this; - var $container = $('
'); - $parent.append($container); + // ALIASES - this.$filterControl = $(''); - $container.append(this.$filterControl); + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); - this.$filterControl.jqxInput({ - theme: _chartOptionConst2.default.Theme, - placeHolder: "Search Column", - height: 31, - minLength: 1 - }); + // PRIORITIES - this.$filterControl.on('keyup search', function (event) { - var colList = _this.$columnListBox.find('.bo-dialog-column-item-wrapper'); - var searchText = _this.$filterControl.val().toLowerCase(); - for (var i = 0; i < colList.length; i++) { - var colName = $(colList[i]).attr('value').toLowerCase(); - if (colName.indexOf(searchText) < 0) { - $(colList[i]).hide(); - } else { - $(colList[i]).show(); - } - } + addUnitPriority('week', 5); + addUnitPriority('isoWeek', 5); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 1)] = toInt(input); }); -}; -ColumnSelectorDialog.prototype._createColumnListContents = function ($parent) { - var _this = this; - var $container = $('
'); - this.$columnListBox = $('
'); - $parent.append($container); - $container.append(this.$columnListBox); + // HELPERS - var columns = this._getColumns() || []; + // LOCALES - // this._createAxisTypeList(this.$columnListBox); + function localeWeek(mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } - for (var i = 0; i < columns.length; i++) { - var columnType = this._getColumnType(columns, columns[i].name); - this._createColumnItem(columnType, columns[i]); + var defaultLocaleWeek = { + dow: 0, // Sunday is the first day of the week. + doy: 6, // The week that contains Jan 6th is the first week of the year. + }; + + function localeFirstDayOfWeek() { + return this._week.dow; } - this.$columnListBox.perfectScrollbar(); -}; -ColumnSelectorDialog.prototype._createColumnItem = function (columnType, column) { - var _this = this; - var $column; + function localeFirstDayOfYear() { + return this._week.doy; + } - if (columnType === 'SCHEMA') { - $column = $('
' + '
' + columnType + '
' + '
' + '
'); - } else { - $column = $('
' + '
' + columnType + '
' + '
' + '
'); + // MOMENTS + + function getSetWeek(input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); } - $column.find('.bos-dialog-column-item-label').text(column.name); - this.$columnListBox.append($column); + function getSetISOWeek(input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } - $column.click(function () { - var selected = _this.options.selected, - selectedIndex = _this.options.selectedIndex; - selected[selectedIndex] = selected[selectedIndex] || {}; - selected[selectedIndex].value = column.name; - selected[selectedIndex].name = column.name; //$(this).attr('value'); - selected[selectedIndex].type = $(this).attr('type'); + // FORMATTING - _this._fillAggregationList(); - _this._setAggregation(); - _this._render(); - _this._bindColumnSelectOnChanged(); + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); }); -}; -ColumnSelectorDialog.prototype._getColumnType = function (columnList, columnName) { - var columnType = ''; - columnList.forEach(function (column) { - if (columnName === column.name) { - columnType = column.internalType || column.type; + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PRIORITY + addUnitPriority('day', 11); + addUnitPriority('weekday', 11); + addUnitPriority('isoWeekday', 11); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', function (isStrict, locale) { + return locale.weekdaysMinRegex(isStrict); + }); + addRegexToken('ddd', function (isStrict, locale) { + return locale.weekdaysShortRegex(isStrict); + }); + addRegexToken('dddd', function (isStrict, locale) { + return locale.weekdaysRegex(isStrict); + }); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { + var weekday = config._locale.weekdaysParse(input, token, config._strict); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + getParsingFlags(config).invalidWeekday = input; } }); - return columnType; -}; -ColumnSelectorDialog.prototype._bindColumnSelectOnChanged = function () { - if (typeof this.options.onChanged === 'function') { - this.options.onChanged(this.options.selected[this.options.selectedIndex]); + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input !== 'string') { + return input; + } + + if (!isNaN(input)) { + return parseInt(input, 10); + } + + input = locale.weekdaysParse(input); + if (typeof input === 'number') { + return input; + } + + return null; } -}; -ColumnSelectorDialog.prototype._createAggregationListContents = function ($parent) { - if (this.options.aggregationEnabled !== true) return; - this.$aggregationArea = $('
'); - $parent.append(this.$aggregationArea); - this._fillAggregationList(); -}; + function parseIsoWeekday(input, locale) { + if (typeof input === 'string') { + return locale.weekdaysParse(input) % 7 || 7; + } + return isNaN(input) ? null : input; + } -ColumnSelectorDialog.prototype._getCurrentColumnType = function () { - var selected = this.options.selected, - selectedIndex = this.options.selectedIndex; - var colName = selected[selectedIndex].name; - var columns = this._getColumns(); + // LOCALES + function shiftWeekdays(ws, n) { + return ws.slice(n, 7).concat(ws.slice(0, n)); + } - var foundCol = columns.find(function (columnObj) { - return columnObj.name === colName; - }); + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split( + '_' + ), + defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + defaultWeekdaysRegex = matchWord, + defaultWeekdaysShortRegex = matchWord, + defaultWeekdaysMinRegex = matchWord; + + function localeWeekdays(m, format) { + var weekdays = isArray(this._weekdays) + ? this._weekdays + : this._weekdays[ + m && m !== true && this._weekdays.isFormat.test(format) + ? 'format' + : 'standalone' + ]; + return m === true + ? shiftWeekdays(weekdays, this._week.dow) + : m + ? weekdays[m.day()] + : weekdays; + } - if (!foundCol || $.inArray(foundCol.type, selectableColumnType) < 0) { - return; - } else { - return foundCol.type; + function localeWeekdaysShort(m) { + return m === true + ? shiftWeekdays(this._weekdaysShort, this._week.dow) + : m + ? this._weekdaysShort[m.day()] + : this._weekdaysShort; } -}; -ColumnSelectorDialog.prototype._getColumns = function () { - if (typeof this.options.getColumns === 'function') { - return this.options.getColumns(); - } else { - return this.options.getColumns; + function localeWeekdaysMin(m) { + return m === true + ? shiftWeekdays(this._weekdaysMin, this._week.dow) + : m + ? this._weekdaysMin[m.day()] + : this._weekdaysMin; } -}; -ColumnSelectorDialog.prototype._fillAggregationList = function () { - var _this = this; - if (!this.$aggregationArea) return; - var selected = this.options.selected, - selectedIndex = this.options.selectedIndex, - aggregationList = []; - this.$aggregationArea.empty(); - if ($.isEmptyObject(selected[selectedIndex])) { - aggregationList = this.options.aggregationMap.number; - this.$aggregationArea.attr('selectable', 'false'); - } else { + function handleStrictParse$1(weekdayName, format, strict) { + var i, + ii, + mom, + llc = weekdayName.toLocaleLowerCase(); + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._shortWeekdaysParse = []; + this._minWeekdaysParse = []; + + for (i = 0; i < 7; ++i) { + mom = createUTC([2000, 1]).day(i); + this._minWeekdaysParse[i] = this.weekdaysMin( + mom, + '' + ).toLocaleLowerCase(); + this._shortWeekdaysParse[i] = this.weekdaysShort( + mom, + '' + ).toLocaleLowerCase(); + this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); + } + } - var colType = this._getCurrentColumnType(); - if ($.isEmptyObject(colType)) { - this.$aggregationArea.attr('selectable', 'false'); + if (strict) { + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } } else { - aggregationList = this.options.aggregationMap[colType]; - this.$aggregationArea.attr('selectable', 'true'); + if (format === 'dddd') { + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else if (format === 'ddd') { + ii = indexOf.call(this._shortWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._minWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } else { + ii = indexOf.call(this._minWeekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._weekdaysParse, llc); + if (ii !== -1) { + return ii; + } + ii = indexOf.call(this._shortWeekdaysParse, llc); + return ii !== -1 ? ii : null; + } } } - for (var i = 0; i < aggregationList.length; i++) { - var aggrObj = aggregationList[i]; - var $column = $('
' + aggrObj.label + '
'); - this.$aggregationArea.append($column); - $column.click(function () { - var selected = _this.options.selected, - selectedIndex = _this.options.selectedIndex; - selected[selectedIndex] = selected[selectedIndex] || {}; - selected[selectedIndex].aggregation = $(this).attr('value'); - _this._renderAggregationList(); - _this._bindColumnSelectOnChanged(); - }); + function localeWeekdaysParse(weekdayName, format, strict) { + var i, mom, regex; + + if (this._weekdaysParseExact) { + return handleStrictParse$1.call(this, weekdayName, format, strict); + } + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + this._minWeekdaysParse = []; + this._shortWeekdaysParse = []; + this._fullWeekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + + mom = createUTC([2000, 1]).day(i); + if (strict && !this._fullWeekdaysParse[i]) { + this._fullWeekdaysParse[i] = new RegExp( + '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._shortWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + this._minWeekdaysParse[i] = new RegExp( + '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', + 'i' + ); + } + if (!this._weekdaysParse[i]) { + regex = + '^' + + this.weekdays(mom, '') + + '|^' + + this.weekdaysShort(mom, '') + + '|^' + + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if ( + strict && + format === 'dddd' && + this._fullWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'ddd' && + this._shortWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if ( + strict && + format === 'dd' && + this._minWeekdaysParse[i].test(weekdayName) + ) { + return i; + } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } } - this._setAggregation(); -}; + // MOMENTS -ColumnSelectorDialog.prototype._getCurrentAggregationList = function () { - if (!this.$aggregationArea) return; - var aggregationItemList = this.$aggregationArea.find('.bo-dialog-column-item-wrapper'); - var currentAggregationList = []; - for (var i = 0; i < aggregationItemList.length; i++) { - currentAggregationList.push($(aggregationItemList[i]).attr('value')); + function getSetDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } } - return currentAggregationList; -}; -ColumnSelectorDialog.prototype._setAggregation = function () { - if (!this.$aggregationArea) return; - var selected = this.options.selected, - selectedIndex = this.options.selectedIndex; - if ($.isEmptyObject(selected[selectedIndex])) return; - var currentAggregationList = this._getCurrentAggregationList(); - if ($.isEmptyObject(selected[selectedIndex].aggregation) || currentAggregationList.indexOf(selected[selectedIndex].aggregation) < 0) { - selected[selectedIndex].aggregation = currentAggregationList[0]; + function getSetLocaleDayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); } -}; -ColumnSelectorDialog.prototype._render = function () { - this._renderColumnList(); - this._renderAggregationList(); -}; + function getSetISODayOfWeek(input) { + if (!this.isValid()) { + return input != null ? this : NaN; + } -ColumnSelectorDialog.prototype._renderColumnList = function () { - var selected = this.options.selected, - selectedIndex = this.options.selectedIndex; - if ($.isEmptyObject(selected[selectedIndex]) || $.isEmptyObject(selected[selectedIndex].name)) return; + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. - this.$columnListBox.find('.selected').removeClass('selected'); - this.$columnListBox.find('.bo-dialog-column-item-wrapper[value="' + selected[selectedIndex].name + '"]').addClass('selected'); -}; -ColumnSelectorDialog.prototype._renderAggregationList = function () { - var selected = this.options.selected, - selectedIndex = this.options.selectedIndex; - if (!this.$aggregationArea) return; - if ($.isEmptyObject(selected[selectedIndex]) || $.isEmptyObject(selected[selectedIndex].aggregation)) return; - this.$aggregationArea.find('.selected').removeClass('selected'); - this.$aggregationArea.find('.bo-dialog-column-item-wrapper[value="' + selected[selectedIndex].aggregation + '"]').addClass('selected'); -}; - -ColumnSelectorDialog.prototype._getDialogResult = function () { - return this.options.selected; -}; - -exports.default = ColumnSelectorDialog; + if (input != null) { + var weekday = parseIsoWeekday(input, this.localeData()); + return this.day(this.day() % 7 ? weekday : weekday - 7); + } else { + return this.day() || 7; + } + } -/***/ }), -/* 121 */ -/***/ (function(module, exports, __webpack_require__) { + function weekdaysRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysStrictRegex; + } else { + return this._weekdaysRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysRegex')) { + this._weekdaysRegex = defaultWeekdaysRegex; + } + return this._weekdaysStrictRegex && isStrict + ? this._weekdaysStrictRegex + : this._weekdaysRegex; + } + } -"use strict"; + function weekdaysShortRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysShortStrictRegex; + } else { + return this._weekdaysShortRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysShortRegex')) { + this._weekdaysShortRegex = defaultWeekdaysShortRegex; + } + return this._weekdaysShortStrictRegex && isStrict + ? this._weekdaysShortStrictRegex + : this._weekdaysShortRegex; + } + } + function weekdaysMinRegex(isStrict) { + if (this._weekdaysParseExact) { + if (!hasOwnProp(this, '_weekdaysRegex')) { + computeWeekdaysParse.call(this); + } + if (isStrict) { + return this._weekdaysMinStrictRegex; + } else { + return this._weekdaysMinRegex; + } + } else { + if (!hasOwnProp(this, '_weekdaysMinRegex')) { + this._weekdaysMinRegex = defaultWeekdaysMinRegex; + } + return this._weekdaysMinStrictRegex && isStrict + ? this._weekdaysMinStrictRegex + : this._weekdaysMinRegex; + } + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + function computeWeekdaysParse() { + function cmpLenRev(a, b) { + return b.length - a.length; + } -var _baseComplexWidget = __webpack_require__(36); + var minPieces = [], + shortPieces = [], + longPieces = [], + mixedPieces = [], + i, + mom, + minp, + shortp, + longp; + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + mom = createUTC([2000, 1]).day(i); + minp = regexEscape(this.weekdaysMin(mom, '')); + shortp = regexEscape(this.weekdaysShort(mom, '')); + longp = regexEscape(this.weekdays(mom, '')); + minPieces.push(minp); + shortPieces.push(shortp); + longPieces.push(longp); + mixedPieces.push(minp); + mixedPieces.push(shortp); + mixedPieces.push(longp); + } + // Sorting makes sure if one weekday (or abbr) is a prefix of another it + // will match the longer piece. + minPieces.sort(cmpLenRev); + shortPieces.sort(cmpLenRev); + longPieces.sort(cmpLenRev); + mixedPieces.sort(cmpLenRev); + + this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._weekdaysShortRegex = this._weekdaysRegex; + this._weekdaysMinRegex = this._weekdaysRegex; + + this._weekdaysStrictRegex = new RegExp( + '^(' + longPieces.join('|') + ')', + 'i' + ); + this._weekdaysShortStrictRegex = new RegExp( + '^(' + shortPieces.join('|') + ')', + 'i' + ); + this._weekdaysMinStrictRegex = new RegExp( + '^(' + minPieces.join('|') + ')', + 'i' + ); + } -var _baseComplexWidget2 = _interopRequireDefault(_baseComplexWidget); + // FORMATTING -var _widgetFactory = __webpack_require__(3); + function hFormat() { + return this.hours() % 12 || 12; + } -var WidgetFactory = _interopRequireWildcard(_widgetFactory); + function kFormat() { + return this.hours() || 24; + } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, hFormat); + addFormatToken('k', ['kk', 2], 0, kFormat); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + addFormatToken('hmm', 0, 0, function () { + return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); + }); -/** - * options = { - * width: % or px default 100%, - * height:% or px default 100%, - * value: - * { - * left: 'px', - * right: 'px', - * top: 'px', - * bottom: 'px', - * }, (all value is px) - * position: ['left', 'top', 'right', 'bottom'], - * onChanged: function(){] - * } - * @param parentId - * @param options - * @constructor - */ -/** - * Created by mk90 on 2017-05-27. - */ + addFormatToken('hmmss', 0, 0, function () { + return ( + '' + + hFormat.apply(this) + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); -function CenterPositionWidget(parentId, options) { - _baseComplexWidget2.default.call(this, parentId, options); - this.renderProblem(); -} + addFormatToken('Hmm', 0, 0, function () { + return '' + this.hours() + zeroFill(this.minutes(), 2); + }); -CenterPositionWidget.prototype = Object.create(_baseComplexWidget2.default.prototype); -CenterPositionWidget.prototype.constructor = CenterPositionWidget; + addFormatToken('Hmmss', 0, 0, function () { + return ( + '' + + this.hours() + + zeroFill(this.minutes(), 2) + + zeroFill(this.seconds(), 2) + ); + }); -CenterPositionWidget.prototype._init = function () { - _baseComplexWidget2.default.prototype._init.call(this); - this.baseIconAppended = false; - this.inputValue = {}; - this.selectedUnit = {}; - if (typeof this.options.getValue === 'function') { - for (var i in this.options.value) { - this.options.value[i] = this.options.getValue(this.options.value[i]); - } + function meridiem(token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem( + this.hours(), + this.minutes(), + lowercase + ); + }); } -}; - -CenterPositionWidget.prototype._createContents = function ($parent) { - this.$mainControl = $('' + '
' + '
' + '
' + '
'); - $parent.append(this.$mainControl); + meridiem('a', true); + meridiem('A', false); - var _this = this; - this.options.position.forEach(function (position) { - _this._createPositionContent(position); - }); -}; + // ALIASES -CenterPositionWidget.prototype._createPositionContent = function (position) { - var $targetArea, positionInputControl, defaultValue, tempDom; + addUnitAlias('hour', 'h'); - tempDom = $('
'); - this.$mainControl.find('.bo-component-frame-center').append(tempDom); - this._createPositionInputContent(tempDom, position); -}; + // PRIORITY + addUnitPriority('hour', 13); -CenterPositionWidget.prototype._createPositionInputContent = function ($parent, position) { - var value = this.options.value && this.options.value[position] ? this.options.value[position] + '' : ''; + // PARSING - var postFix = value.indexOf('%') >= 0 ? '%' : 'px'; - var numberValue = value.replace(postFix, ''); + function matchMeridiem(isStrict, locale) { + return locale._meridiemParse; + } - var _this = this; - this.inputValue[position] = numberValue; - this.selectedUnit[position] = postFix; - var numberInput = WidgetFactory.createNumberInputWidget($parent, { - labelPosition: 'row', - label: position.toLocaleString(), - labelWidth: '40px', - width: this.options.width || '50px', - height: this.options.height || '25px', - value: numberValue, - problemKeyList: this.options.problemKeyList, - onChanged: function onChanged(value) { - _this.inputValue[position] = value; - _this.options.onChanged[position](value || value === 0 ? value + _this.selectedUnit[position] : ''); - } + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('k', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + addRegexToken('kk', match1to2, match2); + + addRegexToken('hmm', match3to4); + addRegexToken('hmmss', match5to6); + addRegexToken('Hmm', match3to4); + addRegexToken('Hmmss', match5to6); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['k', 'kk'], function (input, array, config) { + var kInput = toInt(input); + array[HOUR] = kInput === 24 ? 0 : kInput; }); - - var unitSwitchButton = WidgetFactory.createSwitchButtonWidget($parent, { - value: postFix, - width: '20px', - height: this.options.height || '25px', - margin: '2.5px 20px 2.5px 0px', - itemList: this.options.itemList || [{ value: 'px', label: 'Px' }, { value: '%', label: '%' }], - onChanged: function onChanged(changedUnit) { - _this.selectedUnit[position] = changedUnit; - _this.options.onChanged[position](_this.inputValue[position] ? _this.inputValue[position] + changedUnit : ''); - } + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; }); - unitSwitchButton.addCSSInMainControl({ - 'border-left': 'none' + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + getParsingFlags(config).bigHour = true; }); - - this._widgetList.push(numberInput); - this._widgetList.push(unitSwitchButton); -}; - -CenterPositionWidget.prototype.renderProblem = function (problems) { - var _this = this; - this._widgetList.forEach(function (widget) { - widget.renderProblem(problems); + addParseToken('hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); + getParsingFlags(config).bigHour = true; + }); + addParseToken('Hmm', function (input, array, config) { + var pos = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos)); + array[MINUTE] = toInt(input.substr(pos)); + }); + addParseToken('Hmmss', function (input, array, config) { + var pos1 = input.length - 4, + pos2 = input.length - 2; + array[HOUR] = toInt(input.substr(0, pos1)); + array[MINUTE] = toInt(input.substr(pos1, 2)); + array[SECOND] = toInt(input.substr(pos2)); }); -}; -exports.default = CenterPositionWidget; + // LOCALES -/***/ }), -/* 122 */ -/***/ (function(module, exports, __webpack_require__) { + function localeIsPM(input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return (input + '').toLowerCase().charAt(0) === 'p'; + } -"use strict"; + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, + // Setting the hour should keep the time, because the user explicitly + // specified which hour they want. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + getSetHour = makeGetSet('Hours', true); + function localeMeridiem(hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + var baseConfig = { + calendar: defaultCalendar, + longDateFormat: defaultLongDateFormat, + invalidDate: defaultInvalidDate, + ordinal: defaultOrdinal, + dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse, + relativeTime: defaultRelativeTime, -var _chartOptionBase = __webpack_require__(6); + months: defaultLocaleMonths, + monthsShort: defaultLocaleMonthsShort, -var _chartOptionBase2 = _interopRequireDefault(_chartOptionBase); + week: defaultLocaleWeek, -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + weekdays: defaultLocaleWeekdays, + weekdaysMin: defaultLocaleWeekdaysMin, + weekdaysShort: defaultLocaleWeekdaysShort, -function ColumnChartOption(parentId, options) { - _chartOptionBase2.default.call(this, parentId, options); -} /** - * Created by SDS on 2017-05-10. - */ + meridiemParse: defaultLocaleMeridiemParse, + }; -ColumnChartOption.prototype = Object.create(_chartOptionBase2.default.prototype); -ColumnChartOption.prototype.constructor = ColumnChartOption; + // internal storage for locale config files + var locales = {}, + localeFamilies = {}, + globalLocale; + + function commonPrefix(arr1, arr2) { + var i, + minl = Math.min(arr1.length, arr2.length); + for (i = 0; i < minl; i += 1) { + if (arr1[i] !== arr2[i]) { + return i; + } + } + return minl; + } -ColumnChartOption.prototype._init = function () { - _chartOptionBase2.default.prototype._init.call(this); - var columnSelectorSetting = this._createColumnSelectorSetting(); - columnSelectorSetting = this._configureColumnConf(columnSelectorSetting); - this.options.setting.columnSelector = columnSelectorSetting; - this.options.setting.stripLine = this.options.chartOption.plotOptions.column.stripLine; - this.options.setting.tooltip = this.options.chartOption.plotOptions.column.tooltip; - this.options.setting.scaleOpt = ['yaxis']; -}; + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } -ColumnChartOption.prototype._createColumnSelectorSetting = function () { - return [[{ - key: 'xAxis', - ref: this.options.chartOption.xAxis[0] - }, { - key: 'yAxis', - ref: this.options.chartOption.yAxis[0] - }, { - key: 'colorBy', - ref: this.options.chartOption.colorBy[0] - }]]; -}; + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, + j, + next, + locale, + split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if ( + next && + next.length >= j && + commonPrefix(split, next) >= j - 1 + ) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return globalLocale; + } -ColumnChartOption.prototype.getDefaultControlContainerList = function () { - return ['Data', 'ToolTipTrigger', 'Title', 'Axis', 'Legend', 'Marker', 'Lines', 'Frame']; -}; + function loadLocale(name) { + var oldLocale = null, + aliasedRequire; + // TODO: Find a better way to register and load all the locales in Node + if ( + locales[name] === undefined && + typeof module !== 'undefined' && + module && + module.exports + ) { + try { + oldLocale = globalLocale._abbr; + aliasedRequire = require; + __webpack_require__(253)("./" + name); + getSetGlobalLocale(oldLocale); + } catch (e) { + // mark as not found to avoid repeating expensive file require call causing high CPU + // when trying to find en-US, en_US, en-us for every format call + locales[name] = null; // null means not found + } + } + return locales[name]; + } -exports.default = ColumnChartOption; + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function getSetGlobalLocale(key, values) { + var data; + if (key) { + if (isUndefined(values)) { + data = getLocale(key); + } else { + data = defineLocale(key, values); + } -/***/ }), -/* 123 */ -/***/ (function(module, exports, __webpack_require__) { + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } else { + if (typeof console !== 'undefined' && console.warn) { + //warn user if arguments are passed but the locale could not be set + console.warn( + 'Locale ' + key + ' not found. Did you forget to load it?' + ); + } + } + } -"use strict"; + return globalLocale._abbr; + } + function defineLocale(name, config) { + if (config !== null) { + var locale, + parentConfig = baseConfig; + config.abbr = name; + if (locales[name] != null) { + deprecateSimple( + 'defineLocaleOverride', + 'use moment.updateLocale(localeName, config) to change ' + + 'an existing locale. moment.defineLocale(localeName, ' + + 'config) should only be used for creating a new locale ' + + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.' + ); + parentConfig = locales[name]._config; + } else if (config.parentLocale != null) { + if (locales[config.parentLocale] != null) { + parentConfig = locales[config.parentLocale]._config; + } else { + locale = loadLocale(config.parentLocale); + if (locale != null) { + parentConfig = locale._config; + } else { + if (!localeFamilies[config.parentLocale]) { + localeFamilies[config.parentLocale] = []; + } + localeFamilies[config.parentLocale].push({ + name: name, + config: config, + }); + return null; + } + } + } + locales[name] = new Locale(mergeConfigs(parentConfig, config)); -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.createFilter = createFilter; -exports.getFilterTypes = getFilterTypes; + if (localeFamilies[name]) { + localeFamilies[name].forEach(function (x) { + defineLocale(x.name, x.config); + }); + } -var _filterControlBase = __webpack_require__(76); + // backwards compat for now: also set the locale + // make sure we set the locale AFTER all child locales have been + // created, so we won't end up with the child locale set. + getSetGlobalLocale(name); -var _filterControlBase2 = _interopRequireDefault(_filterControlBase); + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } -var _filterControlIndex = __webpack_require__(298); + function updateLocale(name, config) { + if (config != null) { + var locale, + tmpLocale, + parentConfig = baseConfig; -var FilterControl = _interopRequireWildcard(_filterControlIndex); + if (locales[name] != null && locales[name].parentLocale != null) { + // Update existing child locale in-place to avoid memory-leaks + locales[name].set(mergeConfigs(locales[name]._config, config)); + } else { + // MERGE + tmpLocale = loadLocale(name); + if (tmpLocale != null) { + parentConfig = tmpLocale._config; + } + config = mergeConfigs(parentConfig, config); + if (tmpLocale == null) { + // updateLocale is called for creating a new locale + // Set abbr so it will have a name (getters return + // undefined otherwise). + config.abbr = name; + } + locale = new Locale(config); + locale.parentLocale = locales[name]; + locales[name] = locale; + } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + // backwards compat for now: also set the locale + getSetGlobalLocale(name); + } else { + // pass null for config to unupdate, useful for tests + if (locales[name] != null) { + if (locales[name].parentLocale != null) { + locales[name] = locales[name].parentLocale; + if (name === getSetGlobalLocale()) { + getSetGlobalLocale(name); + } + } else if (locales[name] != null) { + delete locales[name]; + } + } + } + return locales[name]; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // returns locale data + function getLocale(key) { + var locale; -/** - * Source: filter-control-factory.js - * Created by ji_sung.park on 2017-09-25. - */ + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } -function createFilter(parentId, type, options) { - var types = this.getFilterTypes(); - if (types.indexOf(type) === -1) return new _filterControlBase2.default(parentId, options);else return new FilterControl[type](parentId, options); -} + if (!key) { + return globalLocale; + } -function getFilterTypes() { - return Object.keys(FilterControl); -} + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } -/***/ }), -/* 124 */, -/* 125 */, -/* 126 */, -/* 127 */, -/* 128 */, -/* 129 */, -/* 130 */, -/* 131 */, -/* 132 */, -/* 133 */, -/* 134 */, -/* 135 */, -/* 136 */, -/* 137 */, -/* 138 */, -/* 139 */, -/* 140 */, -/* 141 */, -/* 142 */, -/* 143 */, -/* 144 */, -/* 145 */, -/* 146 */, -/* 147 */, -/* 148 */, -/* 149 */, -/* 150 */, -/* 151 */, -/* 152 */, -/* 153 */, -/* 154 */, -/* 155 */, -/* 156 */, -/* 157 */, -/* 158 */, -/* 159 */, -/* 160 */, -/* 161 */, -/* 162 */, -/* 163 */, -/* 164 */, -/* 165 */, -/* 166 */, -/* 167 */, -/* 168 */, -/* 169 */, -/* 170 */, -/* 171 */, -/* 172 */, -/* 173 */, -/* 174 */, -/* 175 */, -/* 176 */, -/* 177 */, -/* 178 */, -/* 179 */, -/* 180 */, -/* 181 */, -/* 182 */, -/* 183 */, -/* 184 */, -/* 185 */, -/* 186 */, -/* 187 */, -/* 188 */, -/* 189 */, -/* 190 */, -/* 191 */, -/* 192 */, -/* 193 */, -/* 194 */, -/* 195 */, -/* 196 */, -/* 197 */, -/* 198 */, -/* 199 */, -/* 200 */, -/* 201 */, -/* 202 */, -/* 203 */, -/* 204 */, -/* 205 */, -/* 206 */, -/* 207 */, -/* 208 */, -/* 209 */, -/* 210 */, -/* 211 */, -/* 212 */, -/* 213 */, -/* 214 */, -/* 215 */, -/* 216 */, -/* 217 */, -/* 218 */, -/* 219 */, -/* 220 */, -/* 221 */, -/* 222 */, -/* 223 */, -/* 224 */, -/* 225 */, -/* 226 */, -/* 227 */, -/* 228 */, -/* 229 */, -/* 230 */, -/* 231 */, -/* 232 */, -/* 233 */, -/* 234 */, -/* 235 */, -/* 236 */, -/* 237 */, -/* 238 */, -/* 239 */, -/* 240 */, -/* 241 */, -/* 242 */, -/* 243 */, -/* 244 */, -/* 245 */, -/* 246 */, -/* 247 */, -/* 248 */, -/* 249 */, -/* 250 */, -/* 251 */, -/* 252 */, -/* 253 */, -/* 254 */, -/* 255 */, -/* 256 */, -/* 257 */, -/* 258 */, -/* 259 */, -/* 260 */, -/* 261 */, -/* 262 */, -/* 263 */, -/* 264 */, -/* 265 */, -/* 266 */, -/* 267 */, -/* 268 */, -/* 269 */, -/* 270 */, -/* 271 */, -/* 272 */ -/***/ (function(module, exports, __webpack_require__) { + return chooseLocale(key); + } -"use strict"; + function listLocales() { + return keys(locales); + } + function checkOverflow(m) { + var overflow, + a = m._a; + + if (a && getParsingFlags(m).overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 + ? MONTH + : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) + ? DATE + : a[HOUR] < 0 || + a[HOUR] > 24 || + (a[HOUR] === 24 && + (a[MINUTE] !== 0 || + a[SECOND] !== 0 || + a[MILLISECOND] !== 0)) + ? HOUR + : a[MINUTE] < 0 || a[MINUTE] > 59 + ? MINUTE + : a[SECOND] < 0 || a[SECOND] > 59 + ? SECOND + : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 + ? MILLISECOND + : -1; + + if ( + getParsingFlags(m)._overflowDayOfYear && + (overflow < YEAR || overflow > DATE) + ) { + overflow = DATE; + } + if (getParsingFlags(m)._overflowWeeks && overflow === -1) { + overflow = WEEK; + } + if (getParsingFlags(m)._overflowWeekday && overflow === -1) { + overflow = WEEKDAY; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Data = Data; -exports.ComplexData = ComplexData; -exports.Format = Format; -exports.FormatCard = FormatCard; -exports.Title = Title; -exports.Axis = Axis; -exports.AxisR = AxisR; -exports.AxisEach = AxisEach; -exports.AxisRadar = AxisRadar; -exports.Legend = Legend; -exports.VisualMap = VisualMap; -exports.Marker = Marker; -exports.MarkerLine = MarkerLine; -exports.Lines = Lines; -exports.LinesWithTrend = LinesWithTrend; -exports.Frame = Frame; -exports.FrameStyle = FrameStyle; -exports.FramePie = FramePie; -exports.FrameDonut = FrameDonut; -exports.ToolTip = ToolTip; -exports.Label = Label; -exports.Figure = Figure; -exports.MapData = MapData; -exports.Layers = Layers; -exports.MapStyle = MapStyle; -exports.ToolTipTrigger = ToolTipTrigger; -exports.Grid = Grid; + getParsingFlags(m).overflow = overflow; + } -var _controlContainer = __webpack_require__(273); + return m; + } -var _controlContainer2 = _interopRequireDefault(_controlContainer); + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, + tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, + isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], + ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], + ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], + ['GGGG-[W]WW', /\d{4}-W\d\d/, false], + ['YYYY-DDD', /\d{4}-\d{3}/], + ['YYYY-MM', /\d{4}-\d\d/, false], + ['YYYYYYMMDD', /[+-]\d{10}/], + ['YYYYMMDD', /\d{8}/], + ['GGGG[W]WWE', /\d{4}W\d{3}/], + ['GGGG[W]WW', /\d{4}W\d{2}/, false], + ['YYYYDDD', /\d{7}/], + ['YYYYMM', /\d{6}/, false], + ['YYYY', /\d{4}/, false], + ], + // iso time formats and regexes + isoTimes = [ + ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], + ['HH:mm:ss', /\d\d:\d\d:\d\d/], + ['HH:mm', /\d\d:\d\d/], + ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], + ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], + ['HHmmss', /\d\d\d\d\d\d/], + ['HHmm', /\d\d\d\d/], + ['HH', /\d\d/], + ], + aspNetJsonRegex = /^\/?Date\((-?\d+)/i, + // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3 + rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, + obsOffsets = { + UT: 0, + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60, + }; -var _controlFactory = __webpack_require__(563); + // date from iso format + function configFromISO(config) { + var i, + l, + string = config._i, + match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), + allowTime, + dateFormat, + timeFormat, + tzFormat; + + if (match) { + getParsingFlags(config).iso = true; + + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(match[1])) { + dateFormat = isoDates[i][0]; + allowTime = isoDates[i][2] !== false; + break; + } + } + if (dateFormat == null) { + config._isValid = false; + return; + } + if (match[3]) { + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(match[3])) { + // match[2] should be 'T' or space + timeFormat = (match[2] || ' ') + isoTimes[i][0]; + break; + } + } + if (timeFormat == null) { + config._isValid = false; + return; + } + } + if (!allowTime && timeFormat != null) { + config._isValid = false; + return; + } + if (match[4]) { + if (tzRegex.exec(match[4])) { + tzFormat = 'Z'; + } else { + config._isValid = false; + return; + } + } + config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } -var ControlFactory = _interopRequireWildcard(_controlFactory); + function extractFromRFC2822Strings( + yearStr, + monthStr, + dayStr, + hourStr, + minuteStr, + secondStr + ) { + var result = [ + untruncateYear(yearStr), + defaultLocaleMonthsShort.indexOf(monthStr), + parseInt(dayStr, 10), + parseInt(hourStr, 10), + parseInt(minuteStr, 10), + ]; + + if (secondStr) { + result.push(parseInt(secondStr, 10)); + } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + return result; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function untruncateYear(yearStr) { + var year = parseInt(yearStr, 10); + if (year <= 49) { + return 2000 + year; + } else if (year <= 999) { + return 1900 + year; + } + return year; + } -/** - * Created by SDS on 2017-05-10. - */ + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s + .replace(/\([^)]*\)|[\n\t]/g, ' ') + .replace(/(\s\s+)/g, ' ') + .replace(/^\s\s*/, '') + .replace(/\s\s*$/, ''); + } -var expanderStatus = {}; + function checkWeekday(weekdayStr, parsedInput, config) { + if (weekdayStr) { + // TODO: Replace the vanilla JS Date object with an independent day-of-week check. + var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), + weekdayActual = new Date( + parsedInput[0], + parsedInput[1], + parsedInput[2] + ).getDay(); + if (weekdayProvided !== weekdayActual) { + getParsingFlags(config).weekdayMismatch = true; + config._isValid = false; + return false; + } + } + return true; + } -function Data(previewText) { - return new _controlContainer2.default({ - headerKey: 'Data', - headerLabel: 'Data', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createColumnSelectControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + function calculateOffset(obsOffset, militaryOffset, numOffset) { + if (obsOffset) { + return obsOffsets[obsOffset]; + } else if (militaryOffset) { + // the only allowed military tz is Z + return 0; + } else { + var hm = parseInt(numOffset, 10), + m = hm % 100, + h = (hm - m) / 100; + return h * 60 + m; + } + } -function ComplexData(previewText) { - return new _controlContainer2.default({ - headerKey: 'Data', - headerLabel: 'Chart Type', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createColumnSelectControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // date and time from ref 2822 format + function configFromRFC2822(config) { + var match = rfc2822.exec(preprocessRFC2822(config._i)), + parsedArray; + if (match) { + parsedArray = extractFromRFC2822Strings( + match[4], + match[3], + match[2], + match[5], + match[6], + match[7] + ); + if (!checkWeekday(match[1], parsedArray, config)) { + return; + } -function Format(previewText) { - return new _controlContainer2.default({ - headerKey: 'Format', - headerLabel: 'Formatter', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createFormatControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + config._a = parsedArray; + config._tzm = calculateOffset(match[8], match[9], match[10]); -function FormatCard(previewText) { - return new _controlContainer2.default({ - headerKey: 'FormatCard', - headerLabel: 'Formatter', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createFormatCardControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + config._d = createUTCDate.apply(null, config._a); + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); -function Title(previewText) { - return new _controlContainer2.default({ - headerKey: 'Title', - headerLabel: 'Title', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createTitleControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + getParsingFlags(config).rfc2822 = true; + } else { + config._isValid = false; + } + } -function Axis(previewText) { - var _this = this; - return new _controlContainer2.default({ - headerKey: 'Axis', - headerLabel: 'Axis Label', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - //TODO: chart-validator-base()에 _validateAxisViewRange 주석도 같이해제할것. - //TODO: 2017 하반기 PVR 기능 검증 문제로 주석처리함 - // controlList.push(ControlFactory.createAxisViewRangeControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisTitleControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisLabelControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisScaleControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } -function AxisR(previewText) { - return new _controlContainer2.default({ - headerKey: 'Axis', - headerLabel: 'Axis Label', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createAxisViewRangeControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisTitleControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisLabelControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisScaleControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } -function AxisEach(previewText) { - var _this = this; - return new _controlContainer2.default({ - headerKey: 'Axis', - headerLabel: 'Axis Label', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - //TODO: chart-validator-base()에 _validateAxisViewRange 주석도 같이해제할것. - //TODO: 2017 하반기 PVR 기능 검증 문제로 주석처리함 - // controlList.push(ControlFactory.createAxisViewRangeControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisTitleSeparatedControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisLabelSeparatedControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + configFromRFC2822(config); + if (config._isValid === false) { + delete config._isValid; + } else { + return; + } -function AxisRadar(previewText) { - return new _controlContainer2.default({ - headerKey: 'AxisRadar', - headerLabel: 'Axis Label', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createAxisRadarViewRangeControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAxisRadarLabelControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + if (config._strict) { + config._isValid = false; + } else { + // Final attempt, use Input Fallback + hooks.createFromInputFallback(config); + } + } -function Legend(previewText) { - return new _controlContainer2.default({ - headerKey: 'Legend', - headerLabel: 'Legend', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createCustomLegendControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + hooks.createFromInputFallback = deprecate( + 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + + 'discouraged and will be removed in an upcoming major release. Please refer to ' + + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); -function VisualMap(previewText) { - return new _controlContainer2.default({ - headerKey: 'VisualMap', - headerLabel: 'Legend', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - // controlList.push(ControlFactory.createVisualMapControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createVisualMapAlignControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createVisualMapValueControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } -function Marker(previewText) { - return new _controlContainer2.default({ - headerKey: 'Marker', - headerLabel: 'Style', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createMarkerControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + function currentDateArray(config) { + // hooks is actually the exported moment object + var nowValue = new Date(hooks.now()); + if (config._useUTC) { + return [ + nowValue.getUTCFullYear(), + nowValue.getUTCMonth(), + nowValue.getUTCDate(), + ]; + } + return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; + } -function MarkerLine(previewText) { - return new _controlContainer2.default({ - headerKey: 'MarkerLine', - headerLabel: 'Style', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createMarkerLineControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray(config) { + var i, + date, + input = [], + currentDate, + expectedWeekday, + yearToUse; + + if (config._d) { + return; + } -function Lines(previewText) { - return new _controlContainer2.default({ - headerKey: 'Lines', - headerLabel: 'Lines', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createStripLineControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + currentDate = currentDateArray(config); -function LinesWithTrend(previewText) { - return new _controlContainer2.default({ - headerKey: 'LinesWithTrend', - headerLabel: 'Lines', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createStripLineControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createTrendLineControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } -function Frame(previewText) { - return new _controlContainer2.default({ - headerKey: 'Frame', - headerLabel: 'Frame', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createFrameControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + //if the day of the year is set, figure out what it is + if (config._dayOfYear != null) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); -function FrameStyle(previewText) { - return new _controlContainer2.default({ - headerKey: 'Frame', - headerLabel: 'Frame', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createFrameStyleControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + if ( + config._dayOfYear > daysInYear(yearToUse) || + config._dayOfYear === 0 + ) { + getParsingFlags(config)._overflowDayOfYear = true; + } -function FramePie(previewText) { - return new _controlContainer2.default({ - headerKey: 'Frame', - headerLabel: 'Frame', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createFramePieControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } -function FrameDonut(previewText) { - return new _controlContainer2.default({ - headerKey: 'Frame', - headerLabel: 'Frame', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createFrameDonutControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} - -function ToolTip(previewText) { - return new _controlContainer2.default({ - headerKey: 'ToolTip', - headerLabel: 'ToolTip', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createToolTipControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} - -function Label(previewText) { - return new _controlContainer2.default({ - headerKey: 'Label', - headerLabel: 'Label', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createLabelControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} - -function Figure(previewText) { - return new _controlContainer2.default({ - headerKey: 'Figure', - headerLabel: 'Style', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createFigureControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } -function MapData(previewText) { - return new _controlContainer2.default({ - headerKey: 'Data', - headerLabel: 'Data', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createMapSelectControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = + config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i]; + } -function Layers(previewText) { - return new _controlContainer2.default({ - headerKey: 'Layers', - headerLabel: 'Layers', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createLayersControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // Check for 24:00:00.000 + if ( + config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0 + ) { + config._nextDay = true; + config._a[HOUR] = 0; + } -function MapStyle(previewText) { - return new _controlContainer2.default({ - headerKey: 'MapStyle', - headerLabel: 'Map Style', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - //TODO: make new Control about headerKey('MapStyle') - controlList.push(ControlFactory.createFrameMapControl($contentsArea, option, headerKey)); - controlList.push(ControlFactory.createAreaControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + config._d = (config._useUTC ? createUTCDate : createDate).apply( + null, + input + ); + expectedWeekday = config._useUTC + ? config._d.getUTCDay() + : config._d.getDay(); + + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } -function ToolTipTrigger(previewText) { - return new _controlContainer2.default({ - headerKey: 'ToolTipTrigger', - headerLabel: 'ToolTip', - headerPreviewText: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createToolTipTriggerControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + if (config._nextDay) { + config._a[HOUR] = 24; + } -function Grid(previewText) { - return new _controlContainer2.default({ - headerKey: 'Grid', - headerLabel: 'Grid', - headerPreviewTExt: previewText, - $parent: this.$parent, - contentInit: function contentInit($contentsArea, headerKey, option, controlList) { - controlList.push(ControlFactory.createGridControl($contentsArea, option, headerKey)); - }, - optionRef: this.options, - expanderStatus: expanderStatus - }); -} + // check for mismatching day of week + if ( + config._w && + typeof config._w.d !== 'undefined' && + config._w.d !== expectedWeekday + ) { + getParsingFlags(config).weekdayMismatch = true; + } + } -/***/ }), -/* 273 */ -/***/ (function(module, exports, __webpack_require__) { + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults( + w.GG, + config._a[YEAR], + weekOfYear(createLocal(), 1, 4).year + ); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + if (weekday < 1 || weekday > 7) { + weekdayOverflow = true; + } + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; -"use strict"; + curWeek = weekOfYear(createLocal(), dow, doy); + weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); -Object.defineProperty(exports, "__esModule", { - value: true -}); + // Default to current week. + week = defaults(w.w, curWeek.week); -var _chartOptionConst = __webpack_require__(17); + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < 0 || weekday > 6) { + weekdayOverflow = true; + } + } else if (w.e != null) { + // local weekday -- counting starts from beginning of week + weekday = w.e + dow; + if (w.e < 0 || w.e > 6) { + weekdayOverflow = true; + } + } else { + // default to beginning of week + weekday = dow; + } + } + if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { + getParsingFlags(config)._overflowWeeks = true; + } else if (weekdayOverflow != null) { + getParsingFlags(config)._overflowWeekday = true; + } else { + temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + } -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + // constant that refers to the ISO standard + hooks.ISO_8601 = function () {}; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // constant that refers to the RFC 2822 form + hooks.RFC_2822 = function () {}; -// var containerOption = { -// headerLabel: '', //expander header label -// headerPreviewText: '', //expander header preview text -// $parent: '', -// contentInitCallback: function () {}, // create control function -// optionRef: this.options // content parameter when init(ex.chart option) -// }; -function ControlContainer(containerOption) { - this._init(); - this._createExpander(containerOption); -} /** - * Created by SDS on 2017-05-10. - */ + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === hooks.ISO_8601) { + configFromISO(config); + return; + } + if (config._f === hooks.RFC_2822) { + configFromRFC2822(config); + return; + } + config._a = []; + getParsingFlags(config).empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, + parsedInput, + tokens, + token, + skipped, + stringLength = string.length, + totalParsedInputLength = 0, + era; + + tokens = + expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || + [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + getParsingFlags(config).unusedInput.push(skipped); + } + string = string.slice( + string.indexOf(parsedInput) + parsedInput.length + ); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + getParsingFlags(config).empty = false; + } else { + getParsingFlags(config).unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } else if (config._strict && !parsedInput) { + getParsingFlags(config).unusedTokens.push(token); + } + } -ControlContainer.prototype._init = function () { - this._controlList = []; //render -}; + // add remaining unparsed input length to the string + getParsingFlags(config).charsLeftOver = + stringLength - totalParsedInputLength; + if (string.length > 0) { + getParsingFlags(config).unusedInput.push(string); + } -ControlContainer.prototype._createExpander = function (containerOption) { - var _this = this; + // clear _12h flag if hour is <= 12 + if ( + config._a[HOUR] <= 12 && + getParsingFlags(config).bigHour === true && + config._a[HOUR] > 0 + ) { + getParsingFlags(config).bigHour = undefined; + } - this.$propertyControl = $('' + '
' + '
' + '
' + '
'); + getParsingFlags(config).parsedDateParts = config._a.slice(0); + getParsingFlags(config).meridiem = config._meridiem; + // handle meridiem + config._a[HOUR] = meridiemFixWrap( + config._locale, + config._a[HOUR], + config._meridiem + ); + + // handle era + era = getParsingFlags(config).era; + if (era !== null) { + config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]); + } - var $contentsArea = this.$propertyControl.find('.bo-control-container-contents'); - containerOption.$parent.append(this.$propertyControl); + configFromArray(config); + checkOverflow(config); + } - var callback = containerOption.contentInit; - var chartOption = containerOption.optionRef; - chartOption.expanderCallBack = _this.headerContentPreviewChanged.bind(_this); + function meridiemFixWrap(locale, hour, meridiem) { + var isPm; - this.$propertyControl.jqxExpander({ - theme: _chartOptionConst2.default.Theme, - animationType: 'none', - arrowPosition: "left", - expanded: false, - initContent: function initContent() { - if (typeof callback === 'function') { - $contentsArea.css('height', 'auto'); - callback.call(_this, $contentsArea, containerOption.headerKey, chartOption, _this._controlList); - containerOption.$parent.parent().perfectScrollbar('update'); + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; } + return hour; + } else { + // this is not supposed to happen + return hour; } - }); + } - this.$propertyControl.jqxExpander('setHeaderContent', '
'); - this._createHeaderContent(this.$propertyControl.find('.bo-control-container-head-contents'), containerOption.headerLabel, containerOption.headerPreviewText); + // date from string and array of format strings + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + scoreToBeat, + i, + currentScore, + validFormatFound, + bestFormatIsValid = false; + + if (config._f.length === 0) { + getParsingFlags(config).invalidFormat = true; + config._d = new Date(NaN); + return; + } - this.$propertyControl.jqxExpander({ - expanded: containerOption.expanderStatus[containerOption.headerLabel] || chartOption.expanded || false - }); - this.$propertyControl.on('collapsed', function () { - $(this).removeClass('bos-control-container-expander-expanded').addClass('bos-control-container-expander-collapsed'); - containerOption.$parent.parent().perfectScrollbar('update'); - containerOption.expanderStatus[containerOption.headerLabel] = false; - }); - this.$propertyControl.on('expanded', function () { - $(this).removeClass('bos-control-container-expander-collapsed').addClass('bos-control-container-expander-expanded'); - containerOption.$parent.parent().perfectScrollbar('update'); - containerOption.expanderStatus[containerOption.headerLabel] = true; - }); -}; + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + validFormatFound = false; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); -ControlContainer.prototype._createHeaderContent = function ($target, label, previewValue) { - $target.append($('
' + label + '
')); - $target.append($('
')); + if (isValid(tempConfig)) { + validFormatFound = true; + } - this.$headerPreview = $target.find('.bo-control-container-header-preview'); - this.$headerPreview.css({ 'max-width': '160px' }); + // if there is any input that was not parsed add a penalty for that format + currentScore += getParsingFlags(tempConfig).charsLeftOver; - this.headerContentPreviewChanged(previewValue, this.$headerPreview); -}; + //or tokens + currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; -ControlContainer.prototype.headerContentPreviewChanged = function (previewValue, $previewTarget) { - // this.setHeaderContentPreviewSize(); - if ((previewValue || previewValue === '') && typeof previewValue === "string") { - $previewTarget.addClass('bos-text-overflow-hidden'); - $previewTarget.removeClass('bos-display-flex'); - $previewTarget.attr('title', previewValue); - $previewTarget.text(previewValue); - } else if (previewValue instanceof jQuery) { - $previewTarget.addClass('bos-display-flex'); - $previewTarget.removeClass('bos-text-overflow-hidden'); - $previewTarget.text(''); - $previewTarget.removeAttr('title'); - $previewTarget.children().remove(); - $previewTarget.append(previewValue); - } -}; + getParsingFlags(tempConfig).score = currentScore; -// ControlContainer.prototype.setHeaderContentPreviewSize = function () { -// overflow bug 해결되면 추가해야함. 지금은 그냥 고정해야겠다 -// if (this.$propertyControl.width() > 0 && !this.$headerPreview.css('max-width')) { -// this.$headerPreview.css({'max-width': this.$propertyControl.width() / 2}); -// } -// }; + if (!bestFormatIsValid) { + if ( + scoreToBeat == null || + currentScore < scoreToBeat || + validFormatFound + ) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + if (validFormatFound) { + bestFormatIsValid = true; + } + } + } else { + if (currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + } + extend(config, bestMoment || tempConfig); + } -ControlContainer.prototype.getControlList = function () { - return this._controlList; -}; + function configFromObject(config) { + if (config._d) { + return; + } -ControlContainer.prototype.render = function () { - if (!this._controlList) { - return; - } - this._controlList.forEach(function (control) { - control.render(); - }); -}; + var i = normalizeObjectUnits(config._i), + dayOrDate = i.day === undefined ? i.date : i.day; + config._a = map( + [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond], + function (obj) { + return obj && parseInt(obj, 10); + } + ); -ControlContainer.prototype.close = function () { - if (!this._controlList) { - return; + configFromArray(config); } - this._controlList.forEach(function (control) { - control.close(); - }); -}; -ControlContainer.prototype.destroy = function () { - this._controlList.forEach(function (control) { - control.destroy(); - }); - this.$propertyControl.remove(); //껍데기도 지워줘야함 ㅜㅜ -}; + function createFromConfig(config) { + var res = new Moment(checkOverflow(prepareConfig(config))); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } -exports.default = ControlContainer; + return res; + } -/***/ }), -/* 274 */ -/***/ (function(module, exports, __webpack_require__) { + function prepareConfig(config) { + var input = config._i, + format = config._f; -"use strict"; + config._locale = config._locale || getLocale(config._l); + if (input === null || (format === undefined && input === '')) { + return createInvalid({ nullInput: true }); + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } -var _baseControl = __webpack_require__(9); + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isDate(input)) { + config._d = input; + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } -var _baseControl2 = _interopRequireDefault(_baseControl); + if (!isValid(config)) { + config._d = null; + } -var _widgetFactory = __webpack_require__(3); + return config; + } -var WidgetFactory = _interopRequireWildcard(_widgetFactory); + function configFromInput(config) { + var input = config._i; + if (isUndefined(input)) { + config._d = new Date(hooks.now()); + } else if (isDate(input)) { + config._d = new Date(input.valueOf()); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (isObject(input)) { + configFromObject(config); + } else if (isNumber(input)) { + // from milliseconds + config._d = new Date(input); + } else { + hooks.createFromInputFallback(config); + } + } -var _chartOptionConst = __webpack_require__(17); + function createLocalOrUTC(input, format, locale, strict, isUTC) { + var c = {}; -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + if (format === true || format === false) { + strict = format; + format = undefined; + } -var _chartOptionUtil = __webpack_require__(30); + if (locale === true || locale === false) { + strict = locale; + locale = undefined; + } -var ChartOptionUtil = _interopRequireWildcard(_chartOptionUtil); + if ( + (isObject(input) && isObjectEmpty(input)) || + (isArray(input) && input.length === 0) + ) { + input = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + + return createFromConfig(c); + } -var _columnSelectorWidget = __webpack_require__(58); + function createLocal(input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } -var _columnSelectorWidget2 = _interopRequireDefault(_columnSelectorWidget); + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other < this ? this : other; + } else { + return createInvalid(); + } + } + ), + prototypeMax = deprecate( + 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', + function () { + var other = createLocal.apply(null, arguments); + if (this.isValid() && other.isValid()) { + return other > this ? this : other; + } else { + return createInvalid(); + } + } + ); -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (!moments[i].isValid() || moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // TODO: Use [].sort instead? + function min() { + var args = [].slice.call(arguments, 0); -function ColumnSelectControl(parentId, options, headerKey) { - _baseControl2.default.call(this, parentId, options, headerKey); -} /** - * Created by mk90.kim on 2017-05-10. - */ + return pickBy('isBefore', args); + } -ColumnSelectControl.prototype = Object.create(_baseControl2.default.prototype); -ColumnSelectControl.prototype.constructor = ColumnSelectControl; + function max() { + var args = [].slice.call(arguments, 0); -ColumnSelectControl.prototype._init = function () { - _baseControl2.default.prototype._init.call(this); - this._widgetList = []; -}; + return pickBy('isAfter', args); + } -ColumnSelectControl.prototype._createContents = function ($parent) { - _baseControl2.default.prototype._createContents.call(this, $parent); - var selectorSettings = {}; - selectorSettings.columnSelector = this.options.setting.columnSelector; - selectorSettings.datasourceSelector = this.options.setting.datasourceSelector; - selectorSettings.itemSelector = this.options.setting.itemSelector; - selectorSettings.onOffSwitch = this.options.setting.onOffSwitch; - this.createComponentContents(selectorSettings); -}; + var now = function () { + return Date.now ? Date.now() : +new Date(); + }; -ColumnSelectControl.prototype.createComponentContents = function (contentsOption) { - _baseControl2.default.prototype.createComponentContents.call(this); - var _this = this; - this._createChartTypeSelectorContent(); + var ordering = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + ]; + + function isDurationValid(m) { + var key, + unitHasDecimal = false, + i; + for (key in m) { + if ( + hasOwnProp(m, key) && + !( + indexOf.call(ordering, key) !== -1 && + (m[key] == null || !isNaN(m[key])) + ) + ) { + return false; + } + } - if (!contentsOption || !contentsOption.columnSelector) { - return; - } - for (var chartIdx = 0; chartIdx < contentsOption.columnSelector.length; chartIdx++) { - this._createDataSourceSelectorContent(contentsOption.datasourceSelector[chartIdx], chartIdx); - if (contentsOption.columnSelector[chartIdx].length > 0 && (this.options.dataSource.selectable || this.options.chartTypeSelectable)) { - this.$controlContents.append($('
')); + for (i = 0; i < ordering.length; ++i) { + if (m[ordering[i]]) { + if (unitHasDecimal) { + return false; // only allow non-integers for smallest unit + } + if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) { + unitHasDecimal = true; + } + } } - contentsOption.columnSelector[chartIdx].forEach(function (columnSettings) { - if (!columnSettings.ref.selected && !columnSettings.ref.axisType) return; - // _this._configureDefaultSelectedAggregation(columnSettings, chartIdx); - _this._createColumnSelectorContent(columnSettings, chartIdx); - }); + return true; + } - if (contentsOption.itemSelector) { - contentsOption.itemSelector[chartIdx].forEach(function (itemSettings) { - _this._createItemSelectorContent(itemSettings, chartIdx); - }); - } + function isValid$1() { + return this._isValid; + } - if (contentsOption.onOffSwitch) { - contentsOption.onOffSwitch[chartIdx].forEach(function (switchSettings) { - _this._createOnOffSwitchContent(switchSettings, chartIdx); - }); - } + function createInvalid$1() { + return createDuration(NaN); } -}; -ColumnSelectControl.prototype._createChartTypeSelectorContent = function () { - var _this = this; - var chartTypeSelectorWidget = WidgetFactory.createChartTypeSelectorWidget(_this.$controlContents, { - label: 'Chart Type', - value: this.options.chartOption.chart.type, - chartTypeList: this.options.chartTypeList, - chartTypeSelectable: this.options.chartTypeSelectable, - onChanged: function onChanged(inputVal) { - _this.options.chartOption.chart.type = inputVal; - var newOptions = _this.options.chartOptionAPI.setChartOptions(_this.options.chartOption); - _this.options.onChanged('onChartTypeChanged', newOptions); - } - }); - this._widgetList.push(chartTypeSelectorWidget); -}; + function Duration(duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || normalizedInput.isoWeek || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + this._isValid = isDurationValid(normalizedInput); + + // representation for dateAddRemove + this._milliseconds = + +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + weeks * 7; + // It is impossible to translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + quarters * 3 + years * 12; + + this._data = {}; + + this._locale = getLocale(); + + this._bubble(); + } -ColumnSelectControl.prototype._createDataSourceSelectorContent = function (setting, chartIdx) { + function isDuration(obj) { + return obj instanceof Duration; + } - if (this.options.dataSource.selectable) { - this.$controlContents.append($('
')); - this._createDataSourceContent(this.$controlContents, this._createDataSourceSelectorContentOption(setting, chartIdx)); + function absRound(number) { + if (number < 0) { + return Math.round(-1 * number) * -1; + } else { + return Math.round(number); + } } -}; -ColumnSelectControl.prototype._createDataSourceSelectorContentOption = function (setting, chartIdx) { - var _this = this; - var dataSourceList = this._getDataSourceList(); - var dataSourceOptions = { - dataSource: this.options.dataSource, - id: dataSourceList[chartIdx] ? dataSourceList[chartIdx].id : null, - label: setting.label, - problemKeyList: ['datasource-001', 'datasource-002', 'datasource-002-01', 'datasource-003', 'datasource-003-01'], - onChanged: function onChanged(changedDataSource) { - var callBackParam = {}; - if (typeof _this.options.dataSource.onDataSourceChangedCallBack === 'function') { - var dataSourceValueList = _this._getDataSourceValueList(); - dataSourceValueList[chartIdx] = changedDataSource.value; - callBackParam.dataSourceValueList = dataSourceValueList; - _this.options.onChanged('onDataSourceChanged', callBackParam); - } else if (typeof _this.options.dataSource.getDataSourceColumnList === 'function') { - var newColumnList = _this.options.dataSource.getDataSourceColumnList(changedDataSource.value); - callBackParam.changedDataSource = changedDataSource; - callBackParam.changedDataSource.targetIdx = chartIdx; - callBackParam.newColumnList = newColumnList; - // _this._updateChangedDatasource(chartIdx, changedDataSource, newColumnList); - _this._updateChangedDatasource(callBackParam); + // compare two arrays, return the number of differences + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ( + (dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i])) + ) { + diffs++; } } - }; - return dataSourceOptions; -}; - -ColumnSelectControl.prototype._updateChangedDatasource = function (dataSource) { - var chartIdx = dataSource.changedDataSource.targetIdx, - changedDataSource = dataSource.changedDataSource, - newColumnList = dataSource.newColumnList; - - this._initDataSource(chartIdx); - this._setColumnList(chartIdx, newColumnList); - this._setDataSource(chartIdx, changedDataSource); - - this.options.onChanged('onDataSourceChanged', changedDataSource); - this.setExpanderPreview.call(this); -}; - -ColumnSelectControl.prototype._getSelectedColumns = function (columnSettings) { - if (columnSettings.ref.axisType && columnSettings.axisTypeList) { - return [_chartOptionConst2.default.EXTRA_AXIS_TYPE_LIST.find(function (column) { - return column.value == columnSettings.ref.axisType; - })]; - } else { - return columnSettings.ref.selected; + return diffs + lengthDiff; } -}; -ColumnSelectControl.prototype._createColumnSelectorContent = function (columnSettings, sourceIndex) { - var _this = this; - var widgetOptions = { - selected: this._getSelectedColumns(columnSettings), //[{name: 'SepalLength', aggregation: 'none' }], - multiple: columnSettings.multiple ? columnSettings.multiple : false, - multipleMaxCnt: columnSettings.multipleMaxCnt, - aggregationEnabled: columnSettings.aggregationEnabled ? columnSettings.aggregationEnabled : false, - aggregationMap: columnSettings.aggregationMap ? columnSettings.aggregationMap : {}, - label: columnSettings.label, - getColumns: this._getColumnList.bind(this, columnSettings, sourceIndex), - getAllColumns: this._getAllColumnList.bind(this, sourceIndex), - problemKeyList: ['axis-001', 'axis-002', 'axis-003', 'axis-004', 'axis-005'], - chartOption: this.options.chartOption, - onChanged: function onChanged(changedColumnInfo) { - if (changedColumnInfo[0] && changedColumnInfo[0].type == _chartOptionConst2.default.EXTRA_AXIS_TYPE) { - columnSettings.ref.axisType = _chartOptionConst2.default.EXTRA_AXIS_TYPE_LIST.find(function (column) { - return column.name == changedColumnInfo[0].name; - }).value; - columnSettings.ref.selected = []; - } else { - columnSettings.ref.selected = changedColumnInfo; - columnSettings.ref.axisType = null; - } + // FORMATTING - _this.setExpanderPreview.call(_this); - var callbackParam; - if (typeof columnSettings.getColumnChangedOption === 'function') callbackParam = columnSettings.getColumnChangedOption(changedColumnInfo);else { - callbackParam = {}; - callbackParam[columnSettings.key] = _this.options.chartOption[columnSettings.key]; - callbackParam[columnSettings.key][sourceIndex] = columnSettings.ref; + function offset(token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(), + sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; } - _this.options.onChanged('onChartOptionChanged', callbackParam); + return ( + sign + + zeroFill(~~(offset / 60), 2) + + separator + + zeroFill(~~offset % 60, 2) + ); + }); + } - if (columnSettings.axisTypeList) { - _this.options.chartOptionAPI.reloadColumnSelectorSetting(); - _this._createContents(_this.$parent); - _this.renderProblem(); - } - } - }; - var columnSelectorWidget = WidgetFactory.createColumnSelectorWidget(this.$controlContents, widgetOptions); - this._widgetList.push(columnSelectorWidget); -}; + offset('Z', ':'); + offset('ZZ', ''); -ColumnSelectControl.prototype._getDataSourceList = function () { - var sourceList; - if (this.options.chartOption.source.dataType === 'lazy') { - sourceList = this.options.chartOption.source.lazyData; - } else { - sourceList = this.options.chartOption.source.localData; - } - return sourceList; -}; + // PARSING -ColumnSelectControl.prototype._getDataSourceValueList = function () { - var sourceValueList = []; - var dataSourceList = this._getDataSourceList(); - dataSourceList.forEach(function (dataSource) { - sourceValueList.push(dataSource.id.value); + addRegexToken('Z', matchShortOffset); + addRegexToken('ZZ', matchShortOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(matchShortOffset, input); }); - return sourceValueList; -}; + // HELPERS -ColumnSelectControl.prototype._createDataSourceContent = function ($parent, options) { - var dataSourceSelectorWidget = WidgetFactory.createDataSourceSelectorWidget($parent, options); - this._widgetList.push(dataSourceSelectorWidget); -}; + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; -ColumnSelectControl.prototype._initDataSource = function (chartIdx) { - if (this.options.chartOption.source.dataType === 'lazy') { - this.options.chartOption.source.lazyData[chartIdx] = this.options.chartOption.source.lazyData[chartIdx] || { id: {} }; - } else { - this.options.chartOption.source.localData[chartIdx] = this.options.chartOption.source.localData[chartIdx] || { id: {} }; - } -}; + function offsetFromString(matcher, string) { + var matches = (string || '').match(matcher), + chunk, + parts, + minutes; -ColumnSelectControl.prototype._setColumnList = function (chartIdx, newColumnList) { - if (this.options.chartOption.source.dataType === 'lazy') { - this.options.chartOption.source.lazyData[chartIdx].columns = newColumnList; - } else { - this.options.chartOption.source.localData[chartIdx].columns = newColumnList; + if (matches === null) { + return null; + } + + chunk = matches[matches.length - 1] || []; + parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes; } - for (var i in this._widgetList) { - var widget = this._widgetList[i]; - if (widget instanceof _columnSelectorWidget2.default) { - widget._fillColumnControlUnit(); + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = + (isMoment(input) || isDate(input) + ? input.valueOf() + : createLocal(input).valueOf()) - res.valueOf(); + // Use low-level api, because this fn is low-level api. + res._d.setTime(res._d.valueOf() + diff); + hooks.updateOffset(res, false); + return res; + } else { + return createLocal(input).local(); } } -}; -ColumnSelectControl.prototype._setDataSource = function (chartIdx, dataSource) { - if (this.options.chartOption.source.dataType === 'lazy') { - this.options.chartOption.source.lazyData[chartIdx].id.value = dataSource.value; - this.options.chartOption.source.lazyData[chartIdx].id.label = dataSource.label; - } else { - this.options.chartOption.source.localData[chartIdx].id.value = dataSource.value; - this.options.chartOption.source.localData[chartIdx].id.label = dataSource.label; + function getDateOffset(m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset()); } -}; -//column list filtered by type -ColumnSelectControl.prototype._getColumnList = function (columnSettings, sourceIndex) { - var columnList = this._getAllColumnList(sourceIndex); + // HOOKS - if (columnList && columnSettings.columnType) { - columnList = columnList.filter(function (column) { - return columnSettings.columnType.indexOf(column.type) > -1; - }); - } + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + hooks.updateOffset = function () {}; - if (columnSettings.axisTypeList && $.isArray(columnSettings.axisTypeList)) { - columnList = $.merge(_chartOptionConst2.default.EXTRA_AXIS_TYPE_LIST.filter(function (defAxisType) { - return $.inArray(defAxisType.value, columnSettings.axisTypeList) > -1; - }), columnList); - } + // MOMENTS - return columnList; -}; + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset(input, keepLocalTime, keepMinutes) { + var offset = this._offset || 0, + localAdjust; + if (!this.isValid()) { + return input != null ? this : NaN; + } + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(matchShortOffset, input); + if (input === null) { + return this; + } + } else if (Math.abs(input) < 16 && !keepMinutes) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addSubtract( + this, + createDuration(input - offset, 'm'), + 1, + false + ); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } -ColumnSelectControl.prototype._getAllColumnList = function (sourceIndex) { - return ChartOptionUtil.getAllColumnList(this.options.chartOption, sourceIndex); -}; + function getSetZone(input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } -ColumnSelectControl.prototype._createItemSelectorContent = function (itemSettings, sourceIndex) { - var _this = this; - var options = { - label: itemSettings.label, - value: itemSettings.ref.selected, - source: itemSettings.source, - placeHolder: 'Select ' + itemSettings.label, - problemKeyList: ['value-001', 'value-002', 'value-003', 'value-004', 'value-005'], - onChanged: function onChanged(inputVal) { - itemSettings.ref.selected = inputVal; - _this.setExpanderPreview.call(_this); - var callbackParam; - if (typeof itemSettings.getItemChangedOption === 'function') callbackParam = itemSettings.getItemChangedOption(inputVal); - _this.options.onChanged('onChartOptionChanged', callbackParam); - } - }; - var itemSelectorWidget = WidgetFactory.createItemSelectorWidget(this.$controlContents, options); - this._widgetList.push(itemSelectorWidget); -}; + this.utcOffset(input, keepLocalTime); -ColumnSelectControl.prototype._createOnOffSwitchContent = function (switchSettings, sourceIndex) { - var _this = this; - var options = { - label: switchSettings.label, - value: switchSettings.ref, - onChanged: function onChanged(value) { - switchSettings.ref = value; - _this.setExpanderPreview.call(_this); - var callbackParam; - if (typeof switchSettings.getValueChangedOption === 'function') callbackParam = switchSettings.getValueChangedOption(value); - _this.options.onChanged('onChartOptionChanged', callbackParam); + return this; + } else { + return -this.utcOffset(); } - }; - var onOffSwitchWidget = WidgetFactory.createOnOffSwitchWidget(this.$controlContents, options); - this._widgetList.push(onOffSwitchWidget); -}; - -ColumnSelectControl.prototype.renderProblem = function (problems) { - var _this = this; - this._widgetList.forEach(function (widget) { - widget.renderProblem(problems || _this.options.problemList); - }); -}; + } -exports.default = ColumnSelectControl; + function setOffsetToUTC(keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } -/***/ }), -/* 275 */ -/***/ (function(module, exports, __webpack_require__) { + function setOffsetToLocal(keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; -"use strict"; + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + function setOffsetToParsedOffset() { + if (this._tzm != null) { + this.utcOffset(this._tzm, false, true); + } else if (typeof this._i === 'string') { + var tZone = offsetFromString(matchOffset, this._i); + if (tZone != null) { + this.utcOffset(tZone); + } else { + this.utcOffset(0, true); + } + } + return this; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + function hasAlignedHourOffset(input) { + if (!this.isValid()) { + return false; + } + input = input ? createLocal(input).utcOffset() : 0; -var _chartOptionConst = __webpack_require__(17); + return (this.utcOffset() - input) % 60 === 0; + } -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + function isDaylightSavingTime() { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } -var _baseWidget = __webpack_require__(23); + function isDaylightSavingTimeShifted() { + if (!isUndefined(this._isDSTShifted)) { + return this._isDSTShifted; + } -var _baseWidget2 = _interopRequireDefault(_baseWidget); + var c = {}, + other; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + copyConfig(c, this); + c = prepareConfig(c); -/** - * options = { - * label : String ( default: Value ) - * labelPosition : row or column, (default: row) - * internalLabel: (default: label) //use as validation target. - * inputStyle : line or box, - * placeHolder: '', - * value: '' // default value - * onChanged: function(){] - * } - * @param parentId - * @param options - * @constructor - */ -/** - * Created by mk90.kim on 2017-05-10. - */ + if (c._a) { + other = c._isUTC ? createUTC(c._a) : createLocal(c._a); + this._isDSTShifted = + this.isValid() && compareArrays(c._a, other.toArray()) > 0; + } else { + this._isDSTShifted = false; + } -function InputWidget(parentId, options) { - _baseWidget2.default.call(this, parentId, options); -} + return this._isDSTShifted; + } -InputWidget.prototype = Object.create(_baseWidget2.default.prototype); -InputWidget.prototype.constructor = InputWidget; + function isLocal() { + return this.isValid() ? !this._isUTC : false; + } -InputWidget.prototype._createContents = function ($parent) { - this.$mainControl = $('' + '
' + '
' + '
' + '
'); + function isUtcOffset() { + return this.isValid() ? this._isUTC : false; + } - $parent.append(this.$mainControl); - if (this.options.labelPosition === 'column') { - this.$mainControl.addClass('bos-flex-direction-column'); + function isUtc() { + return this.isValid() ? this._isUTC && this._offset === 0 : false; } - this._createHeader(this.$mainControl.find('.bo-widget-header')); + // ASP.NET json date format regex + var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + // and further modified to allow for strings containing both week and day + isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; + + function createDuration(input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms: input._milliseconds, + d: input._days, + M: input._months, + }; + } else if (isNumber(input) || !isNaN(+input)) { + duration = {}; + if (key) { + duration[key] = +input; + } else { + duration.milliseconds = +input; + } + } else if ((match = aspNetRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: 0, + d: toInt(match[DATE]) * sign, + h: toInt(match[HOUR]) * sign, + m: toInt(match[MINUTE]) * sign, + s: toInt(match[SECOND]) * sign, + ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match + }; + } else if ((match = isoRegex.exec(input))) { + sign = match[1] === '-' ? -1 : 1; + duration = { + y: parseIso(match[2], sign), + M: parseIso(match[3], sign), + w: parseIso(match[4], sign), + d: parseIso(match[5], sign), + h: parseIso(match[6], sign), + m: parseIso(match[7], sign), + s: parseIso(match[8], sign), + }; + } else if (duration == null) { + // checks for null or undefined + duration = {}; + } else if ( + typeof duration === 'object' && + ('from' in duration || 'to' in duration) + ) { + diffRes = momentsDifference( + createLocal(duration.from), + createLocal(duration.to) + ); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } - this._createInputBox(this.$mainControl.find('.bo-widget-contents')); + ret = new Duration(duration); - this._setPreValue(this.options.value || ''); -}; + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } -InputWidget.prototype._createHeader = function ($parent) { - if (!this.options.label) $parent.remove();else { - var label = this.options.label || 'Value'; - $parent.text(label); - if (this.options.labelWidth) { - $parent.css({ width: this.options.labelWidth }); + if (isDuration(input) && hasOwnProp(input, '_isValid')) { + ret._isValid = input._isValid; } + + return ret; } -}; -InputWidget.prototype._createInputBox = function ($parent) { - this.$inputControl = $(''); - $parent.append(this.$inputControl); - var options = { - theme: _chartOptionConst2.default.Theme, - height: this.options.height || '25px', - placeHolder: this.options.placeHolder || '', - value: this.options.value || this.options.value == 0 ? this.options.value : '' - }; - this.$inputControl.jqxInput(options); - this._setDefaultStatus(this.$inputControl, options.value); + createDuration.fn = Duration.prototype; + createDuration.invalid = createInvalid$1; - if (this.options.inputStyle === 'line') { - this.$inputControl.addClass('bos-widget-line-inputbox'); + function parseIso(inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; } - this.$inputControl.css('width', this.options.width ? this.options.width : '100%'); + function positiveMomentsDifference(base, other) { + var res = {}; - this._bindOnChangedFunc(); -}; + res.months = + other.month() - base.month() + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } -InputWidget.prototype._bindOnChangedFunc = function ($parent) { - var _this = this; - if (typeof this.options.onChanged === 'function') { - var callbackFunc = this.options.onChanged; - this.$inputControl.on('blur', function () { - if (!_this._isChanged(_this.$inputControl.val())) return; - callbackFunc.bind(_this)(_this.$inputControl.val()); - }); - this.$inputControl.keydown(function _OnNumericInputKeyDown(e) { - var key = e.which || e.keyCode; - if (key === 13) { - if (!_this._isChanged(_this.$inputControl.val())) return; - callbackFunc.bind(_this)(_this.$inputControl.val()); - } - }); - } -}; + res.milliseconds = +other - +base.clone().add(res.months, 'M'); -//default value가 function type일 경우 disable처리 -//TODO: function type일 경우 dialog 띄워서 수정가능하게 변경해야함.(ex. axis label formatter) -InputWidget.prototype._setDefaultStatus = function (target, defaultValue) { - if (typeof defaultValue === 'function') { - target.jqxInput({ disabled: true, value: '[Custom function]' }); + return res; } -}; -InputWidget.prototype.toggleDisable = function (disabled) { - this.$inputControl.jqxInput({ disabled: disabled }); -}; + function momentsDifference(base, other) { + var res; + if (!(base.isValid() && other.isValid())) { + return { milliseconds: 0, months: 0 }; + } -InputWidget.prototype.render = function (changedValue) { - this.$inputControl.jqxInput({ value: changedValue }); -}; + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } -InputWidget.prototype.renderProblem = function (problems) { - var _this = this; - if (!problems || !this.options.problemKeyList) return; + return res; + } - var targetLabel = _this.options.internalLabel || _this.options.label; - this.$mainControl.find('input').removeClass('bos-border-color-red'); - problems.forEach(function (problem) { - _this.options.problemKeyList.forEach(function (problemKey) { - if (problem.key === problemKey && problem.target === targetLabel) { - _this._renderProblem(); + // TODO: remove 'name' arg after deprecation is removed + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple( + name, + 'moment().' + + name + + '(period, number) is deprecated. Please use moment().' + + name + + '(number, period). ' + + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.' + ); + tmp = val; + val = period; + period = tmp; } - }); - }); -}; - -InputWidget.prototype._renderProblem = function () { - this.$mainControl.find('input').addClass('bos-border-color-red'); -}; -exports.default = InputWidget; + dur = createDuration(val, period); + addSubtract(this, dur, direction); + return this; + }; + } -/***/ }), -/* 276 */ -/***/ (function(module, exports, __webpack_require__) { + function addSubtract(mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = absRound(duration._days), + months = absRound(duration._months); -"use strict"; + if (!mom.isValid()) { + // No op + return; + } + updateOffset = updateOffset == null ? true : updateOffset; -Object.defineProperty(exports, "__esModule", { - value: true -}); + if (months) { + setMonth(mom, get(mom, 'Month') + months * isAdding); + } + if (days) { + set$1(mom, 'Date', get(mom, 'Date') + days * isAdding); + } + if (milliseconds) { + mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); + } + if (updateOffset) { + hooks.updateOffset(mom, days || months); + } + } -var _baseWidget = __webpack_require__(23); + var add = createAdder(1, 'add'), + subtract = createAdder(-1, 'subtract'); -var _baseWidget2 = _interopRequireDefault(_baseWidget); + function isString(input) { + return typeof input === 'string' || input instanceof String; + } -var _widgetFactory = __webpack_require__(3); + // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined + function isMomentInput(input) { + return ( + isMoment(input) || + isDate(input) || + isString(input) || + isNumber(input) || + isNumberOrStringArray(input) || + isMomentInputObject(input) || + input === null || + input === undefined + ); + } -var WidgetFactory = _interopRequireWildcard(_widgetFactory); + function isMomentInputObject(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'years', + 'year', + 'y', + 'months', + 'month', + 'M', + 'days', + 'day', + 'd', + 'dates', + 'date', + 'D', + 'hours', + 'hour', + 'h', + 'minutes', + 'minute', + 'm', + 'seconds', + 'second', + 's', + 'milliseconds', + 'millisecond', + 'ms', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + return objectTest && propertyTest; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function isNumberOrStringArray(input) { + var arrayTest = isArray(input), + dataTypeTest = false; + if (arrayTest) { + dataTypeTest = + input.filter(function (item) { + return !isNumber(item) && isString(input); + }).length === 0; + } + return arrayTest && dataTypeTest; + } -/** - * options = { - * label : String ( default: Value ) - * labelPosition : row or column - * inputStyle : line or box, - * placeHolder: ['','',''], - * value: ['','',''], - * numberOfInput: 3 (default: 2) - * onChanged: [function(){}, function(){}, function(){}] - * } - * @param parentId - * @param options - * @constructor - */ -/** - * Created by mk90.kim on 2017-05-10. - */ + function isCalendarSpec(input) { + var objectTest = isObject(input) && !isObjectEmpty(input), + propertyTest = false, + properties = [ + 'sameDay', + 'nextDay', + 'lastDay', + 'nextWeek', + 'lastWeek', + 'sameElse', + ], + i, + property; + + for (i = 0; i < properties.length; i += 1) { + property = properties[i]; + propertyTest = propertyTest || hasOwnProp(input, property); + } -function MultiInputWidget(parentId, options) { - _baseWidget2.default.call(this, parentId, options); -} + return objectTest && propertyTest; + } -MultiInputWidget.prototype = Object.create(_baseWidget2.default.prototype); -MultiInputWidget.prototype.constructor = MultiInputWidget; + function getCalendarFormat(myMoment, now) { + var diff = myMoment.diff(now, 'days', true); + return diff < -6 + ? 'sameElse' + : diff < -1 + ? 'lastWeek' + : diff < 0 + ? 'lastDay' + : diff < 1 + ? 'sameDay' + : diff < 2 + ? 'nextDay' + : diff < 7 + ? 'nextWeek' + : 'sameElse'; + } -MultiInputWidget.prototype._init = function () { - _baseWidget2.default.prototype._init.call(this); - this.inputBoxIdx = 0; - this.inputControlList = []; -}; + function calendar$1(time, formats) { + // Support for single parameter, formats only overload to the calendar function + if (arguments.length === 1) { + if (isMomentInput(arguments[0])) { + time = arguments[0]; + formats = undefined; + } else if (isCalendarSpec(arguments[0])) { + formats = arguments[0]; + time = undefined; + } + } + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + format = hooks.calendarFormat(this, sod) || 'sameElse', + output = + formats && + (isFunction(formats[format]) + ? formats[format].call(this, now) + : formats[format]); + + return this.format( + output || this.localeData().calendar(format, this, createLocal(now)) + ); + } -MultiInputWidget.prototype._createContents = function ($parent) { - this.$mainControl = $('' + '
' + '
' + '
' + '
'); + function clone() { + return new Moment(this); + } - $parent.append(this.$mainControl); - if (this.options.labelPosition === 'column') { - this.$mainControl.addClass('bos-flex-direction-column'); + function isAfter(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() > localInput.valueOf(); + } else { + return localInput.valueOf() < this.clone().startOf(units).valueOf(); + } } - this._createHeader(this.$mainControl.find('.bo-widget-header')); - this._createMultiInput(this.$mainControl.find('.bo-widget-contents')); + function isBefore(input, units) { + var localInput = isMoment(input) ? input : createLocal(input); + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() < localInput.valueOf(); + } else { + return this.clone().endOf(units).valueOf() < localInput.valueOf(); + } + } - this._setPreValue(this.options.value); -}; + function isBetween(from, to, units, inclusivity) { + var localFrom = isMoment(from) ? from : createLocal(from), + localTo = isMoment(to) ? to : createLocal(to); + if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) { + return false; + } + inclusivity = inclusivity || '()'; + return ( + (inclusivity[0] === '(' + ? this.isAfter(localFrom, units) + : !this.isBefore(localFrom, units)) && + (inclusivity[1] === ')' + ? this.isBefore(localTo, units) + : !this.isAfter(localTo, units)) + ); + } -MultiInputWidget.prototype._createHeader = function ($parent) { - if (!this.options.label) $parent.remove();else { - var label = this.options.label || 'Value'; - $parent.text(label); + function isSame(input, units) { + var localInput = isMoment(input) ? input : createLocal(input), + inputMs; + if (!(this.isValid() && localInput.isValid())) { + return false; + } + units = normalizeUnits(units) || 'millisecond'; + if (units === 'millisecond') { + return this.valueOf() === localInput.valueOf(); + } else { + inputMs = localInput.valueOf(); + return ( + this.clone().startOf(units).valueOf() <= inputMs && + inputMs <= this.clone().endOf(units).valueOf() + ); + } } - $parent.addClass('bos-widget-column-separator'); -}; -MultiInputWidget.prototype._createMultiInput = function ($parent) { - var numberOfInput = this.options.numOfComponent ? this.options.numOfComponent : 2; - var callbackList = $.extend({}, this.options.onChanged); - var Widget, defaultValue; - for (var idx = 0; idx < numberOfInput; idx++) { - this.inputBoxIdx = idx; + function isSameOrAfter(input, units) { + return this.isSame(input, units) || this.isAfter(input, units); + } - if (this.options.inputType && this.options.inputType[idx] === 'number') { - Widget = WidgetFactory.createNumberInputWidget; - defaultValue = this.options.value && this.options.value[idx] !== 0 ? this.options.value[idx] : ''; - } else { - Widget = WidgetFactory.createInputWidget; - defaultValue = this.options.value && this.options.value[idx] ? this.options.value[idx] : ''; - } + function isSameOrBefore(input, units) { + return this.isSame(input, units) || this.isBefore(input, units); + } - var inputControl = Widget($parent, { - labelPosition: this.options.labelPosition, - inputStyle: this.options.inputStyle, - placeHolder: this.options.placeHolder && this.options.placeHolder[idx] ? this.options.placeHolder[idx] : '', - value: defaultValue, - onChanged: this.options.onChanged[idx] - }); - inputControl.$mainControl.css({ 'flex-grow': 1 }); - if (idx != numberOfInput - 1) { - inputControl.$mainControl.addClass('bos-widget-column-separator'); + function diff(input, units, asFloat) { + var that, zoneDelta, output; + + if (!this.isValid()) { + return NaN; } - this.inputControlList.push(inputControl); - } -}; -MultiInputWidget.prototype.toggleDisable = function (disabled) { - this.inputControlList.forEach(function (inputControl) { - // $inputControl.jqxInput({disabled: disabled}); - inputControl.toggleDisable(disabled); - }); -}; + that = cloneWithOffset(input, this); -MultiInputWidget.prototype.renderProblem = function (problems) { - var _this = this; + if (!that.isValid()) { + return NaN; + } - this.$mainControl.find('input').removeClass('bos-border-color-red'); - problems.forEach(function (problem) { - _this.options.problemKeyList.forEach(function (problemKey) { - if (problem.key === problemKey && problem.target === _this.options.label) { - _this._renderProblem(); - } - }); - }); -}; + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; -MultiInputWidget.prototype._renderProblem = function () { - this.$mainControl.find('input').addClass('bos-border-color-red'); -}; + units = normalizeUnits(units); -exports.default = MultiInputWidget; + switch (units) { + case 'year': + output = monthDiff(this, that) / 12; + break; + case 'month': + output = monthDiff(this, that); + break; + case 'quarter': + output = monthDiff(this, that) / 3; + break; + case 'second': + output = (this - that) / 1e3; + break; // 1000 + case 'minute': + output = (this - that) / 6e4; + break; // 1000 * 60 + case 'hour': + output = (this - that) / 36e5; + break; // 1000 * 60 * 60 + case 'day': + output = (this - that - zoneDelta) / 864e5; + break; // 1000 * 60 * 60 * 24, negate dst + case 'week': + output = (this - that - zoneDelta) / 6048e5; + break; // 1000 * 60 * 60 * 24 * 7, negate dst + default: + output = this - that; + } -/***/ }), -/* 277 */ -/***/ (function(module, exports, __webpack_require__) { + return asFloat ? output : absFloor(output); + } -"use strict"; + function monthDiff(a, b) { + if (a.date() < b.date()) { + // end-of-month calculations work correct when the start month has more + // days than the end month. + return -monthDiff(b, a); + } + // difference in months + var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, + adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + //check for negative zero, return zero if negative zero + return -(wholeMonthDiff + adjust) || 0; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; -var _dialog = __webpack_require__(42); + function toString() { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } -var _dialog2 = _interopRequireDefault(_dialog); + function toISOString(keepOffset) { + if (!this.isValid()) { + return null; + } + var utc = keepOffset !== true, + m = utc ? this.clone().utc() : this; + if (m.year() < 0 || m.year() > 9999) { + return formatMoment( + m, + utc + ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' + : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } + if (isFunction(Date.prototype.toISOString)) { + // native implementation is ~50x faster, use it when we can + if (utc) { + return this.toDate().toISOString(); + } else { + return new Date(this.valueOf() + this.utcOffset() * 60 * 1000) + .toISOString() + .replace('Z', formatMoment(m, 'Z')); + } + } + return formatMoment( + m, + utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ' + ); + } -var _chartOptionConst = __webpack_require__(17); + /** + * Return a human readable representation of a moment that can + * also be evaluated to get a new moment which is the same + * + * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects + */ + function inspect() { + if (!this.isValid()) { + return 'moment.invalid(/* ' + this._i + ' */)'; + } + var func = 'moment', + zone = '', + prefix, + year, + datetime, + suffix; + if (!this.isLocal()) { + func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone'; + zone = 'Z'; + } + prefix = '[' + func + '("]'; + year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY'; + datetime = '-MM-DD[T]HH:mm:ss.SSS'; + suffix = zone + '[")]'; -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + return this.format(prefix + year + datetime + suffix); + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function format(inputString) { + if (!inputString) { + inputString = this.isUtc() + ? hooks.defaultFormatUtc + : hooks.defaultFormat; + } + var output = formatMoment(this, inputString); + return this.localeData().postformat(output); + } -/** - * options = { - * close: function(color){ - * // color: {} - * }, - * onChanged: function(){] - * } - * - */ + function from(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ to: this, from: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } -/** - * Created by daewon77.park on 2016-08-20. - */ + function fromNow(withoutSuffix) { + return this.from(createLocal(), withoutSuffix); + } -function ColorPickerDialog(parentId, options) { - _dialog2.default.call(this, parentId, options); -} + function to(time, withoutSuffix) { + if ( + this.isValid() && + ((isMoment(time) && time.isValid()) || createLocal(time).isValid()) + ) { + return createDuration({ from: this, to: time }) + .locale(this.locale()) + .humanize(!withoutSuffix); + } else { + return this.localeData().invalidDate(); + } + } -ColorPickerDialog.prototype = Object.create(_dialog2.default.prototype); -ColorPickerDialog.prototype.constructor = ColorPickerDialog; + function toNow(withoutSuffix) { + return this.to(createLocal(), withoutSuffix); + } -ColorPickerDialog.prototype._getTitle = function () { - return 'Color Picker'; -}; + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + function locale(key) { + var newLocaleData; -ColorPickerDialog.prototype._getDefaultWindowOption = function () { - var _this = this; - return { - theme: _chartOptionConst2.default.Theme, - width: '300px', - height: '320px', - maxWidth: '300px', - maxHeight: '320px', - resizable: false, - initContent: function initContent() { - _this._configurePosition(); - _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; } - }; -}; + } -ColorPickerDialog.prototype._createDialogContentsArea = function ($parent) { + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); - var _this = this; + function localeData() { + return this._locale; + } - this.$colorPickerControl = $('
'); - $parent.append(this.$colorPickerControl); + var MS_PER_SECOND = 1000, + MS_PER_MINUTE = 60 * MS_PER_SECOND, + MS_PER_HOUR = 60 * MS_PER_MINUTE, + MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; - this.$colorPickerControl.jqxColorPicker({ - width: 275, - height: 230, - colorMode: 'hue' - }); + // actual modulo - handles negative numbers (for dates before 1970): + function mod$1(dividend, divisor) { + return ((dividend % divisor) + divisor) % divisor; + } - if (this.options.color) { - this.$colorPickerControl.jqxColorPicker('setColor', this.options.color); - var backupColor = this.options.color; + function localStartOfDate(y, m, d) { + // the date constructor remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return new Date(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return new Date(y, m, d).valueOf(); + } } - if (typeof this.options.onChanged === 'function') { - // var _this = this; - this.$colorPickerControl.bind('colorchange', function (event) { - _this.options.onChanged('#' + event.args.color.hex); - }); + function utcStartOfDate(y, m, d) { + // Date.UTC remaps years 0-99 to 1900-1999 + if (y < 100 && y >= 0) { + // preserve leap years using a full 400 year cycle, then reset + return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS; + } else { + return Date.UTC(y, m, d); + } } - this.$bottomArea = $('' + '
' + '
Reset
' + '
'); + function startOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } - $parent.append(this.$bottomArea); + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; - this.$bottomArea.on('click', function () { - _this.$colorPickerControl.jqxColorPicker('setColor', backupColor); - }); -}; + switch (units) { + case 'year': + time = startOfDate(this.year(), 0, 1); + break; + case 'quarter': + time = startOfDate( + this.year(), + this.month() - (this.month() % 3), + 1 + ); + break; + case 'month': + time = startOfDate(this.year(), this.month(), 1); + break; + case 'week': + time = startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + ); + break; + case 'isoWeek': + time = startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + ); + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date()); + break; + case 'hour': + time = this._d.valueOf(); + time -= mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ); + break; + case 'minute': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_MINUTE); + break; + case 'second': + time = this._d.valueOf(); + time -= mod$1(time, MS_PER_SECOND); + break; + } -ColorPickerDialog.prototype._getDialogResult = function () { - return this.$colorPickerControl.jqxColorPicker('getColor'); -}; + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } -exports.default = ColorPickerDialog; + function endOf(units) { + var time, startOfDate; + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond' || !this.isValid()) { + return this; + } -/***/ }), -/* 278 */ -/***/ (function(module, exports, __webpack_require__) { + startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate; -"use strict"; + switch (units) { + case 'year': + time = startOfDate(this.year() + 1, 0, 1) - 1; + break; + case 'quarter': + time = + startOfDate( + this.year(), + this.month() - (this.month() % 3) + 3, + 1 + ) - 1; + break; + case 'month': + time = startOfDate(this.year(), this.month() + 1, 1) - 1; + break; + case 'week': + time = + startOfDate( + this.year(), + this.month(), + this.date() - this.weekday() + 7 + ) - 1; + break; + case 'isoWeek': + time = + startOfDate( + this.year(), + this.month(), + this.date() - (this.isoWeekday() - 1) + 7 + ) - 1; + break; + case 'day': + case 'date': + time = startOfDate(this.year(), this.month(), this.date() + 1) - 1; + break; + case 'hour': + time = this._d.valueOf(); + time += + MS_PER_HOUR - + mod$1( + time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), + MS_PER_HOUR + ) - + 1; + break; + case 'minute': + time = this._d.valueOf(); + time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1; + break; + case 'second': + time = this._d.valueOf(); + time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1; + break; + } + this._d.setTime(time); + hooks.updateOffset(this, true); + return this; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getColorPalette = exports.setColorPalette = undefined; + function valueOf() { + return this._d.valueOf() - (this._offset || 0) * 60000; + } -var _defaultPreference = __webpack_require__(574); + function unix() { + return Math.floor(this.valueOf() / 1000); + } -var _defaultPreference2 = _interopRequireDefault(_defaultPreference); + function toDate() { + return new Date(this.valueOf()); + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function toArray() { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hour(), + m.minute(), + m.second(), + m.millisecond(), + ]; + } -var selected = undefined; /* ----------------------------------------------------- - * preference.js - * Created by hyunseok.oh@samsung.com on 2018-09-10. - * ---------------------------------------------------- */ + function toObject() { + var m = this; + return { + years: m.year(), + months: m.month(), + date: m.date(), + hours: m.hours(), + minutes: m.minutes(), + seconds: m.seconds(), + milliseconds: m.milliseconds(), + }; + } -var colorSet = _defaultPreference2.default.colorPalette; + function toJSON() { + // new Date(NaN).toJSON() === null + return this.isValid() ? this.toISOString() : null; + } -function setColorPalette(_selected, _colorSet) { - selected = _selected; - colorSet = _colorSet.slice(); -} + function isValid$2() { + return isValid(this); + } -function getColorPalette() { - return colorSet; -} + function parsingFlags() { + return extend({}, getParsingFlags(this)); + } -exports.setColorPalette = setColorPalette; -exports.getColorPalette = getColorPalette; + function invalidAt() { + return getParsingFlags(this).overflow; + } -/***/ }), -/* 279 */ -/***/ (function(module, exports, __webpack_require__) { + function creationData() { + return { + input: this._i, + format: this._f, + locale: this._locale, + isUTC: this._isUTC, + strict: this._strict, + }; + } -"use strict"; + addFormatToken('N', 0, 0, 'eraAbbr'); + addFormatToken('NN', 0, 0, 'eraAbbr'); + addFormatToken('NNN', 0, 0, 'eraAbbr'); + addFormatToken('NNNN', 0, 0, 'eraName'); + addFormatToken('NNNNN', 0, 0, 'eraNarrow'); + + addFormatToken('y', ['y', 1], 'yo', 'eraYear'); + addFormatToken('y', ['yy', 2], 0, 'eraYear'); + addFormatToken('y', ['yyy', 3], 0, 'eraYear'); + addFormatToken('y', ['yyyy', 4], 0, 'eraYear'); + + addRegexToken('N', matchEraAbbr); + addRegexToken('NN', matchEraAbbr); + addRegexToken('NNN', matchEraAbbr); + addRegexToken('NNNN', matchEraName); + addRegexToken('NNNNN', matchEraNarrow); + + addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function ( + input, + array, + config, + token + ) { + var era = config._locale.erasParse(input, token, config._strict); + if (era) { + getParsingFlags(config).era = era; + } else { + getParsingFlags(config).invalidEra = input; + } + }); + addRegexToken('y', matchUnsigned); + addRegexToken('yy', matchUnsigned); + addRegexToken('yyy', matchUnsigned); + addRegexToken('yyyy', matchUnsigned); + addRegexToken('yo', matchEraYearOrdinal); + + addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR); + addParseToken(['yo'], function (input, array, config, token) { + var match; + if (config._locale._eraYearOrdinalRegex) { + match = input.match(config._locale._eraYearOrdinalRegex); + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + if (config._locale.eraYearOrdinalParse) { + array[YEAR] = config._locale.eraYearOrdinalParse(input, match); + } else { + array[YEAR] = parseInt(input, 10); + } + }); -var _baseRadioButtonGroupWidget = __webpack_require__(59); + function localeEras(m, format) { + var i, + l, + date, + eras = this._eras || getLocale('en')._eras; + for (i = 0, l = eras.length; i < l; ++i) { + switch (typeof eras[i].since) { + case 'string': + // truncate time + date = hooks(eras[i].since).startOf('day'); + eras[i].since = date.valueOf(); + break; + } -var _baseRadioButtonGroupWidget2 = _interopRequireDefault(_baseRadioButtonGroupWidget); + switch (typeof eras[i].until) { + case 'undefined': + eras[i].until = +Infinity; + break; + case 'string': + // truncate time + date = hooks(eras[i].until).startOf('day').valueOf(); + eras[i].until = date.valueOf(); + break; + } + } + return eras; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function localeErasParse(eraName, format, strict) { + var i, + l, + eras = this.eras(), + name, + abbr, + narrow; + eraName = eraName.toUpperCase(); + + for (i = 0, l = eras.length; i < l; ++i) { + name = eras[i].name.toUpperCase(); + abbr = eras[i].abbr.toUpperCase(); + narrow = eras[i].narrow.toUpperCase(); + + if (strict) { + switch (format) { + case 'N': + case 'NN': + case 'NNN': + if (abbr === eraName) { + return eras[i]; + } + break; -function HorizontalAlignRadioButtonWidget(parentId, options) { - _baseRadioButtonGroupWidget2.default.call(this, parentId, options); -} /** - * Created by mk90.kim on 2017-05-10. - */ + case 'NNNN': + if (name === eraName) { + return eras[i]; + } + break; -HorizontalAlignRadioButtonWidget.prototype = Object.create(_baseRadioButtonGroupWidget2.default.prototype); -HorizontalAlignRadioButtonWidget.prototype.constructor = HorizontalAlignRadioButtonWidget; + case 'NNNNN': + if (narrow === eraName) { + return eras[i]; + } + break; + } + } else if ([name, abbr, narrow].indexOf(eraName) >= 0) { + return eras[i]; + } + } + } -HorizontalAlignRadioButtonWidget.prototype._setRadioButtonList = function () { - this._buttonList = [{ - imageClass: 'bos-horizontal-align-left', - value: 'left' - }, { - imageClass: 'bos-horizontal-align-center', - value: 'center' - }, { - imageClass: 'bos-horizontal-align-right', - value: 'right' - }]; -}; - -exports.default = HorizontalAlignRadioButtonWidget; + function localeErasConvertYear(era, year) { + var dir = era.since <= era.until ? +1 : -1; + if (year === undefined) { + return hooks(era.since).year(); + } else { + return hooks(era.since).year() + (year - era.offset) * dir; + } + } -/***/ }), -/* 280 */ -/***/ (function(module, exports, __webpack_require__) { + function getEraName() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].name; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].name; + } + } -"use strict"; + return ''; + } + function getEraNarrow() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].narrow; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].narrow; + } + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + return ''; + } -var _baseRadioButtonGroupWidget = __webpack_require__(59); + function getEraAbbr() { + var i, + l, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + // truncate time + val = this.startOf('day').valueOf(); + + if (eras[i].since <= val && val <= eras[i].until) { + return eras[i].abbr; + } + if (eras[i].until <= val && val <= eras[i].since) { + return eras[i].abbr; + } + } -var _baseRadioButtonGroupWidget2 = _interopRequireDefault(_baseRadioButtonGroupWidget); + return ''; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function getEraYear() { + var i, + l, + dir, + val, + eras = this.localeData().eras(); + for (i = 0, l = eras.length; i < l; ++i) { + dir = eras[i].since <= eras[i].until ? +1 : -1; + + // truncate time + val = this.startOf('day').valueOf(); + + if ( + (eras[i].since <= val && val <= eras[i].until) || + (eras[i].until <= val && val <= eras[i].since) + ) { + return ( + (this.year() - hooks(eras[i].since).year()) * dir + + eras[i].offset + ); + } + } -function VerticalAlignRadioButtonWidget(parentId, options) { - _baseRadioButtonGroupWidget2.default.call(this, parentId, options); -} /** - * Created by mk90.kim on 2017-05-10. - */ + return this.year(); + } -VerticalAlignRadioButtonWidget.prototype = Object.create(_baseRadioButtonGroupWidget2.default.prototype); -VerticalAlignRadioButtonWidget.prototype.constructor = VerticalAlignRadioButtonWidget; + function erasNameRegex(isStrict) { + if (!hasOwnProp(this, '_erasNameRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNameRegex : this._erasRegex; + } -VerticalAlignRadioButtonWidget.prototype._setRadioButtonList = function () { - this._buttonList = [{ - imageClass: 'bos-vertical-align-up', - value: 'top' - }, { - imageClass: 'bos-vertical-align-middle', - value: 'center' - }, { - imageClass: 'bos-vertical-align-down', - value: 'bottom' - }]; -}; + function erasAbbrRegex(isStrict) { + if (!hasOwnProp(this, '_erasAbbrRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasAbbrRegex : this._erasRegex; + } -exports.default = VerticalAlignRadioButtonWidget; + function erasNarrowRegex(isStrict) { + if (!hasOwnProp(this, '_erasNarrowRegex')) { + computeErasParse.call(this); + } + return isStrict ? this._erasNarrowRegex : this._erasRegex; + } -/***/ }), -/* 281 */ -/***/ (function(module, exports, __webpack_require__) { + function matchEraAbbr(isStrict, locale) { + return locale.erasAbbrRegex(isStrict); + } -"use strict"; + function matchEraName(isStrict, locale) { + return locale.erasNameRegex(isStrict); + } + function matchEraNarrow(isStrict, locale) { + return locale.erasNarrowRegex(isStrict); + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + function matchEraYearOrdinal(isStrict, locale) { + return locale._eraYearOrdinalRegex || matchUnsigned; + } -var _baseWidget = __webpack_require__(23); + function computeErasParse() { + var abbrPieces = [], + namePieces = [], + narrowPieces = [], + mixedPieces = [], + i, + l, + eras = this.eras(); + + for (i = 0, l = eras.length; i < l; ++i) { + namePieces.push(regexEscape(eras[i].name)); + abbrPieces.push(regexEscape(eras[i].abbr)); + narrowPieces.push(regexEscape(eras[i].narrow)); + + mixedPieces.push(regexEscape(eras[i].name)); + mixedPieces.push(regexEscape(eras[i].abbr)); + mixedPieces.push(regexEscape(eras[i].narrow)); + } -var _baseWidget2 = _interopRequireDefault(_baseWidget); + this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); + this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i'); + this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i'); + this._erasNarrowRegex = new RegExp( + '^(' + narrowPieces.join('|') + ')', + 'i' + ); + } -var _chartOptionConst = __webpack_require__(17); + // FORMATTING -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); -var _chartOptionUtil = __webpack_require__(30); + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); -var ChartOptionUtil = _interopRequireWildcard(_chartOptionUtil); + function addWeekYearFormatToken(token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // ALIASES -/** - * options = { - * width: % or px default 100%, - * height:% or px default 30px, - * value: '' - * onChanged: function(){] - * } - * @param parentId - * @param options - * @constructor - */ -function BaseCheckButtonGroupWidget(parentId, options) { - _baseWidget2.default.call(this, parentId, options); -} /** - * Created by mk90.kim on 2017-05-10. - */ + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); -BaseCheckButtonGroupWidget.prototype = Object.create(_baseWidget2.default.prototype); -BaseCheckButtonGroupWidget.prototype.constructor = BaseCheckButtonGroupWidget; + // PRIORITY -BaseCheckButtonGroupWidget.prototype._init = function () { - _baseWidget2.default.prototype._init.call(this); - this._buttonList = []; - this._setCheckBtnList(); - this.$buttonObjList = []; -}; + addUnitPriority('weekYear', 1); + addUnitPriority('isoWeekYear', 1); -BaseCheckButtonGroupWidget.prototype._setCheckBtnList = function () { - //implement -}; + // PARSING -BaseCheckButtonGroupWidget.prototype._createContents = function ($parent) { - this._isRendered = false; - this.$checkButtonGroupControl = $('' + '
' + ''); - $parent.append(this.$checkButtonGroupControl); - this._createChkBtnGrpUnits(); - this._renderButtonSelected(this.options.value); - this._setPreValue(this.options.value); - this._isRendered = true; -}; + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); -BaseCheckButtonGroupWidget.prototype._renderButtonSelected = function (selectedValueList) { - this.$buttonObjList.forEach(function (btn) { - if ($.inArray(btn.attr('id'), selectedValueList) > -1) { - btn.jqxToggleButton('check'); - } + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function ( + input, + week, + config, + token + ) { + week[token.substr(0, 2)] = toInt(input); }); -}; -BaseCheckButtonGroupWidget.prototype._createChkBtnGrpUnits = function () { - var btnSetList = this._buttonList; + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = hooks.parseTwoDigitYear(input); + }); - for (var btnSetIdx = 0; btnSetIdx < btnSetList.length; btnSetIdx++) { - var $checkButton = $('
'); - this.$checkButtonGroupControl.append($checkButton); + // MOMENTS + + function getSetWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.week(), + this.weekday(), + this.localeData()._week.dow, + this.localeData()._week.doy + ); + } - if (btnSetList[btnSetIdx].imageClass) { - $checkButton.addClass(btnSetList[btnSetIdx].imageClass); - } + function getSetISOWeekYear(input) { + return getSetWeekYearHelper.call( + this, + input, + this.isoWeek(), + this.isoWeekday(), + 1, + 4 + ); + } - if (btnSetList[btnSetIdx].label) { - $checkButton.attr('value', btnSetList[btnSetIdx].label); - } + function getISOWeeksInYear() { + return weeksInYear(this.year(), 1, 4); + } - $checkButton.attr('id', btnSetList[btnSetIdx].value); + function getISOWeeksInISOWeekYear() { + return weeksInYear(this.isoWeekYear(), 1, 4); + } - $checkButton.jqxToggleButton({ - theme: _chartOptionConst2.default.Theme, - height: this.options.height || '30px' - }); + function getWeeksInYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } - this.$buttonObjList.push($checkButton); - this._createClickEvent($checkButton); + function getWeeksInWeekYear() { + var weekInfo = this.localeData()._week; + return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy); } -}; -BaseCheckButtonGroupWidget.prototype._createClickEvent = function ($checkButton) { - var _this = this; - $checkButton.on('click', function (event) { - var selectedBtnId = $(event.target).attr('id'); - //get selected button list - var selectedValue = []; - _this.$buttonObjList.forEach(function (btn) { - if (btn.jqxToggleButton('toggled')) { - selectedValue.push(btn.attr('id')); + function getSetWeekYearHelper(input, week, weekday, dow, doy) { + var weeksTarget; + if (input == null) { + return weekOfYear(this, dow, doy).year; + } else { + weeksTarget = weeksInYear(input, dow, doy); + if (week > weeksTarget) { + week = weeksTarget; } - }); + return setWeekAll.call(this, input, week, weekday, dow, doy); + } + } - //call onChanged function - if (ChartOptionUtil.isEmpty(_this.options.onChanged) || _this._isRendered === false) return; - if (!_this._isChanged(selectedValue)) return; - _this.options.onChanged(selectedValue); - }); -}; + function setWeekAll(weekYear, week, weekday, dow, doy) { + var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), + date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); -BaseCheckButtonGroupWidget.prototype.toggleDisable = function (disabledVal) { - this.$buttonObjList.forEach(function ($btn) { - $btn.jqxToggleButton({ disabled: disabledVal }); - //TODO: jqx bug인지 직접 add class 해주지않으면 disabled가 안먹힘 - $btn.addClass('jqx-fill-state-disabled jqx-fill-state-disabled-' + _chartOptionConst2.default.Theme); + this.year(date.getUTCFullYear()); + this.month(date.getUTCMonth()); + this.date(date.getUTCDate()); + return this; + } + + // FORMATTING + + addFormatToken('Q', 0, 'Qo', 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PRIORITY + + addUnitPriority('quarter', 7); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; }); -}; -BaseCheckButtonGroupWidget.prototype.render = function (changedValue) { - this._renderButtonSelected(changedValue); -}; + // MOMENTS -exports.default = BaseCheckButtonGroupWidget; + function getSetQuarter(input) { + return input == null + ? Math.ceil((this.month() + 1) / 3) + : this.month((input - 1) * 3 + (this.month() % 3)); + } -/***/ }), -/* 282 */ -/***/ (function(module, exports, __webpack_require__) { + // FORMATTING -"use strict"; + addFormatToken('D', ['DD', 2], 'Do', 'date'); + // ALIASES -Object.defineProperty(exports, "__esModule", { - value: true -}); + addUnitAlias('date', 'D'); -var _dialog = __webpack_require__(42); + // PRIORITY + addUnitPriority('date', 9); -var _dialog2 = _interopRequireDefault(_dialog); + // PARSING -var _chartOptionConst = __webpack_require__(17); + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + // TODO: Remove "ordinalParse" fallback in next major release. + return isStrict + ? locale._dayOfMonthOrdinalParse || locale._ordinalParse + : locale._dayOfMonthOrdinalParseLenient; + }); -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0]); + }); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // MOMENTS -/** - * Created by mk90.kim on 2016-08-20. - */ + var getSetDayOfMonth = makeGetSet('Date', true); -function DataSourceSelectorDialog(parentId, options) { - _dialog2.default.call(this, parentId, options); -} + // FORMATTING -DataSourceSelectorDialog.prototype = Object.create(_dialog2.default.prototype); -DataSourceSelectorDialog.prototype.constructor = DataSourceSelectorDialog; + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); -DataSourceSelectorDialog.prototype._getTitle = function () { - return 'Select DataSource'; -}; + // ALIASES -DataSourceSelectorDialog.prototype._getDefaultWindowOption = function () { - var _this = this; - var defaultOption = { - theme: _chartOptionConst2.default.Theme, - width: '300px', - height: '400px', - maxWidth: '300px', - maxHeight: '400px', - resizable: false, - initContent: function initContent() { - _this._configurePosition(); - _this._dataSourceList = _this._getDataSourceList() || []; - _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); - _this.dialogResult = _this.options.id; - } - }; - return defaultOption; -}; + addUnitAlias('dayOfYear', 'DDD'); -DataSourceSelectorDialog.prototype._getDataSourceList = function () { - if (typeof this.options.dataSource.getDataSourceList === 'function') { - return this.options.dataSource.getDataSourceList(); + // PRIORITY + addUnitPriority('dayOfYear', 4); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + // MOMENTS + + function getSetDayOfYear(input) { + var dayOfYear = + Math.round( + (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5 + ) + 1; + return input == null ? dayOfYear : this.add(input - dayOfYear, 'd'); } -}; -DataSourceSelectorDialog.prototype._createDialogContentsArea = function ($parent) { - this.$mainContainer = $('
'); - this.$datasourceArea = $('
'); - $parent.append(this.$mainContainer); - this.$mainContainer.append(this.$datasourceArea); + // FORMATTING - this._createColumnListContents(this.$datasourceArea); -}; + addFormatToken('m', ['mm', 2], 0, 'minute'); -DataSourceSelectorDialog.prototype._createColumnListContents = function ($parent) { - var _this = this; - var $container = $('
'); - this.$datasourceListBox = $('
'); - $parent.append($container); - $container.append(this.$datasourceListBox); + // ALIASES - for (var i = 0; i < this._dataSourceList.length; i++) { + addUnitAlias('minute', 'm'); - var $datasource = $('' + '
' + '
' + '
'); - $datasource.attr('value', this._dataSourceList[i].value); - $datasource.attr('label', this._dataSourceList[i].label); - $datasource.attr('dsIdx', this._dataSourceList[i].dataSourceIndex); - $datasource.find('.bo-dialog-column-item-label').text(this._dataSourceList[i].label); - this.$datasourceListBox.append($datasource); + // PRIORITY - if (this.options.id && this.options.id.value === this._dataSourceList[i].value) { - $datasource.addClass('selected'); - } + addUnitPriority('minute', 14); - $datasource.click(function () { - _this.$datasourceListBox.find('.selected').removeClass('selected'); - $(this).addClass('selected'); - _this.dialogResult = { - value: $(this).attr('value'), - label: $(this).attr('label'), - dataSourceIndex: Number($(this).attr('dsIdx')) - }; - }); - } -}; + // PARSING -exports.default = DataSourceSelectorDialog; + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); -/***/ }), -/* 283 */ -/***/ (function(module, exports, __webpack_require__) { + // MOMENTS -"use strict"; + var getSetMinute = makeGetSet('Minutes', false); + // FORMATTING -Object.defineProperty(exports, "__esModule", { - value: true -}); + addFormatToken('s', ['ss', 2], 0, 'second'); -var _dialog = __webpack_require__(42); + // ALIASES -var _dialog2 = _interopRequireDefault(_dialog); + addUnitAlias('second', 's'); -var _chartOptionConst = __webpack_require__(17); + // PRIORITY -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + addUnitPriority('second', 15); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // PARSING -/** - * options = { - * value: '', - * chartTypeList: [], - * onChanged: function(){] - * } - * - */ - -/** - * Created by daewon77.park on 2016-08-20. - */ - -function ChartTypeSelectorDialog(parentId, options) { - _dialog2.default.call(this, parentId, options); -} + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); -ChartTypeSelectorDialog.prototype = Object.create(_dialog2.default.prototype); -ChartTypeSelectorDialog.prototype.constructor = ChartTypeSelectorDialog; + // MOMENTS -ChartTypeSelectorDialog.prototype._init = function () { - _dialog2.default.prototype._init.call(this); - this.options.showHeader = false; -}; + var getSetSecond = makeGetSet('Seconds', false); -ChartTypeSelectorDialog.prototype._createDialogsBody = function () { - this._setFocus(); - this._createCloseHandler(); - this.$mainControl.on('close', this._destroy.bind(this)); + // FORMATTING - var $body = this.$mainControl.find('.bo-dialogs-body'); + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); - $body.css({ - width: '100%', - height: '100%', - 'box-sizing': 'border-box' + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); }); - $body.perfectScrollbar(); -}; -ChartTypeSelectorDialog.prototype._getDefaultWindowOption = function () { - var _this = this; - var windowHeight = (parseInt(this._getChartTypeList().length / 4) + 1) * 66 + 10; + addFormatToken(0, ['SSS', 3], 0, 'millisecond'); + addFormatToken(0, ['SSSS', 4], 0, function () { + return this.millisecond() * 10; + }); + addFormatToken(0, ['SSSSS', 5], 0, function () { + return this.millisecond() * 100; + }); + addFormatToken(0, ['SSSSSS', 6], 0, function () { + return this.millisecond() * 1000; + }); + addFormatToken(0, ['SSSSSSS', 7], 0, function () { + return this.millisecond() * 10000; + }); + addFormatToken(0, ['SSSSSSSS', 8], 0, function () { + return this.millisecond() * 100000; + }); + addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { + return this.millisecond() * 1000000; + }); - return { - theme: _chartOptionConst2.default.Theme, - width: '282px', - height: windowHeight + 'px', - maxWidth: '300px', - maxHeight: '345px', - resizable: false, - initContent: function initContent() { - _this._configurePosition(); - _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); - } - }; -}; + // ALIASES -ChartTypeSelectorDialog.prototype._createDialogContentsArea = function ($parent) { - var _this = this; - this.$chartListContainer = $('
'); - $parent.append(this.$chartListContainer); + addUnitAlias('millisecond', 'ms'); - var chartList = this._getChartTypeList().sort(function (a, b) { - return Brightics.Chart.getChartAttr(a).Order - Brightics.Chart.getChartAttr(b).Order; - }); - // if(chartList.length < 8){ - this.$chartListContainer.closest('div[role="dialog"]').css({ height: '144px' }); - // } + // PRIORITY + addUnitPriority('millisecond', 16); - for (var i = 0; i < chartList.length; i++) { - var chartLabel = Brightics.Chart.getChartAttr(chartList[i]).Label; - var $addChart = $('' + '
' + '
' + '
' + chartLabel + '
' + '
'); + // PARSING - if (this.options.value === chartList[i]) { - $addChart.addClass('selected'); - } + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); - this.$chartListContainer.append($addChart); + var token, getSetMillisecond; + for (token = 'SSSS'; token.length <= 9; token += 'S') { + addRegexToken(token, matchUnsigned); + } - $addChart.click(function () { - _this.$chartListContainer.find('.selected').removeClass('selected'); - $(this).addClass('selected'); - _this._close(); + function parseMs(input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + } - if (typeof _this.options.close === 'function') { - _this.options.close(_this._getDialogResult()); - } - }); + for (token = 'S'; token.length <= 9; token += 'S') { + addParseToken(token, parseMs); } -}; -ChartTypeSelectorDialog.prototype._destroy = function () { - $(window).off('mousedown', this._closeHandler); - this.$mainControl.jqxWindow('destroy'); - this.$mainControl.remove(); -}; + getSetMillisecond = makeGetSet('Milliseconds', false); -ChartTypeSelectorDialog.prototype._getChartTypeList = function () { - if (this.options.chartTypeList) { - return this.options.chartTypeList; - } else { - return Brightics.Chart.getChartTypeList(); - } -}; + // FORMATTING -ChartTypeSelectorDialog.prototype._getDialogResult = function () { - return this.$chartListContainer.find('.selected .bcharts-adonis-chart-selector').attr('chart'); -}; + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); -exports.default = ChartTypeSelectorDialog; + // MOMENTS -/***/ }), -/* 284 */ -/***/ (function(module, exports, __webpack_require__) { + function getZoneAbbr() { + return this._isUTC ? 'UTC' : ''; + } -"use strict"; + function getZoneName() { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + var proto = Moment.prototype; + + proto.add = add; + proto.calendar = calendar$1; + proto.clone = clone; + proto.diff = diff; + proto.endOf = endOf; + proto.format = format; + proto.from = from; + proto.fromNow = fromNow; + proto.to = to; + proto.toNow = toNow; + proto.get = stringGet; + proto.invalidAt = invalidAt; + proto.isAfter = isAfter; + proto.isBefore = isBefore; + proto.isBetween = isBetween; + proto.isSame = isSame; + proto.isSameOrAfter = isSameOrAfter; + proto.isSameOrBefore = isSameOrBefore; + proto.isValid = isValid$2; + proto.lang = lang; + proto.locale = locale; + proto.localeData = localeData; + proto.max = prototypeMax; + proto.min = prototypeMin; + proto.parsingFlags = parsingFlags; + proto.set = stringSet; + proto.startOf = startOf; + proto.subtract = subtract; + proto.toArray = toArray; + proto.toObject = toObject; + proto.toDate = toDate; + proto.toISOString = toISOString; + proto.inspect = inspect; + if (typeof Symbol !== 'undefined' && Symbol.for != null) { + proto[Symbol.for('nodejs.util.inspect.custom')] = function () { + return 'Moment<' + this.format() + '>'; + }; + } + proto.toJSON = toJSON; + proto.toString = toString; + proto.unix = unix; + proto.valueOf = valueOf; + proto.creationData = creationData; + proto.eraName = getEraName; + proto.eraNarrow = getEraNarrow; + proto.eraAbbr = getEraAbbr; + proto.eraYear = getEraYear; + proto.year = getSetYear; + proto.isLeapYear = getIsLeapYear; + proto.weekYear = getSetWeekYear; + proto.isoWeekYear = getSetISOWeekYear; + proto.quarter = proto.quarters = getSetQuarter; + proto.month = getSetMonth; + proto.daysInMonth = getDaysInMonth; + proto.week = proto.weeks = getSetWeek; + proto.isoWeek = proto.isoWeeks = getSetISOWeek; + proto.weeksInYear = getWeeksInYear; + proto.weeksInWeekYear = getWeeksInWeekYear; + proto.isoWeeksInYear = getISOWeeksInYear; + proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear; + proto.date = getSetDayOfMonth; + proto.day = proto.days = getSetDayOfWeek; + proto.weekday = getSetLocaleDayOfWeek; + proto.isoWeekday = getSetISODayOfWeek; + proto.dayOfYear = getSetDayOfYear; + proto.hour = proto.hours = getSetHour; + proto.minute = proto.minutes = getSetMinute; + proto.second = proto.seconds = getSetSecond; + proto.millisecond = proto.milliseconds = getSetMillisecond; + proto.utcOffset = getSetOffset; + proto.utc = setOffsetToUTC; + proto.local = setOffsetToLocal; + proto.parseZone = setOffsetToParsedOffset; + proto.hasAlignedHourOffset = hasAlignedHourOffset; + proto.isDST = isDaylightSavingTime; + proto.isLocal = isLocal; + proto.isUtcOffset = isUtcOffset; + proto.isUtc = isUtc; + proto.isUTC = isUtc; + proto.zoneAbbr = getZoneAbbr; + proto.zoneName = getZoneName; + proto.dates = deprecate( + 'dates accessor is deprecated. Use date instead.', + getSetDayOfMonth + ); + proto.months = deprecate( + 'months accessor is deprecated. Use month instead', + getSetMonth + ); + proto.years = deprecate( + 'years accessor is deprecated. Use year instead', + getSetYear + ); + proto.zone = deprecate( + 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', + getSetZone + ); + proto.isDSTShifted = deprecate( + 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', + isDaylightSavingTimeShifted + ); + + function createUnix(input) { + return createLocal(input * 1000); + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + function createInZone() { + return createLocal.apply(null, arguments).parseZone(); + } -var _baseComplexWidget = __webpack_require__(36); + function preParsePostFormat(string) { + return string; + } -var _baseComplexWidget2 = _interopRequireDefault(_baseComplexWidget); + var proto$1 = Locale.prototype; + + proto$1.calendar = calendar; + proto$1.longDateFormat = longDateFormat; + proto$1.invalidDate = invalidDate; + proto$1.ordinal = ordinal; + proto$1.preparse = preParsePostFormat; + proto$1.postformat = preParsePostFormat; + proto$1.relativeTime = relativeTime; + proto$1.pastFuture = pastFuture; + proto$1.set = set; + proto$1.eras = localeEras; + proto$1.erasParse = localeErasParse; + proto$1.erasConvertYear = localeErasConvertYear; + proto$1.erasAbbrRegex = erasAbbrRegex; + proto$1.erasNameRegex = erasNameRegex; + proto$1.erasNarrowRegex = erasNarrowRegex; + + proto$1.months = localeMonths; + proto$1.monthsShort = localeMonthsShort; + proto$1.monthsParse = localeMonthsParse; + proto$1.monthsRegex = monthsRegex; + proto$1.monthsShortRegex = monthsShortRegex; + proto$1.week = localeWeek; + proto$1.firstDayOfYear = localeFirstDayOfYear; + proto$1.firstDayOfWeek = localeFirstDayOfWeek; + + proto$1.weekdays = localeWeekdays; + proto$1.weekdaysMin = localeWeekdaysMin; + proto$1.weekdaysShort = localeWeekdaysShort; + proto$1.weekdaysParse = localeWeekdaysParse; + + proto$1.weekdaysRegex = weekdaysRegex; + proto$1.weekdaysShortRegex = weekdaysShortRegex; + proto$1.weekdaysMinRegex = weekdaysMinRegex; + + proto$1.isPM = localeIsPM; + proto$1.meridiem = localeMeridiem; + + function get$1(format, index, field, setter) { + var locale = getLocale(), + utc = createUTC().set(setter, index); + return locale[field](utc, format); + } -var _widgetFactory = __webpack_require__(3); + function listMonthsImpl(format, index, field) { + if (isNumber(format)) { + index = format; + format = undefined; + } -var WidgetFactory = _interopRequireWildcard(_widgetFactory); + format = format || ''; -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + if (index != null) { + return get$1(format, index, field, 'month'); + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + var i, + out = []; + for (i = 0; i < 12; i++) { + out[i] = get$1(format, i, field, 'month'); + } + return out; + } -/** - * options = { - * width: % or px default 100%, - * height:% or px default 100%, - * value: - * { - * left: 'px', - * right: 'px', - * top: 'px', - * bottom: 'px', - * }, (all value is px) - * position: ['left', 'top', 'right', 'bottom'], - * onChanged: function(){] - * } - * @param parentId - * @param options - * @constructor - */ -/** - * Created by mk90 on 2017-05-27. - */ + // () + // (5) + // (fmt, 5) + // (fmt) + // (true) + // (true, 5) + // (true, fmt, 5) + // (true, fmt) + function listWeekdaysImpl(localeSorted, format, index, field) { + if (typeof localeSorted === 'boolean') { + if (isNumber(format)) { + index = format; + format = undefined; + } -function PositionWidget(parentId, options) { - _baseComplexWidget2.default.call(this, parentId, options); - this.renderProblem(); -} + format = format || ''; + } else { + format = localeSorted; + index = format; + localeSorted = false; -PositionWidget.prototype = Object.create(_baseComplexWidget2.default.prototype); -PositionWidget.prototype.constructor = PositionWidget; + if (isNumber(format)) { + index = format; + format = undefined; + } -PositionWidget.prototype._init = function () { - _baseComplexWidget2.default.prototype._init.call(this); - this.baseIconAppended = false; - this.inputValue = {}; - this.selectedUnit = {}; - if (typeof this.options.getValue === 'function') { - for (var i in this.options.value) { - this.options.value[i] = this.options.getValue(this.options.value[i]); + format = format || ''; } - } -}; - -PositionWidget.prototype._createContents = function ($parent) { - this.$mainControl = $('' + '
' + '
' + '
' + '
' + '
'); - $parent.append(this.$mainControl); + var locale = getLocale(), + shift = localeSorted ? locale._week.dow : 0, + i, + out = []; - var _this = this; - this.options.position.forEach(function (position) { - _this._createPositionContent(position); - }); -}; + if (index != null) { + return get$1(format, (index + shift) % 7, field, 'day'); + } -PositionWidget.prototype._createPositionContent = function (position) { - var $targetArea, positionInputControl, defaultValue; - if (position === 'left') { - $targetArea = this.$mainControl.find('.bo-widget-position-middle'); - this._createPositionInputContent($targetArea, position); - this._createBaseIcon(); - } - if (position === 'right') { - $targetArea = this.$mainControl.find('.bo-widget-position-middle'); - this._createPositionInputContent($targetArea, position); - } - if (position === 'top') { - $targetArea = this.$mainControl.find('.bo-widget-position-top'); - this._createPositionInputContent($targetArea, position); - this._createBaseIcon(); + for (i = 0; i < 7; i++) { + out[i] = get$1(format, (i + shift) % 7, field, 'day'); + } + return out; } - if (position === 'bottom') { - $targetArea = this.$mainControl.find('.bo-widget-position-bottom'); - this._createBaseIcon(); - this._createPositionInputContent($targetArea, position); + + function listMonths(format, index) { + return listMonthsImpl(format, index, 'months'); } -}; -PositionWidget.prototype._createBaseIcon = function () { - if (!this.baseIconAppended) { - var $targetArea = this.$mainControl.find('.bo-widget-position-middle'); - var $baseIcon = $('
'); - $baseIcon.css({ - border: 'dashed 1px #000000', - background: '#d3d3d3', - // width: '30px', - // height: '20px', - margin: '0 5px' - }); + function listMonthsShort(format, index) { + return listMonthsImpl(format, index, 'monthsShort'); + } - $targetArea.append($baseIcon); - this.baseIconAppended = true; + function listWeekdays(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); } -}; -PositionWidget.prototype._createPositionInputContent = function ($parent, position) { - var value = this.options.value && this.options.value[position] ? this.options.value[position] + '' : ''; + function listWeekdaysShort(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); + } - var postFix = value.indexOf('%') >= 0 ? '%' : 'px'; - var numberValue = value.replace(postFix, ''); + function listWeekdaysMin(localeSorted, format, index) { + return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); + } - var _this = this; - this.inputValue[position] = numberValue; - this.selectedUnit[position] = postFix; - var numberInput = WidgetFactory.createNumberInputWidget($parent, { - width: '80px', - value: numberValue, - internalLabel: position, - problemKeyList: this.options.problemKeyList, - onChanged: function onChanged(value) { - _this.inputValue[position] = value; - _this.options.onChanged[position](value || value === 0 ? value + _this.selectedUnit[position] : ''); - } + getSetGlobalLocale('en', { + eras: [ + { + since: '0001-01-01', + until: +Infinity, + offset: 1, + name: 'Anno Domini', + narrow: 'AD', + abbr: 'AD', + }, + { + since: '0000-12-31', + until: -Infinity, + offset: 1, + name: 'Before Christ', + narrow: 'BC', + abbr: 'BC', + }, + ], + dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal: function (number) { + var b = number % 10, + output = + toInt((number % 100) / 10) === 1 + ? 'th' + : b === 1 + ? 'st' + : b === 2 + ? 'nd' + : b === 3 + ? 'rd' + : 'th'; + return number + output; + }, }); - var unitSwitchButton = WidgetFactory.createSwitchButtonWidget($parent, { - value: postFix, - width: '20px', - height: '27px', - itemList: this.options.itemList || [{ value: 'px', label: 'Px' }, { value: '%', label: '%' }], - onChanged: function onChanged(changedUnit) { - _this.selectedUnit[position] = changedUnit; - _this.options.onChanged[position](_this.inputValue[position] ? _this.inputValue[position] + changedUnit : ''); - } - }); - unitSwitchButton.addCSSInMainControl({ - 'border-left': 'none' - }); + // Side effect imports - this._widgetList.push(numberInput); - this._widgetList.push(unitSwitchButton); -}; + hooks.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + getSetGlobalLocale + ); + hooks.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + getLocale + ); -PositionWidget.prototype.renderProblem = function (problems) { - var _this = this; - this._widgetList.forEach(function (widget) { - widget.renderProblem(problems); - }); -}; + var mathAbs = Math.abs; -exports.default = PositionWidget; + function abs() { + var data = this._data; -/***/ }), -/* 285 */ -/***/ (function(module, exports, __webpack_require__) { + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); -"use strict"; + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + return this; + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + function addSubtract$1(duration, input, value, direction) { + var other = createDuration(input, value); -var _dialog = __webpack_require__(42); + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; -var _dialog2 = _interopRequireDefault(_dialog); + return duration._bubble(); + } -var _chartOptionConst = __webpack_require__(17); + // supports only 2.0-style add(1, 's') or add(duration) + function add$1(input, value) { + return addSubtract$1(this, input, value, 1); + } -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function subtract$1(input, value) { + return addSubtract$1(this, input, value, -1); + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + function absCeil(number) { + if (number < 0) { + return Math.floor(number); + } else { + return Math.ceil(number); + } + } -/** - * options = { - * value: '', - * chartTypeList: [], - * onChanged: function(){] - * } - * - */ + function bubble() { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + seconds, + minutes, + hours, + years, + monthsFromDays; + + // if we have a mix of positive and negative values, bubble down first + // check: https://github.com/moment/moment/issues/2166 + if ( + !( + (milliseconds >= 0 && days >= 0 && months >= 0) || + (milliseconds <= 0 && days <= 0 && months <= 0) + ) + ) { + milliseconds += absCeil(monthsToDays(months) + days) * 864e5; + days = 0; + months = 0; + } -/** - * Created by daewon77.park on 2016-08-20. - */ + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; -function ItemSelectorDialog(parentId, options) { - _dialog2.default.call(this, parentId, options); -} + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; -ItemSelectorDialog.prototype = Object.create(_dialog2.default.prototype); -ItemSelectorDialog.prototype.constructor = ItemSelectorDialog; + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; -ItemSelectorDialog.prototype._init = function () { - _dialog2.default.prototype._init.call(this); - this.options.showHeader = false; -}; + hours = absFloor(minutes / 60); + data.hours = hours % 24; -ItemSelectorDialog.prototype._createDialogsBody = function () { - this._setFocus(); - this._createCloseHandler(); - this.$mainControl.on('close', this._destroy.bind(this)); + days += absFloor(hours / 24); - var $body = this.$mainControl.find('.bo-dialogs-body'); + // convert days to months + monthsFromDays = absFloor(daysToMonths(days)); + months += monthsFromDays; + days -= absCeil(monthsToDays(monthsFromDays)); - $body.css({ - width: '100%', - height: '100%', - 'box-sizing': 'border-box' - }); - $body.perfectScrollbar(); -}; + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; -ItemSelectorDialog.prototype._getDefaultWindowOption = function () { - var _this = this; + data.days = days; + data.months = months; + data.years = years; - var windowHeight = this.options.itemList.length * 22 + 10; + return this; + } - return { - theme: _chartOptionConst2.default.Theme, - width: this.options.width || '285px', - height: windowHeight + 'px', - minHeight: '32px', - maxWidth: '300px', - maxHeight: '120px', - resizable: false, - initContent: function initContent() { - _this._configurePosition(); - _this._createDialogContentsArea(_this.$mainControl.find('.bo-dialogs-contents')); + function daysToMonths(days) { + // 400 years have 146097 days (taking into account leap year rules) + // 400 years have 12 months === 4800 + return (days * 4800) / 146097; + } + + function monthsToDays(months) { + // the reverse of daysToMonths + return (months * 146097) / 4800; + } + + function as(units) { + if (!this.isValid()) { + return NaN; } - }; -}; + var days, + months, + milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'quarter' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToMonths(days); + switch (units) { + case 'month': + return months; + case 'quarter': + return months / 3; + case 'year': + return months / 12; + } + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(monthsToDays(this._months)); + switch (units) { + case 'week': + return days / 7 + milliseconds / 6048e5; + case 'day': + return days + milliseconds / 864e5; + case 'hour': + return days * 24 + milliseconds / 36e5; + case 'minute': + return days * 1440 + milliseconds / 6e4; + case 'second': + return days * 86400 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': + return Math.floor(days * 864e5) + milliseconds; + default: + throw new Error('Unknown unit ' + units); + } + } + } -ItemSelectorDialog.prototype._configurePosition = function (position, isSwitch) { - position = position || this.options.windowPosition; - if (!position) return; - var $window = this.$mainControl; - var anchorOffset = this.$parent.offset(), - anchorWidth = this.$parent.width(), - anchorHeight = this.$parent.height(), - windowOffset = this.$mainControl.offset(), - windowWidth = this.$mainControl.width(), - windowHeight = this.$mainControl.height(), - windowLeft, - windowTop, - isChanged = false; + // TODO: Use this.as('ms')? + function valueOf$1() { + if (!this.isValid()) { + return NaN; + } + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } - switch (position) { - case 'left': - windowLeft = anchorOffset.left - windowWidth - 3; - windowTop = anchorOffset.top; - break; - case 'right': - windowLeft = anchorOffset.left + anchorWidth + 3; - windowTop = anchorOffset.top; - break; - case 'top': - windowLeft = anchorOffset.left; - windowTop = anchorOffset.top - windowHeight; - break; - case 'bottom': - windowLeft = anchorOffset.left; - windowTop = anchorOffset.top + anchorHeight - 1; - break; - case 'bottom-left': - windowLeft = anchorOffset.left - (windowWidth - anchorWidth) - 2; - windowTop = anchorOffset.top + anchorHeight - 1; - break; + function makeAs(alias) { + return function () { + return this.as(alias); + }; } - if (windowLeft + windowWidth > window.innerWidth) windowLeft = window.innerWidth - windowWidth - 5, isChanged = true; - if (windowTop + windowHeight > window.innerHeight) windowTop = window.innerHeight - windowHeight - 5, isChanged = true; - if (windowLeft < 0) windowLeft = 5, isChanged = true; - if (windowTop < 0) windowTop = 5, isChanged = true; + var asMilliseconds = makeAs('ms'), + asSeconds = makeAs('s'), + asMinutes = makeAs('m'), + asHours = makeAs('h'), + asDays = makeAs('d'), + asWeeks = makeAs('w'), + asMonths = makeAs('M'), + asQuarters = makeAs('Q'), + asYears = makeAs('y'); + + function clone$1() { + return createDuration(this); + } - if (isChanged === true && this.options.switchPosition && isSwitch !== true) { - this._configurePosition(this.options.switchPosition, true); - } else { - $window.css('left', windowLeft); - $window.css('top', windowTop); + function get$2(units) { + units = normalizeUnits(units); + return this.isValid() ? this[units + 's']() : NaN; } -}; -ItemSelectorDialog.prototype._createDialogContentsArea = function ($parent) { - var _this = this; - this.$itemListContainer = $('
'); - $parent.append(this.$itemListContainer); + function makeGetter(name) { + return function () { + return this.isValid() ? this._data[name] : NaN; + }; + } - var itemList = this._getItemList(); - // if(chartList.length < 8){ - this.$itemListContainer.closest('div[role="dialog"]').css({ height: '144px' }); - // } + var milliseconds = makeGetter('milliseconds'), + seconds = makeGetter('seconds'), + minutes = makeGetter('minutes'), + hours = makeGetter('hours'), + days = makeGetter('days'), + months = makeGetter('months'), + years = makeGetter('years'); + function weeks() { + return absFloor(this.days() / 7); + } - for (var i = 0; i < itemList.length; i++) { - var itemLabel = itemList[i].label; - var $addItem = $('
' + '
' + itemLabel + '
' + '
'); + var round = Math.round, + thresholds = { + ss: 44, // a few seconds to seconds + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month/week + w: null, // weeks to month + M: 11, // months to year + }; - if (this.options.value === itemList[i].value) { - $addItem.addClass('selected'); + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) { + var duration = createDuration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + weeks = round(duration.as('w')), + years = round(duration.as('y')), + a = + (seconds <= thresholds.ss && ['s', seconds]) || + (seconds < thresholds.s && ['ss', seconds]) || + (minutes <= 1 && ['m']) || + (minutes < thresholds.m && ['mm', minutes]) || + (hours <= 1 && ['h']) || + (hours < thresholds.h && ['hh', hours]) || + (days <= 1 && ['d']) || + (days < thresholds.d && ['dd', days]); + + if (thresholds.w != null) { + a = + a || + (weeks <= 1 && ['w']) || + (weeks < thresholds.w && ['ww', weeks]); } + a = a || + (months <= 1 && ['M']) || + (months < thresholds.M && ['MM', months]) || + (years <= 1 && ['y']) || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } - this.$itemListContainer.append($addItem); + // This function allows you to set the rounding function for relative time strings + function getSetRelativeTimeRounding(roundingFunction) { + if (roundingFunction === undefined) { + return round; + } + if (typeof roundingFunction === 'function') { + round = roundingFunction; + return true; + } + return false; + } - $addItem.click(function () { - _this.$itemListContainer.find('.selected').removeClass('selected'); - $(this).addClass('selected'); - _this._close(); + // This function allows you to set a threshold for relative time strings + function getSetRelativeTimeThreshold(threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + if (threshold === 's') { + thresholds.ss = limit - 1; + } + return true; + } - if (typeof _this.options.close === 'function') { - _this.options.close(_this._getDialogResult()); + function humanize(argWithSuffix, argThresholds) { + if (!this.isValid()) { + return this.localeData().invalidDate(); + } + + var withSuffix = false, + th = thresholds, + locale, + output; + + if (typeof argWithSuffix === 'object') { + argThresholds = argWithSuffix; + argWithSuffix = false; + } + if (typeof argWithSuffix === 'boolean') { + withSuffix = argWithSuffix; + } + if (typeof argThresholds === 'object') { + th = Object.assign({}, thresholds, argThresholds); + if (argThresholds.s != null && argThresholds.ss == null) { + th.ss = argThresholds.s - 1; } - }); - } -}; + } -ItemSelectorDialog.prototype._destroy = function () { - $(window).off('mousedown', this._closeHandler); - this.$mainControl.jqxWindow('destroy'); - this.$mainControl.remove(); -}; + locale = this.localeData(); + output = relativeTime$1(this, !withSuffix, th, locale); -ItemSelectorDialog.prototype._getItemList = function () { - if (this.options.itemList) { - return this.options.itemList; - } else { - return []; + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); } -}; -ItemSelectorDialog.prototype._getDialogResult = function () { - return this.$itemListContainer.find('.selected .bo-widget-item-selector-item').attr('item-value'); -}; + var abs$1 = Math.abs; -exports.default = ItemSelectorDialog; + function sign(x) { + return (x > 0) - (x < 0) || +x; + } -/***/ }), -/* 286 */ -/***/ (function(module, exports, __webpack_require__) { + function toISOString$1() { + // for ISO strings we do not use the normal bubbling rules: + // * milliseconds bubble up until they become hours + // * days do not bubble at all + // * months bubble up until they become years + // This is because there is no context-free conversion between hours and days + // (think of clock changes) + // and also not between days and months (28-31 days per month) + if (!this.isValid()) { + return this.localeData().invalidDate(); + } -"use strict"; + var seconds = abs$1(this._milliseconds) / 1000, + days = abs$1(this._days), + months = abs$1(this._months), + minutes, + hours, + years, + s, + total = this.asSeconds(), + totalSign, + ymSign, + daysSign, + hmsSign; + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + // 3600 seconds -> 60 minutes -> 1 hour + minutes = absFloor(seconds / 60); + hours = absFloor(minutes / 60); + seconds %= 60; + minutes %= 60; + + // 12 months -> 1 year + years = absFloor(months / 12); + months %= 12; + + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : ''; + + totalSign = total < 0 ? '-' : ''; + ymSign = sign(this._months) !== sign(total) ? '-' : ''; + daysSign = sign(this._days) !== sign(total) ? '-' : ''; + hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : ''; + + return ( + totalSign + + 'P' + + (years ? ymSign + years + 'Y' : '') + + (months ? ymSign + months + 'M' : '') + + (days ? daysSign + days + 'D' : '') + + (hours || minutes || seconds ? 'T' : '') + + (hours ? hmsSign + hours + 'H' : '') + + (minutes ? hmsSign + minutes + 'M' : '') + + (seconds ? hmsSign + s + 'S' : '') + ); + } -Object.defineProperty(exports, "__esModule", { - value: true -}); + var proto$2 = Duration.prototype; + + proto$2.isValid = isValid$1; + proto$2.abs = abs; + proto$2.add = add$1; + proto$2.subtract = subtract$1; + proto$2.as = as; + proto$2.asMilliseconds = asMilliseconds; + proto$2.asSeconds = asSeconds; + proto$2.asMinutes = asMinutes; + proto$2.asHours = asHours; + proto$2.asDays = asDays; + proto$2.asWeeks = asWeeks; + proto$2.asMonths = asMonths; + proto$2.asQuarters = asQuarters; + proto$2.asYears = asYears; + proto$2.valueOf = valueOf$1; + proto$2._bubble = bubble; + proto$2.clone = clone$1; + proto$2.get = get$2; + proto$2.milliseconds = milliseconds; + proto$2.seconds = seconds; + proto$2.minutes = minutes; + proto$2.hours = hours; + proto$2.days = days; + proto$2.weeks = weeks; + proto$2.months = months; + proto$2.years = years; + proto$2.humanize = humanize; + proto$2.toISOString = toISOString$1; + proto$2.toString = toISOString$1; + proto$2.toJSON = toISOString$1; + proto$2.locale = locale; + proto$2.localeData = localeData; + + proto$2.toIsoString = deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', + toISOString$1 + ); + proto$2.lang = lang; + + // FORMATTING + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); -var _baseWidget = __webpack_require__(23); + //! moment.js + + hooks.version = '2.27.0'; + + setHookCallback(createLocal); + + hooks.fn = proto; + hooks.min = min; + hooks.max = max; + hooks.now = now; + hooks.utc = createUTC; + hooks.unix = createUnix; + hooks.months = listMonths; + hooks.isDate = isDate; + hooks.locale = getSetGlobalLocale; + hooks.invalid = createInvalid; + hooks.duration = createDuration; + hooks.isMoment = isMoment; + hooks.weekdays = listWeekdays; + hooks.parseZone = createInZone; + hooks.localeData = getLocale; + hooks.isDuration = isDuration; + hooks.monthsShort = listMonthsShort; + hooks.weekdaysMin = listWeekdaysMin; + hooks.defineLocale = defineLocale; + hooks.updateLocale = updateLocale; + hooks.locales = listLocales; + hooks.weekdaysShort = listWeekdaysShort; + hooks.normalizeUnits = normalizeUnits; + hooks.relativeTimeRounding = getSetRelativeTimeRounding; + hooks.relativeTimeThreshold = getSetRelativeTimeThreshold; + hooks.calendarFormat = getCalendarFormat; + hooks.prototype = proto; + + // currently HTML5 input type only supports 24-hour formats + hooks.HTML5_FMT = { + DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // + DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // + DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // + DATE: 'YYYY-MM-DD', // + TIME: 'HH:mm', // + TIME_SECONDS: 'HH:mm:ss', // + TIME_MS: 'HH:mm:ss.SSS', // + WEEK: 'GGGG-[W]WW', // + MONTH: 'YYYY-MM', // + }; -var _baseWidget2 = _interopRequireDefault(_baseWidget); + return hooks; -var _centerPositionWidget = __webpack_require__(121); +}))); -var _centerPositionWidget2 = _interopRequireDefault(_centerPositionWidget); +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(252)(module))) -var _chartOptionConst = __webpack_require__(17); +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { -var _chartOptionConst2 = _interopRequireDefault(_chartOptionConst); +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = __extends; +/* unused harmony export __assign */ +/* unused harmony export __rest */ +/* unused harmony export __decorate */ +/* unused harmony export __param */ +/* unused harmony export __metadata */ +/* unused harmony export __awaiter */ +/* unused harmony export __generator */ +/* unused harmony export __createBinding */ +/* unused harmony export __exportStar */ +/* unused harmony export __values */ +/* unused harmony export __read */ +/* unused harmony export __spread */ +/* unused harmony export __spreadArrays */ +/* unused harmony export __await */ +/* unused harmony export __asyncGenerator */ +/* unused harmony export __asyncDelegator */ +/* unused harmony export __asyncValues */ +/* unused harmony export __makeTemplateObject */ +/* unused harmony export __importStar */ +/* unused harmony export __importDefault */ +/* unused harmony export __classPrivateFieldGet */ +/* unused harmony export __classPrivateFieldSet */ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} -var _chartOptionUtil = __webpack_require__(30); +var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + } + return __assign.apply(this, arguments); +} -var ChartOptionUtil = _interopRequireWildcard(_chartOptionUtil); +function __rest(s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; +} -var _customAlignInputWidget = __webpack_require__(602); +function __decorate(decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +} -var _customAlignInputWidget2 = _interopRequireDefault(_customAlignInputWidget); +function __param(paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +} -var _columnSelectorDialog = __webpack_require__(120); +function __metadata(metadataKey, metadataValue) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); +} -var _columnSelectorDialog2 = _interopRequireDefault(_columnSelectorDialog); +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function __createBinding(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +} -/** - * options = { - * width: % or px default 100%, - * height:% or px default 30px, - * value: '' - * onChanged: function(){] - * } - * @param parentId - * @param options - * @constructor - */ -/** - * Created by mk90.kim on 2017-05-10. - */ +function __exportStar(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p]; +} -function CustomAlignRadioButtonWidget(parentId, options) { - _baseWidget2.default.call(this, parentId, options); +function __values(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); } -CustomAlignRadioButtonWidget.prototype = Object.create(_baseWidget2.default.prototype); -CustomAlignRadioButtonWidget.prototype.constructor = CustomAlignRadioButtonWidget; +function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; +} -CustomAlignRadioButtonWidget.prototype._init = function () { - _baseWidget2.default.prototype._init.call(this); -}; +function __spread() { + for (var ar = [], i = 0; i < arguments.length; i++) + ar = ar.concat(__read(arguments[i])); + return ar; +} -CustomAlignRadioButtonWidget.prototype._createAlignWidget = function ($el, options) { - throw new Error('not implemented'); +function __spreadArrays() { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; }; -CustomAlignRadioButtonWidget.prototype._createContents = function ($parent) { - this._isRendered = false; - this.$widgetWrapper = $('\n
\n
\n
\n
\n '); +function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +} - $parent.append(this.$widgetWrapper); +function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; + function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } +} - this.widgets = []; - this._createWidgetGrpUnits(); - this.render(this.options.value); - this._setPreValue(this.options.value); - this._isRendered = true; -}; +function __asyncDelegator(o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } +} -CustomAlignRadioButtonWidget.prototype.toggleDisable = function (disabledVal) { - this.align.toggleDisable(disabledVal); - this.input.toggleDisable(disabledVal); +function __asyncValues(o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } +} + +function __makeTemplateObject(cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; }; -CustomAlignRadioButtonWidget.prototype._createWidgetGrpUnits = function () { - var _this = this; +function __importStar(mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result.default = mod; + return result; +} - var $alignComponent = this.$widgetWrapper.find('.bos-widget-button-group-container__row[id="1"]'); - var $inputComponent = this.$widgetWrapper.find('.bos-widget-button-group-container__row[id="2"]'); +function __importDefault(mod) { + return (mod && mod.__esModule) ? mod : { default: mod }; +} - this.$alignComponent = $alignComponent; - this.$inputComponent = $inputComponent; +function __classPrivateFieldGet(receiver, privateMap) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to get private field on non-instance"); + } + return privateMap.get(receiver); +} - this.align = this._createAlignWidget($alignComponent, { - // value: !this.options.value.custom && this.options.value.align, - value: this.options.value.align, - onChanged: function onChanged(selectedValue) { - _this.options.value.align = selectedValue; - _this.render(_this.options.value); - _this._triggerChangeEvent(_this.options.value); +function __classPrivateFieldSet(receiver, privateMap, value) { + if (!privateMap.has(receiver)) { + throw new TypeError("attempted to set private field on non-instance"); + } + privateMap.set(receiver, value); + return value; +} + + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Subscriber; }); +/* unused harmony export SafeSubscriber */ +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_isFunction__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Observer__ = __webpack_require__(199); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Subscription__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__internal_symbol_rxSubscriber__ = __webpack_require__(48); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__config__ = __webpack_require__(33); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__util_hostReportError__ = __webpack_require__(46); +/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */ + + + + + + + +var Subscriber = /*@__PURE__*/ (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](Subscriber, _super); + function Subscriber(destinationOrNext, error, complete) { + var _this = _super.call(this) || this; + _this.syncErrorValue = null; + _this.syncErrorThrown = false; + _this.syncErrorThrowable = false; + _this.isStopped = false; + switch (arguments.length) { + case 0: + _this.destination = __WEBPACK_IMPORTED_MODULE_2__Observer__["a" /* empty */]; + break; + case 1: + if (!destinationOrNext) { + _this.destination = __WEBPACK_IMPORTED_MODULE_2__Observer__["a" /* empty */]; + break; + } + if (typeof destinationOrNext === 'object') { + if (destinationOrNext instanceof Subscriber) { + _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable; + _this.destination = destinationOrNext; + destinationOrNext.add(_this); + } + else { + _this.syncErrorThrowable = true; + _this.destination = new SafeSubscriber(_this, destinationOrNext); + } + break; + } + default: + _this.syncErrorThrowable = true; + _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete); + break; } - }); + return _this; + } + Subscriber.prototype[__WEBPACK_IMPORTED_MODULE_4__internal_symbol_rxSubscriber__["a" /* rxSubscriber */]] = function () { return this; }; + Subscriber.create = function (next, error, complete) { + var subscriber = new Subscriber(next, error, complete); + subscriber.syncErrorThrowable = false; + return subscriber; + }; + Subscriber.prototype.next = function (value) { + if (!this.isStopped) { + this._next(value); + } + }; + Subscriber.prototype.error = function (err) { + if (!this.isStopped) { + this.isStopped = true; + this._error(err); + } + }; + Subscriber.prototype.complete = function () { + if (!this.isStopped) { + this.isStopped = true; + this._complete(); + } + }; + Subscriber.prototype.unsubscribe = function () { + if (this.closed) { + return; + } + this.isStopped = true; + _super.prototype.unsubscribe.call(this); + }; + Subscriber.prototype._next = function (value) { + this.destination.next(value); + }; + Subscriber.prototype._error = function (err) { + this.destination.error(err); + this.unsubscribe(); + }; + Subscriber.prototype._complete = function () { + this.destination.complete(); + this.unsubscribe(); + }; + Subscriber.prototype._unsubscribeAndRecycle = function () { + var _parentOrParents = this._parentOrParents; + this._parentOrParents = null; + this.unsubscribe(); + this.closed = false; + this.isStopped = false; + this._parentOrParents = _parentOrParents; + return this; + }; + return Subscriber; +}(__WEBPACK_IMPORTED_MODULE_3__Subscription__["a" /* Subscription */])); + +var SafeSubscriber = /*@__PURE__*/ (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](SafeSubscriber, _super); + function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) { + var _this = _super.call(this) || this; + _this._parentSubscriber = _parentSubscriber; + var next; + var context = _this; + if (Object(__WEBPACK_IMPORTED_MODULE_1__util_isFunction__["a" /* isFunction */])(observerOrNext)) { + next = observerOrNext; + } + else if (observerOrNext) { + next = observerOrNext.next; + error = observerOrNext.error; + complete = observerOrNext.complete; + if (observerOrNext !== __WEBPACK_IMPORTED_MODULE_2__Observer__["a" /* empty */]) { + context = Object.create(observerOrNext); + if (Object(__WEBPACK_IMPORTED_MODULE_1__util_isFunction__["a" /* isFunction */])(context.unsubscribe)) { + _this.add(context.unsubscribe.bind(context)); + } + context.unsubscribe = _this.unsubscribe.bind(_this); + } + } + _this._context = context; + _this._next = next; + _this._error = error; + _this._complete = complete; + return _this; + } + SafeSubscriber.prototype.next = function (value) { + if (!this.isStopped && this._next) { + var _parentSubscriber = this._parentSubscriber; + if (!__WEBPACK_IMPORTED_MODULE_5__config__["a" /* config */].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { + this.__tryOrUnsub(this._next, value); + } + else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) { + this.unsubscribe(); + } + } + }; + SafeSubscriber.prototype.error = function (err) { + if (!this.isStopped) { + var _parentSubscriber = this._parentSubscriber; + var useDeprecatedSynchronousErrorHandling = __WEBPACK_IMPORTED_MODULE_5__config__["a" /* config */].useDeprecatedSynchronousErrorHandling; + if (this._error) { + if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { + this.__tryOrUnsub(this._error, err); + this.unsubscribe(); + } + else { + this.__tryOrSetError(_parentSubscriber, this._error, err); + this.unsubscribe(); + } + } + else if (!_parentSubscriber.syncErrorThrowable) { + this.unsubscribe(); + if (useDeprecatedSynchronousErrorHandling) { + throw err; + } + Object(__WEBPACK_IMPORTED_MODULE_6__util_hostReportError__["a" /* hostReportError */])(err); + } + else { + if (useDeprecatedSynchronousErrorHandling) { + _parentSubscriber.syncErrorValue = err; + _parentSubscriber.syncErrorThrown = true; + } + else { + Object(__WEBPACK_IMPORTED_MODULE_6__util_hostReportError__["a" /* hostReportError */])(err); + } + this.unsubscribe(); + } + } + }; + SafeSubscriber.prototype.complete = function () { + var _this = this; + if (!this.isStopped) { + var _parentSubscriber = this._parentSubscriber; + if (this._complete) { + var wrappedComplete = function () { return _this._complete.call(_this._context); }; + if (!__WEBPACK_IMPORTED_MODULE_5__config__["a" /* config */].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) { + this.__tryOrUnsub(wrappedComplete); + this.unsubscribe(); + } + else { + this.__tryOrSetError(_parentSubscriber, wrappedComplete); + this.unsubscribe(); + } + } + else { + this.unsubscribe(); + } + } + }; + SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) { + try { + fn.call(this._context, value); + } + catch (err) { + this.unsubscribe(); + if (__WEBPACK_IMPORTED_MODULE_5__config__["a" /* config */].useDeprecatedSynchronousErrorHandling) { + throw err; + } + else { + Object(__WEBPACK_IMPORTED_MODULE_6__util_hostReportError__["a" /* hostReportError */])(err); + } + } + }; + SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) { + if (!__WEBPACK_IMPORTED_MODULE_5__config__["a" /* config */].useDeprecatedSynchronousErrorHandling) { + throw new Error('bad call'); + } + try { + fn.call(this._context, value); + } + catch (err) { + if (__WEBPACK_IMPORTED_MODULE_5__config__["a" /* config */].useDeprecatedSynchronousErrorHandling) { + parent.syncErrorValue = err; + parent.syncErrorThrown = true; + return true; + } + else { + Object(__WEBPACK_IMPORTED_MODULE_6__util_hostReportError__["a" /* hostReportError */])(err); + return true; + } + } + return false; + }; + SafeSubscriber.prototype._unsubscribe = function () { + var _parentSubscriber = this._parentSubscriber; + this._context = null; + this._parentSubscriber = null; + _parentSubscriber.unsubscribe(); + }; + return SafeSubscriber; +}(Subscriber)); - this.input = new _customAlignInputWidget2.default($inputComponent, { - value: { - custom: !!this.options.value.custom, - value: this.options.value.value - }, - label: this._getLabel(), - onChanged: function onChanged(value) { - _this.options.value.value = value.value; - _this._triggerChangeEvent(_this.options.value); +//# sourceMappingURL=Subscriber.js.map + + +/***/ }), +/* 3 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Observable; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_canReportError__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_toSubscriber__ = __webpack_require__(255); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__symbol_observable__ = __webpack_require__(19); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_pipe__ = __webpack_require__(49); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__config__ = __webpack_require__(33); +/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */ + + + + + +var Observable = /*@__PURE__*/ (function () { + function Observable(subscribe) { + this._isScalar = false; + if (subscribe) { + this._subscribe = subscribe; } - }); -}; + } + Observable.prototype.lift = function (operator) { + var observable = new Observable(); + observable.source = this; + observable.operator = operator; + return observable; + }; + Observable.prototype.subscribe = function (observerOrNext, error, complete) { + var operator = this.operator; + var sink = Object(__WEBPACK_IMPORTED_MODULE_1__util_toSubscriber__["a" /* toSubscriber */])(observerOrNext, error, complete); + if (operator) { + sink.add(operator.call(sink, this.source)); + } + else { + sink.add(this.source || (__WEBPACK_IMPORTED_MODULE_4__config__["a" /* config */].useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ? + this._subscribe(sink) : + this._trySubscribe(sink)); + } + if (__WEBPACK_IMPORTED_MODULE_4__config__["a" /* config */].useDeprecatedSynchronousErrorHandling) { + if (sink.syncErrorThrowable) { + sink.syncErrorThrowable = false; + if (sink.syncErrorThrown) { + throw sink.syncErrorValue; + } + } + } + return sink; + }; + Observable.prototype._trySubscribe = function (sink) { + try { + return this._subscribe(sink); + } + catch (err) { + if (__WEBPACK_IMPORTED_MODULE_4__config__["a" /* config */].useDeprecatedSynchronousErrorHandling) { + sink.syncErrorThrown = true; + sink.syncErrorValue = err; + } + if (Object(__WEBPACK_IMPORTED_MODULE_0__util_canReportError__["a" /* canReportError */])(sink)) { + sink.error(err); + } + else { + console.warn(err); + } + } + }; + Observable.prototype.forEach = function (next, promiseCtor) { + var _this = this; + promiseCtor = getPromiseCtor(promiseCtor); + return new promiseCtor(function (resolve, reject) { + var subscription; + subscription = _this.subscribe(function (value) { + try { + next(value); + } + catch (err) { + reject(err); + if (subscription) { + subscription.unsubscribe(); + } + } + }, reject, resolve); + }); + }; + Observable.prototype._subscribe = function (subscriber) { + var source = this.source; + return source && source.subscribe(subscriber); + }; + Observable.prototype[__WEBPACK_IMPORTED_MODULE_2__symbol_observable__["a" /* observable */]] = function () { + return this; + }; + Observable.prototype.pipe = function () { + var operations = []; + for (var _i = 0; _i < arguments.length; _i++) { + operations[_i] = arguments[_i]; + } + if (operations.length === 0) { + return this; + } + return Object(__WEBPACK_IMPORTED_MODULE_3__util_pipe__["b" /* pipeFromArray */])(operations)(this); + }; + Observable.prototype.toPromise = function (promiseCtor) { + var _this = this; + promiseCtor = getPromiseCtor(promiseCtor); + return new promiseCtor(function (resolve, reject) { + var value; + _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); }); + }); + }; + Observable.create = function (subscribe) { + return new Observable(subscribe); + }; + return Observable; +}()); -CustomAlignRadioButtonWidget.prototype._triggerChangeEvent = function (value) { - if (typeof this.options.onChanged === 'function') { - this.options.onChanged(value); - } else { - console.warn('CustomAlignRadioButtonWidget: onChanged is not specified'); +function getPromiseCtor(promiseCtor) { + if (!promiseCtor) { + promiseCtor = __WEBPACK_IMPORTED_MODULE_4__config__["a" /* config */].Promise || Promise; } -}; + if (!promiseCtor) { + throw new Error('no Promise impl found'); + } + return promiseCtor; +} +//# sourceMappingURL=Observable.js.map -CustomAlignRadioButtonWidget.prototype.render = function (value) { - this.align.render(value.align); - this.input.render({ value: value.value }); - this.input.toggleDisable(value.align === 'center'); -}; -exports.default = CustomAlignRadioButtonWidget; +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return OuterSubscriber; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(1); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Subscriber__ = __webpack_require__(2); +/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */ + + +var OuterSubscriber = /*@__PURE__*/ (function (_super) { + __WEBPACK_IMPORTED_MODULE_0_tslib__["a" /* __extends */](OuterSubscriber, _super); + function OuterSubscriber() { + return _super !== null && _super.apply(this, arguments) || this; + } + OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { + this.destination.next(innerValue); + }; + OuterSubscriber.prototype.notifyError = function (error, innerSub) { + this.destination.error(error); + }; + OuterSubscriber.prototype.notifyComplete = function (innerSub) { + this.destination.complete(); + }; + return OuterSubscriber; +}(__WEBPACK_IMPORTED_MODULE_1__Subscriber__["a" /* Subscriber */])); + +//# sourceMappingURL=OuterSubscriber.js.map + /***/ }), -/* 287 */ +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = subscribeToResult; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__InnerSubscriber__ = __webpack_require__(17); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__subscribeTo__ = __webpack_require__(56); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Observable__ = __webpack_require__(3); +/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */ + + + +function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber) { + if (innerSubscriber === void 0) { + innerSubscriber = new __WEBPACK_IMPORTED_MODULE_0__InnerSubscriber__["a" /* InnerSubscriber */](outerSubscriber, outerValue, outerIndex); + } + if (innerSubscriber.closed) { + return undefined; + } + if (result instanceof __WEBPACK_IMPORTED_MODULE_2__Observable__["a" /* Observable */]) { + return result.subscribe(innerSubscriber); + } + return Object(__WEBPACK_IMPORTED_MODULE_1__subscribeTo__["a" /* subscribeTo */])(result)(innerSubscriber); +} +//# sourceMappingURL=subscribeToResult.js.map + + +/***/ }), +/* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5838,1865 +8506,64135 @@ Object.defineProperty(exports, "__esModule", { value: true }); -var _baseControl = __webpack_require__(9); +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); -var _baseControl2 = _interopRequireDefault(_baseControl); +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); -var _widgetFactory = __webpack_require__(3); +__webpack_require__(232); -var WidgetFactory = _interopRequireWildcard(_widgetFactory); +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +var disableClass = 'brtc-state-disabled'; +var errorFunction = function errorFunction(key) { + return console.error(key + ' is undefined function'); +}; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var Base = function () { + function Base($el, options) { + _classCallCheck(this, Base); -/** - * Created by mk90.kim on 2017-05-10. - */ + this.create($el, options); + } -function AxisTitleControl(parentId, options, headerKey) { - _baseControl2.default.call(this, parentId, options, headerKey); -} + _createClass(Base, [{ + key: 'create', + value: function create($el, opt) { + this.$elem = $el; + } -AxisTitleControl.prototype = Object.create(_baseControl2.default.prototype); -AxisTitleControl.prototype.constructor = AxisTitleControl; + // Option get -AxisTitleControl.prototype._init = function () { - _baseControl2.default.prototype._init.call(this); - this.xAxisOption = this.options.chartOption.xAxis; - this.yAxisOption = this.options.chartOption.yAxis; -}; + }, { + key: 'getOption', + value: function getOption(optNm) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } -AxisTitleControl.prototype._createContents = function ($parent) { - _baseControl2.default.prototype._createContents.call(this, $parent); + return { + 'disabled': this._getDisabled, + 'value': this._getValue + }[optNm].apply(this, args); + } - var _this = this; - var headerOption = { - label: 'Title', - showBtn: { - //POLICY: xAxis값을 기준으로 함 - defaultVal: this.xAxisOption[0].title.show | this.yAxisOption[0].title.show, - clickfunc: function clickfunc(event) { - var checkedVal = event.args.checked; - _this.toggleDisableComponent(checkedVal); - _this.xAxisOption[0].title.show = checkedVal; - _this.yAxisOption[0].title.show = checkedVal; - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - } + // Option setting + + }, { + key: 'setOption', + value: function setOption(opts) { + var _this = this; + + this.lazyExecuteList = this.lazyExecuteList ? this.lazyExecuteList : []; + this.lazyExecuteQueue = []; + this.applyOpt = this._getForcePropertyList(); + + Object.entries(opts).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + return [key, _this._getPropertyList(key), value, _this.lazyExecuteList.some(function (lazy) { + return lazy === key; + })]; + }).filter(function (_ref3) { + var _ref4 = _slicedToArray(_ref3, 2), + key = _ref4[0], + func = _ref4[1]; + + return !func ? errorFunction(key) && false : !!func; + }).filter(function (_ref5) { + var _ref6 = _slicedToArray(_ref5, 4), + func = _ref6[1], + value = _ref6[2], + lazy = _ref6[3]; + + return lazy ? _this.lazyExecuteQueue.push(function () { + return func.call(_this, value); + }) && false : !lazy; + }).forEach(function (_ref7) { + var _ref8 = _slicedToArray(_ref7, 3), + key = _ref8[0], + func = _ref8[1], + value = _ref8[2]; + + func.call(_this, value); + }); + this._applyOption(this.applyOpt); + this.lazyExecuteQueue.forEach(function (func) { + return func.call(); + }); } - }; - this.createComponentHeader(headerOption); - this.createComponentContents(); - this.setComponentShow(); -}; -AxisTitleControl.prototype.createComponentContents = function (contentsOption) { - _baseControl2.default.prototype.createComponentContents.call(this, contentsOption); + // Method call - this._createValueComponent(); - this._createStyleComponent(); -}; + }, { + key: 'execute', + value: function execute(name) { + for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + args[_key2 - 1] = arguments[_key2]; + } -AxisTitleControl.prototype._createValueComponent = function () { + return this._getMethodList(name).apply(this, args); + } - var $valueComponent = $('
'); - this.$controlContents.append($valueComponent); + // EventCallback binding - var multiLabelWidget = WidgetFactory.createMultiLabelWidget($valueComponent, { - label: 'Axis', - numOfComponent: 1, - value: ['Value'] - }); + }, { + key: 'subscribe', + value: function subscribe(name) { + var func = this._getEventList(name) || errorFunction(name); - var _this = this; - this.xAxisValueInput = WidgetFactory.createCheckedMultiInputWidget($valueComponent, { - label: 'X Axis', - labelPosition: 'row', - labelWidth: '40px', - inputStyle: 'box', - numOfComponent: 1, - value: [this.xAxisOption[0].title.text], - inputType: [''], - onChanged: [function (inputVal) { - _this.xAxisOption[0].title.text = inputVal; - _this.options.onChanged('onChartOptionChanged', { xAxis: _this.xAxisOption }); - }], - showBtn: { - defaultVal: this.xAxisOption[0].title.show, - clickfunc: function clickfunc(event) { - _this.xAxisOption[0].title.show = event.args.checked; - _this.xAxisValueInput.toggleDisable(!event.args.checked, true); - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { xAxis: _this.xAxisOption }); + for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + args[_key3 - 1] = arguments[_key3]; + } + + func.apply(this, args); + } + }, { + key: '_setPreValue', + value: function _setPreValue(preVal) { + this._preValue = JSON.stringify(preVal); + } + }, { + key: '_isChanged', + value: function _isChanged(currentVal) { + if (this._preValue !== JSON.stringify(currentVal)) { + this._setPreValue(currentVal); + return true; + } else { + return false; + } + } + }, { + key: '_setOnChange', + value: function _setOnChange(func) { + if (typeof func === 'function') { + this.$elem.on('change', function (evt) { + // eslint-disable-next-line no-invalid-this + func.bind(this)(evt); + }); + } + } + }, { + key: '_setDisabled', + value: function _setDisabled(val) { + if (val === true) { + this.$elem.addClass(disableClass); + } else { + this.$elem.removeClass(disableClass); } } - }); - this._widgetList.push(this.xAxisValueInput); + // Base.prototype._getDisabled = function () { + // return getDisable(this.$elem) + // }; - this.yAxisValueInput = WidgetFactory.createCheckedMultiInputWidget($valueComponent, { - label: 'Y Axis', - labelPosition: 'row', - labelWidth: '40px', - inputStyle: 'box', - numOfComponent: 1, - value: [this.yAxisOption[0].title.text], - inputType: [''], - placeHolder: [''], - onChanged: [function (inputVal) { - _this.yAxisOption[0].title.text = inputVal; - _this.options.onChanged('onChartOptionChanged', { yAxis: _this.yAxisOption }); - }], - showBtn: { - defaultVal: this.yAxisOption[0].title.show, - clickfunc: function clickfunc(event) { - _this.yAxisOption[0].title.show = event.args.checked; - _this.yAxisValueInput.toggleDisable(!event.args.checked, true); - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { yAxis: _this.yAxisOption }); - } + }, { + key: '_setValue', + value: function _setValue(val) {} + }, { + key: '_getValue', + value: function _getValue() {} + }, { + key: '_addEvent', + value: function _addEvent(evtNm, callback) { + this.$elem.on(evtNm, callback); } - }); + }, { + key: '_getPropertyList', + value: function _getPropertyList(attrNm) { + var setters = {}; + return setters[attrNm]; + } + }, { + key: '_getEventList', + value: function _getEventList(name) { + return {}[name]; + } + }, { + key: '_getMethodList', + value: function _getMethodList(name) { + return {}[name]; + } + }, { + key: '_getForcePropertyList', + value: function _getForcePropertyList() { + return {}; + } + }, { + key: '_applyOption', + value: function _applyOption() {} + }]); - this._widgetList.push(this.yAxisValueInput); -}; + return Base; +}(); -AxisTitleControl.prototype._createStyleComponent = function () { - var _this = this; +exports.default = Base; - //POLICY: xAxis값을 기준으로 함 - this.fontStyle = WidgetFactory.createFontStyleWidget(this.$controlContents, { - value: [this.xAxisOption[0].title.textStyle.fontFamily, this.xAxisOption[0].title.textStyle.fontSize, this.xAxisOption[0].title.textStyle.color, [this.xAxisOption[0].title.textStyle.fontWeight, this.xAxisOption[0].title.textStyle.fontStyle, this.xAxisOption[0].title.textStyle.textDecoration]], - onChanged: [function (inputVal) { - _this.xAxisOption[0].title.textStyle.fontFamily = inputVal; - _this.yAxisOption[0].title.textStyle.fontFamily = inputVal; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }, function (inputVal) { - _this.xAxisOption[0].title.textStyle.fontSize = inputVal; - _this.yAxisOption[0].title.textStyle.fontSize = inputVal; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }, function (inputVal) { - _this.xAxisOption[0].title.textStyle.color = inputVal; - _this.yAxisOption[0].title.textStyle.color = inputVal; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }, function (selectedVals) { - _this.xAxisOption[0].title.textStyle.fontWeight = $.inArray('bold', selectedVals) > -1 ? 'bold' : 'normal'; - _this.xAxisOption[0].title.textStyle.fontStyle = $.inArray('italic', selectedVals) > -1 ? 'italic' : 'normal'; - _this.xAxisOption[0].title.textStyle.textDecoration = $.inArray('underline', selectedVals) > -1 ? 'underline' : 'none'; - _this.yAxisOption[0].title.textStyle.fontWeight = $.inArray('bold', selectedVals) > -1 ? 'bold' : 'normal'; - _this.yAxisOption[0].title.textStyle.fontStyle = $.inArray('italic', selectedVals) > -1 ? 'italic' : 'normal'; - _this.yAxisOption[0].title.textStyle.textDecoration = $.inArray('underline', selectedVals) > -1 ? 'underline' : 'none'; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }] - }); +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { - this._widgetList.push(this.fontStyle); -}; +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Subscription; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__util_isArray__ = __webpack_require__(11); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__util_isObject__ = __webpack_require__(47); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__util_isFunction__ = __webpack_require__(22); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__util_UnsubscriptionError__ = __webpack_require__(200); +/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */ + + + + +var Subscription = /*@__PURE__*/ (function () { + function Subscription(unsubscribe) { + this.closed = false; + this._parentOrParents = null; + this._subscriptions = null; + if (unsubscribe) { + this._unsubscribe = unsubscribe; + } + } + Subscription.prototype.unsubscribe = function () { + var errors; + if (this.closed) { + return; + } + var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions; + this.closed = true; + this._parentOrParents = null; + this._subscriptions = null; + if (_parentOrParents instanceof Subscription) { + _parentOrParents.remove(this); + } + else if (_parentOrParents !== null) { + for (var index = 0; index < _parentOrParents.length; ++index) { + var parent_1 = _parentOrParents[index]; + parent_1.remove(this); + } + } + if (Object(__WEBPACK_IMPORTED_MODULE_2__util_isFunction__["a" /* isFunction */])(_unsubscribe)) { + try { + _unsubscribe.call(this); + } + catch (e) { + errors = e instanceof __WEBPACK_IMPORTED_MODULE_3__util_UnsubscriptionError__["a" /* UnsubscriptionError */] ? flattenUnsubscriptionErrors(e.errors) : [e]; + } + } + if (Object(__WEBPACK_IMPORTED_MODULE_0__util_isArray__["a" /* isArray */])(_subscriptions)) { + var index = -1; + var len = _subscriptions.length; + while (++index < len) { + var sub = _subscriptions[index]; + if (Object(__WEBPACK_IMPORTED_MODULE_1__util_isObject__["a" /* isObject */])(sub)) { + try { + sub.unsubscribe(); + } + catch (e) { + errors = errors || []; + if (e instanceof __WEBPACK_IMPORTED_MODULE_3__util_UnsubscriptionError__["a" /* UnsubscriptionError */]) { + errors = errors.concat(flattenUnsubscriptionErrors(e.errors)); + } + else { + errors.push(e); + } + } + } + } + } + if (errors) { + throw new __WEBPACK_IMPORTED_MODULE_3__util_UnsubscriptionError__["a" /* UnsubscriptionError */](errors); + } + }; + Subscription.prototype.add = function (teardown) { + var subscription = teardown; + if (!teardown) { + return Subscription.EMPTY; + } + switch (typeof teardown) { + case 'function': + subscription = new Subscription(teardown); + case 'object': + if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') { + return subscription; + } + else if (this.closed) { + subscription.unsubscribe(); + return subscription; + } + else if (!(subscription instanceof Subscription)) { + var tmp = subscription; + subscription = new Subscription(); + subscription._subscriptions = [tmp]; + } + break; + default: { + throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.'); + } + } + var _parentOrParents = subscription._parentOrParents; + if (_parentOrParents === null) { + subscription._parentOrParents = this; + } + else if (_parentOrParents instanceof Subscription) { + if (_parentOrParents === this) { + return subscription; + } + subscription._parentOrParents = [_parentOrParents, this]; + } + else if (_parentOrParents.indexOf(this) === -1) { + _parentOrParents.push(this); + } + else { + return subscription; + } + var subscriptions = this._subscriptions; + if (subscriptions === null) { + this._subscriptions = [subscription]; + } + else { + subscriptions.push(subscription); + } + return subscription; + }; + Subscription.prototype.remove = function (subscription) { + var subscriptions = this._subscriptions; + if (subscriptions) { + var subscriptionIndex = subscriptions.indexOf(subscription); + if (subscriptionIndex !== -1) { + subscriptions.splice(subscriptionIndex, 1); + } + } + }; + Subscription.EMPTY = (function (empty) { + empty.closed = true; + return empty; + }(new Subscription())); + return Subscription; +}()); + +function flattenUnsubscriptionErrors(errors) { + return errors.reduce(function (errs, err) { return errs.concat((err instanceof __WEBPACK_IMPORTED_MODULE_3__util_UnsubscriptionError__["a" /* UnsubscriptionError */]) ? err.errors : err); }, []); +} +//# sourceMappingURL=Subscription.js.map -exports.default = AxisTitleControl; /***/ }), -/* 288 */ +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_juijs__ = __webpack_require__(250); + +/* harmony default export */ __webpack_exports__["default"] = (__WEBPACK_IMPORTED_MODULE_0_juijs__["a" /* default */]); + +/***/ }), +/* 9 */ /***/ (function(module, exports, __webpack_require__) { +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. "use strict"; +var arr = []; -Object.defineProperty(exports, "__esModule", { - value: true -}); +var getProto = Object.getPrototypeOf; -var _baseControl = __webpack_require__(9); +var slice = arr.slice; -var _baseControl2 = _interopRequireDefault(_baseControl); +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; -var _widgetFactory = __webpack_require__(3); -var WidgetFactory = _interopRequireWildcard(_widgetFactory); +var push = arr.push; -var _formatHelperDialog = __webpack_require__(75); +var indexOf = arr.indexOf; -var _formatHelperDialog2 = _interopRequireDefault(_formatHelperDialog); +var class2type = {}; -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +var toString = class2type.toString; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var hasOwn = class2type.hasOwnProperty; -function AxisLabelControl(parentId, options, headerKey) { - _baseControl2.default.call(this, parentId, options, headerKey); -} /** - * Created by mk90.kim on 2017-05-10. - */ +var fnToString = hasOwn.toString; -AxisLabelControl.prototype = Object.create(_baseControl2.default.prototype); -AxisLabelControl.prototype.constructor = AxisLabelControl; +var ObjectFunctionString = fnToString.call( Object ); -AxisLabelControl.prototype._init = function () { - _baseControl2.default.prototype._init.call(this); - this.xAxisOption = this.options.chartOption.xAxis; - this.yAxisOption = this.options.chartOption.yAxis; -}; +var support = {}; -AxisLabelControl.prototype._createContents = function ($parent) { - _baseControl2.default.prototype._createContents.call(this, $parent); +var isFunction = function isFunction( obj ) { - var _this = this; - var headerOption = { - label: 'Label', - showBtn: { - defaultVal: this.xAxisOption[0].axisLabel.show | this.yAxisOption[0].axisLabel.show, - clickfunc: function clickfunc(event) { - var checkedVal = event.args.checked; - _this.toggleDisableComponent(checkedVal); - _this.xAxisOption[0].axisLabel.show = checkedVal; - _this.yAxisOption[0].axisLabel.show = checkedVal; - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - } - } - }; - this.createComponentHeader(headerOption); - this.createComponentContents(); - this.setComponentShow(); -}; + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; -AxisLabelControl.prototype.createComponentContents = function (contentsOption) { - _baseControl2.default.prototype.createComponentContents.call(this, contentsOption); - this._createValueComponent(); - this._createFontStyleComponent(); -}; +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; -AxisLabelControl.prototype._createValueComponent = function () { - var $valueComponent = $('
'); - this.$controlContents.append($valueComponent); - var _this = this; +var document = window.document; - var multiLabelWidget = WidgetFactory.createMultiLabelWidget($valueComponent, { - label: 'Axis', - numOfComponent: 2, - value: ['Formatter', 'Angle'], - helper: [_formatHelperDialog2.default, false] - }); - this._widgetList.push(multiLabelWidget); - this.xAxisFormatInput = WidgetFactory.createCheckedMultiInputWidget($valueComponent, { - label: 'X Axis', - labelPosition: 'row', - labelWidth: '40px', - inputStyle: 'box', - numOfComponent: 2, - placeHolder: ['{value}', ''], - value: [this.xAxisOption[0].axisLabel.formatter, this.xAxisOption[0].axisLabel.rotate], - inputType: ['', 'number'], - onChanged: [function (inputVal) { - _this.xAxisOption[0].axisLabel.formatter = inputVal ? inputVal : null; - _this.options.onChanged('onChartOptionChanged', { xAxis: _this.xAxisOption }); - }, function (inputVal) { - _this.xAxisOption[0].axisLabel.rotate = inputVal; - _this.options.onChanged('onChartOptionChanged', { xAxis: _this.xAxisOption }); - }], - showBtn: { - defaultVal: this.xAxisOption[0].axisLabel.show, - clickfunc: function clickfunc(event) { - _this.xAxisOption[0].axisLabel.show = event.args.checked; - _this.xAxisFormatInput.toggleDisable(!event.args.checked, true); - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { xAxis: _this.xAxisOption }); - } - } - }); + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; - this._widgetList.push(this.xAxisFormatInput); + function DOMEval( code, node, doc ) { + doc = doc || document; - this.yAxisFormatInput = WidgetFactory.createCheckedMultiInputWidget($valueComponent, { - label: 'Y Axis', - labelPosition: 'row', - labelWidth: '40px', - inputStyle: 'box', - numOfComponent: 2, - placeHolder: ['{value}', ''], - value: [this.yAxisOption[0].axisLabel.formatter, this.yAxisOption[0].axisLabel.rotate], - inputType: ['', 'number'], - onChanged: [function (inputVal) { - _this.yAxisOption[0].axisLabel.formatter = inputVal ? inputVal : null; - _this.options.onChanged('onChartOptionChanged', { yAxis: _this.yAxisOption }); - }, function (inputVal) { - _this.yAxisOption[0].axisLabel.rotate = inputVal; - _this.options.onChanged('onChartOptionChanged', { yAxis: _this.yAxisOption }); - }], - showBtn: { - defaultVal: this.yAxisOption[0].axisLabel.show, - clickfunc: function clickfunc(event) { - _this.yAxisOption[0].axisLabel.show = event.args.checked; - _this.yAxisFormatInput.toggleDisable(!event.args.checked, true); - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { yAxis: _this.yAxisOption }); - } - } - }); + var i, val, + script = doc.createElement( "script" ); - this._widgetList.push(this.yAxisFormatInput); -}; + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { -AxisLabelControl.prototype._createFontStyleComponent = function () { - var _this = this; - this.fontStyle = WidgetFactory.createFontStyleWidget(this.$controlContents, { - fontStyleBtnList: ['bold', 'italic'], - value: [this.xAxisOption[0].axisLabel.textStyle.fontFamily, this.xAxisOption[0].axisLabel.textStyle.fontSize, this.xAxisOption[0].axisLabel.textStyle.color, [this.xAxisOption[0].axisLabel.textStyle.fontWeight, this.xAxisOption[0].axisLabel.textStyle.fontStyle]], - onChanged: [function (inputVal) { - _this.xAxisOption[0].axisLabel.textStyle.fontFamily = inputVal; - _this.yAxisOption[0].axisLabel.textStyle.fontFamily = inputVal; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }, function (inputVal) { - _this.xAxisOption[0].axisLabel.textStyle.fontSize = inputVal; - _this.yAxisOption[0].axisLabel.textStyle.fontSize = inputVal; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }, function (inputVal) { - _this.xAxisOption[0].axisLabel.textStyle.color = inputVal; - _this.yAxisOption[0].axisLabel.textStyle.color = inputVal; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }, function (selectedVals) { - _this.xAxisOption[0].axisLabel.textStyle.fontWeight = $.inArray('bold', selectedVals) > -1 ? 'bold' : 'normal'; - _this.xAxisOption[0].axisLabel.textStyle.fontStyle = $.inArray('italic', selectedVals) > -1 ? 'italic' : 'normal'; - _this.yAxisOption[0].axisLabel.textStyle.fontWeight = $.inArray('bold', selectedVals) > -1 ? 'bold' : 'normal'; - _this.yAxisOption[0].axisLabel.textStyle.fontStyle = $.inArray('italic', selectedVals) > -1 ? 'italic' : 'normal'; - _this.options.onChanged('onChartOptionChanged', { - xAxis: _this.xAxisOption, - yAxis: _this.yAxisOption - }); - }] - }); + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } - this._widgetList.push(this.fontStyle); -}; -exports.default = AxisLabelControl; +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } -/***/ }), -/* 289 */ -/***/ (function(module, exports, __webpack_require__) { + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module -"use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); +var + version = "3.5.1", -var _baseControl = __webpack_require__(9); + // Define a local copy of jQuery + jQuery = function( selector, context ) { -var _baseControl2 = _interopRequireDefault(_baseControl); + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; -var _widgetFactory = __webpack_require__(3); +jQuery.fn = jQuery.prototype = { -var WidgetFactory = _interopRequireWildcard(_widgetFactory); + // The current version of jQuery being used + jquery: version, -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + constructor: jQuery, -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // The default length of a jQuery object is 0 + length: 0, -/** - * Created by mk90.kim on 2017-05-10. - */ + toArray: function() { + return slice.call( this ); + }, -function MarkerControl(parentId, options, headerKey) { - _baseControl2.default.call(this, parentId, options, headerKey); -} + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { -MarkerControl.prototype = Object.create(_baseControl2.default.prototype); -MarkerControl.prototype.constructor = MarkerControl; + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } -MarkerControl.prototype._init = function () { - _baseControl2.default.prototype._init.call(this); - this.markerOption = this.options.setting.marker; - this.showSymbol = this.options.setting.showSymbol; -}; + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, -MarkerControl.prototype._createContents = function ($parent) { - _baseControl2.default.prototype._createContents.call(this, $parent); - this.createComponentContents(); -}; + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { -MarkerControl.prototype.createComponentContents = function (contentsOption) { - _baseControl2.default.prototype.createComponentContents.call(this, contentsOption); - this._createSizeOpacityComponent(); - this._createColorPaletteComponent(); -}; + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); -MarkerControl.prototype._createSizeOpacityComponent = function () { - if (!this.markerOption) return; + // Add the old object onto the stack (as a reference) + ret.prevObject = this; - var $sizeOpacityComponent; - if (this.showSymbol) { - $sizeOpacityComponent = $('' + '
' + '
Size / Opacity / Show All
' + '
' + '
' + '
' + '
' + '
' + '
'); - } else { - $sizeOpacityComponent = $('' + '
' + '
Size / Opacity
' + '
' + '
' + '
' + '
' + '
'); - } + // Return the newly-formed element set + return ret; + }, - this.$controlContents.append($sizeOpacityComponent); - var $sizeOpacityComponentContents = $sizeOpacityComponent.find('.bo-component-marker-contents'); + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, - var _this = this; - var markerSizeSelectorWidget = WidgetFactory.createMarkerSizeSelectorWidget($sizeOpacityComponentContents.find('.bo-component-marker-size'), { - type: 'number', - value: this.markerOption.symbolSize, - onChanged: function onChanged(inputVal) { - _this.markerOption.symbolSize = inputVal; - _this.options.onChanged('onChartOptionChanged', { plotOptions: _this.options.chartOption.plotOptions }); - } - }); - this._widgetList.push(markerSizeSelectorWidget); + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, - var opacitySelectorWidget = WidgetFactory.createOpacitySelectorWidget($sizeOpacityComponentContents.find('.bo-component-marker-opacity'), { - value: this.markerOption.itemStyle.normal.opacity, - onChanged: function onChanged(inputVal) { - _this.markerOption.itemStyle.normal.opacity = inputVal; - _this.options.onChanged('onChartOptionChanged', { plotOptions: _this.options.chartOption.plotOptions }); - } - }); - this._widgetList.push(opacitySelectorWidget); + end: function() { + return this.prevObject || this.constructor(); + }, - if (this.showSymbol) { - var showAllSelectorWidget = WidgetFactory.createMarkerShowSelectorWidget($sizeOpacityComponentContents.find('.bo-component-marker-show'), { - value: this.showSymbol.all, - onChanged: function onChanged(inputVal) { - _this.showSymbol.all = inputVal; - _this.options.onChanged('onChartOptionChanged', { plotOptions: _this.options.chartOption.plotOptions }); - } - }); - this._widgetList.push(showAllSelectorWidget); - } -}; + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} -MarkerControl.prototype._createColorPaletteComponent = function () { +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); - var $colorPaletteComponent = $('
Color Palette
'); - this.$controlContents.append($colorPaletteComponent); +function isArrayLike( obj ) { - var _this = this; - var colorPaletteWidget = WidgetFactory.createColorPaletteWidget($colorPaletteComponent, { - value: this.options.chartOption.colorSet, - onChanged: function onChanged(inputVal) { - _this.options.chartOption.colorSet = inputVal; - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { colorSet: _this.options.chartOption.colorSet }); - } - }); - this._widgetList.push(colorPaletteWidget); -}; + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); -exports.default = MarkerControl; + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } -/***/ }), -/* 290 */ -/***/ (function(module, exports, __webpack_require__) { + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} -"use strict"; +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; -Object.defineProperty(exports, "__esModule", { - value: true -}); + function cache( key, value ) { -var _baseControl = __webpack_require__(9); + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { -var _baseControl2 = _interopRequireDefault(_baseControl); + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} -var _widgetFactory = __webpack_require__(3); +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} -var WidgetFactory = _interopRequireWildcard(_widgetFactory); +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} /** - * Created by mk90.kim on 2017-05-10. + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */ - -function FramePieControl(parentId, options, headerKey) { - _baseControl2.default.call(this, parentId, options, headerKey); +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; } -FramePieControl.prototype = Object.create(_baseControl2.default.prototype); -FramePieControl.prototype.constructor = FramePieControl; +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} -FramePieControl.prototype._init = function () { - _baseControl2.default.prototype._init.call(this); - this.styleOption = this.options.chartOption.chart; - this.gridOption = this.options.chartOption.grid; - this.display = this.options.setting.display; - if (!this.display.center) this.display.center = []; -}; +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} -FramePieControl.prototype._createContents = function ($parent) { - _baseControl2.default.prototype._createContents.call(this, $parent); +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} - this.createComponentContents(); -}; +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} -FramePieControl.prototype.createComponentContents = function (contentsOption) { - _baseControl2.default.prototype.createComponentContents.call(this, contentsOption); - this._createChartPositionComponent(); - this._createChartSizeComponent(); - this._createBackgroundComponent(); - this._createBorderComponent(); -}; +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} -FramePieControl.prototype._createChartPositionComponent = function (contentsOption) { - var $chartPositionComponent = $('' + '
' + '
Center Position
' + '
' + '
' + '
'); +// Expose support vars for convenience +support = Sizzle.support = {}; - this.$controlContents.append($chartPositionComponent); - var $chartPositionComponentContents = $chartPositionComponent.find('.bo-component-chart-position-contents'); +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; - var _this = this; + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; - var positionOptions = { - width: '50px', - height: '30px', - value: { - left: this.display.center[0], - top: this.display.center[1] - }, - position: ['left', 'top'], - problemKeyList: ['value-003'], - onChanged: { - left: function left(value) { - _this.display.center[0] = value ? value : '50%'; - _this.options.onChanged('onChartOptionChanged', { plotOptions: _this.options.chartOption.plotOptions }); - }, - top: function top(value) { - _this.display.center[1] = value ? value : '50%'; - _this.options.onChanged('onChartOptionChanged', { plotOptions: _this.options.chartOption.plotOptions }); - } - } - }; +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } - if (this.options.setting.display) { - $.extend(true, positionOptions, this.options.setting.display); - } + var fn = Expr.attrHandle[ name.toLowerCase() ], - var positionWidget = WidgetFactory.createCenterPositionWidget($chartPositionComponentContents, positionOptions); + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; - this._widgetList.push(positionWidget); + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; }; -FramePieControl.prototype._createChartSizeComponent = function (contentsOption) { - var $chartSizeComponent = $('' + '
' + '
Chart Size
' + '
' + '
' + '
'); +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; - this.$controlContents.append($chartSizeComponent); - var $chartSizeComponentContents = $chartSizeComponent.find('.bo-component-chart-size-contents'); +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; - var _this = this; - - var sizeOptions = { - width: '50px', - height: '30px', - value: { - size: this.display.radius - }, - position: ['size'], - problemKeyList: ['value-003'], - onChanged: { - size: function size(value) { - _this.display.radius = value ? value : '75%'; - _this.options.onChanged('onChartOptionChanged', { plotOptions: _this.options.chartOption.plotOptions }); - } - } - }; +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; - if (this.options.setting.display) { - $.extend(true, sizeOptions, this.options.setting.display); - } +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; - var sizeWidget = WidgetFactory.createCenterPositionWidget($chartSizeComponentContents, sizeOptions); + if ( !nodeType ) { - this._widgetList.push(sizeWidget); -}; + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { -FramePieControl.prototype._createBackgroundComponent = function (contentsOption) { - var $backgroundComponent = $('' + '
' + '
Background
' + '
' + '
' + '
' + '
' + '
'); + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - this.$controlContents.append($backgroundComponent); - var $backgroundComponentContents = $backgroundComponent.find('.bo-component-frame-contents'); + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { - var _this = this; - this.opacity = function () { - if (_this.styleOption.background == 'transparent') { - return 0; - } else { - return _this.styleOption.background.replace(/^(.*,)(.+)\)/, '$2'); - } - }(); + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } - var colorPickerWidget = WidgetFactory.createColorPickerWidget($backgroundComponentContents.find('.bo-component-frame-background-color'), { - width: '50px', - height: '30px', - hasOpacity: true, - value: this.styleOption.background, - onChanged: function onChanged(color) { - _this.styleOption.background = color.replace(/^(.*,).+\)/, '$1') + _this.opacity + ')'; - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { chart: _this.styleOption }); - } - }); - this._widgetList.push(colorPickerWidget); + // Do not include comment or processing instruction nodes - var opacitySelectorWidget = WidgetFactory.createOpacitySelectorWidget($backgroundComponentContents.find('.bo-component-frame-background-opacity'), { - value: this.opacity, - onChanged: function onChanged(opacity) { - _this.opacity = opacity; - var resultRgba = _this.styleOption.background.replace(/^(.*,).+\)/, '$1'); - resultRgba = resultRgba + opacity + ')'; - _this.styleOption.background = resultRgba; - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { chart: _this.styleOption }); - } - }); - this._widgetList.push(opacitySelectorWidget); + return ret; }; -FramePieControl.prototype._createBorderComponent = function (contentsOption) { - - var _this = this; +Expr = Sizzle.selectors = { - var _getBorderStr2Obj = function _getBorderStr2Obj(inptOption) { - var emptyDiv = $('
').css({ border: inptOption }); - return { - borderColor: emptyDiv.css('border-color'), - // 5px -> 5 - borderWidth: emptyDiv.css('border-width').replace('px', ''), - borderType: emptyDiv.css('border-style') - }; - }; - var _getBorderObj2Str = function _getBorderObj2Str(borderObj) { - var borderStr = ''; - borderStr += borderObj.borderColor ? borderObj.borderColor + ' ' : ''; - borderStr += borderObj.borderWidth ? borderObj.borderWidth + 'px ' : ''; - borderStr += borderObj.borderType ? borderObj.borderType : ''; - return borderStr; - }; + // Can be adjusted by the user + cacheLength: 50, - this.borderAttrObj = _getBorderStr2Obj(this.styleOption.border); - var lineStyleWidget = WidgetFactory.createLineStyleWidget(this.$controlContents, { - label: 'Border', - value: [this.borderAttrObj.borderWidth, this.borderAttrObj.borderColor, this.borderAttrObj.borderType], - onChanged: [function (inputVal) { - _this.borderAttrObj.borderWidth = inputVal; - _this.styleOption.border = _getBorderObj2Str(_this.borderAttrObj); - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { chart: _this.styleOption }); - }, function (changedColor) { - _this.borderAttrObj.borderColor = changedColor; - _this.styleOption.border = _getBorderObj2Str(_this.borderAttrObj); - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { chart: _this.styleOption }); - }, function (inputVal) { - _this.borderAttrObj.borderType = inputVal; - _this.styleOption.border = _getBorderObj2Str(_this.borderAttrObj); - _this.setExpanderPreview.call(_this); - _this.options.onChanged('onChartOptionChanged', { chart: _this.styleOption }); - }] - }); + createPseudo: markFunction, - this._widgetList.push(lineStyleWidget); -}; + match: matchExpr, -FramePieControl.prototype.renderProblem = function () { - var _this = this; - this._widgetList.forEach(function (widget) { - widget.renderProblem(_this.options.problemList); - }); -}; + attrHandle: {}, -exports.default = FramePieControl; + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} -/***/ }), -/* 291 */ -/***/ (function(module, exports, __webpack_require__) { +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} -"use strict"; +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} -Object.defineProperty(exports, "__esModule", { - value: true -}); +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} -var _chartOptionBase = __webpack_require__(6); +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} -var _chartOptionBase2 = _interopRequireDefault(_chartOptionBase); +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} -var _chartOptionAreaStacked = __webpack_require__(292); +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} -var _chartOptionAreaStacked2 = _interopRequireDefault(_chartOptionAreaStacked); +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; /** - * Created by SDS on 2017-05-10. + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} -function AreaStacked100ChartOption(parentId, options) { - _chartOptionBase2.default.call(this, parentId, options); +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); } -AreaStacked100ChartOption.prototype = Object.create(_chartOptionBase2.default.prototype); -AreaStacked100ChartOption.prototype.constructor = AreaStacked100ChartOption; +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} -AreaStacked100ChartOption.prototype._init = function () { - _chartOptionBase2.default.prototype._init.call(this); - var _this = this; - var columnSelectorSetting = [[{ - key: 'xAxis', - ref: _this.options.chartOption.xAxis[0] - }, { - key: 'yAxis', - ref: _this.options.chartOption.yAxis[0] - }, { - key: 'stackBy', - ref: _this.options.chartOption.plotOptions.area.stackBy[0], - getColumnChangedOption: function getColumnChangedOption(value) { - return { - plotOptions: { - area: $.extend(true, {}, _this.options.chartOption.plotOptions.area, { - stackBy: [{ selected: value }] - }) - } - }; - } - }]]; - columnSelectorSetting = this._configureColumnConf(columnSelectorSetting); - this.options.setting.columnSelector = columnSelectorSetting; - this.options.setting.marker = this.options.chartOption.plotOptions.area.marker; - this.options.setting.stripLine = this.options.chartOption.plotOptions.area.stripLine; - this.options.setting.tooltip = this.options.chartOption.plotOptions.area.tooltip; - this.options.setting.showSymbol = this.options.chartOption.plotOptions.area.showSymbol; -}; +return Sizzle; -AreaStacked100ChartOption.prototype.getDefaultControlContainerList = function () { - return ['Data', 'ToolTipTrigger', 'Title', 'Axis', 'Legend', 'Marker', 'Lines', 'Frame']; -}; +} )( window ); -exports.default = AreaStacked100ChartOption; -/***/ }), -/* 292 */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; -Object.defineProperty(exports, "__esModule", { - value: true -}); -var _chartOptionBase = __webpack_require__(6); -var _chartOptionBase2 = _interopRequireDefault(_chartOptionBase); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; -function AreaStackedChartOption(parentId, options) { - _chartOptionBase2.default.call(this, parentId, options); -} /** - * Created by SDS on 2017-05-10. - */ + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; -AreaStackedChartOption.prototype = Object.create(_chartOptionBase2.default.prototype); -AreaStackedChartOption.prototype.constructor = AreaStackedChartOption; -AreaStackedChartOption.prototype._init = function () { - _chartOptionBase2.default.prototype._init.call(this); - var _this = this; - var columnSelectorSetting = [[{ - key: 'xAxis', - ref: this.options.chartOption.xAxis[0] - }, { - key: 'yAxis', - ref: this.options.chartOption.yAxis[0] - }, { - key: 'stackBy', - ref: this.options.chartOption.plotOptions.area.stackBy[0], - getColumnChangedOption: function getColumnChangedOption(value) { - return { - plotOptions: { - area: $.extend(true, {}, _this.options.chartOption.plotOptions.area, { - stackBy: [{ selected: value }] - }) - } - }; - } - }]]; +var siblings = function( n, elem ) { + var matched = []; - columnSelectorSetting = this._configureColumnConf(columnSelectorSetting); - this.options.setting.columnSelector = columnSelectorSetting; - this.options.setting.marker = this.options.chartOption.plotOptions.area.marker; - this.options.setting.stripLine = this.options.chartOption.plotOptions.area.stripLine; - this.options.setting.tooltip = this.options.chartOption.plotOptions.area.tooltip; - this.options.setting.showSymbol = this.options.chartOption.plotOptions.area.showSymbol; -}; + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } -AreaStackedChartOption.prototype.getDefaultControlContainerList = function () { - return ['Data', 'ToolTipTrigger', 'Title', 'Axis', 'Legend', 'Marker', 'Lines', 'Frame']; + return matched; }; -exports.default = AreaStackedChartOption; -/***/ }), -/* 293 */ -/***/ (function(module, exports, __webpack_require__) { +var rneedsContext = jQuery.expr.match.needsContext; -"use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); +function nodeName( elem, name ) { -var _chartOptionBase = __webpack_require__(6); + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); -var _chartOptionBase2 = _interopRequireDefault(_chartOptionBase); +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); -var _chartOptionArea = __webpack_require__(118); -var _chartOptionArea2 = _interopRequireDefault(_chartOptionArea); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } -/** - * Created by SDS on 2017-05-10. - */ + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } -function BarStacked100ChartOption(parentId, options) { - _chartOptionBase2.default.call(this, parentId, options); + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); } -BarStacked100ChartOption.prototype = Object.create(_chartOptionBase2.default.prototype); -BarStacked100ChartOption.prototype.constructor = BarStacked100ChartOption; +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} -BarStacked100ChartOption.prototype._init = function () { - _chartOptionBase2.default.prototype._init.call(this); - var _this = this; - var columnSelectorSetting = [[{ - key: 'xAxis', - ref: _this.options.chartOption.xAxis[0] - }, { - key: 'yAxis', - ref: _this.options.chartOption.yAxis[0] - }, { - key: 'stackBy', - ref: _this.options.chartOption.plotOptions.bar.stackBy[0], - getColumnChangedOption: function getColumnChangedOption(value) { - return { - plotOptions: { - bar: $.extend(true, {}, _this.options.chartOption.plotOptions.bar, { - stackBy: [{ selected: value }] - }) - } - }; - } - }]]; - columnSelectorSetting = this._configureColumnConf(columnSelectorSetting); - this.options.setting.columnSelector = columnSelectorSetting; - this.options.setting.stripLine = this.options.chartOption.plotOptions.bar.stripLine; - this.options.setting.tooltip = this.options.chartOption.plotOptions.bar.tooltip; -}; +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} -BarStacked100ChartOption.prototype.getDefaultControlContainerList = function () { - return ['Data', 'ToolTipTrigger', 'Title', 'Axis', 'Legend', 'Marker', 'Lines', 'Frame']; -}; +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} -exports.default = BarStacked100ChartOption; +function adoptValue( value, resolve, reject, noValue ) { + var method; -/***/ }), -/* 294 */ -/***/ (function(module, exports, __webpack_require__) { + try { -"use strict"; + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.set = set; -exports.get = get; + // Other non-thenables + } else { -var setupReg = {}; + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } -function set(key, value) { - setupReg[key] = value; -} + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { -function get(key) { - return setupReg[key]; + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } } -exports.default = setupReg; +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, -/***/ }), -/* 295 */ -/***/ (function(module, exports, __webpack_require__) { + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), -"use strict"; + // the master Deferred + master = jQuery.Deferred(), + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.buildAutoOptionSelector = buildAutoOptionSelector; + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); -var _resolvers = __webpack_require__(663); + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { -function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } + return master.then(); + } + } -function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } /* ----------------------------------------------------- - * auto-option-selector.js - * Created by hyunseok.oh@samsung.com on 2018-08-31. - * ---------------------------------------------------- */ + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + return master.promise(); + } +} ); -function buildAutoOptionSelector(_config) { - var config = _config || {}; - var map = {}; - // -------------------------------------------------------------------------------------------- - var xyResolver = function xyResolver(a, b) { - return (0, _resolvers.andResolver)([(0, _resolvers.xResolver)({ type: a }), (0, _resolvers.yResolver)({ type: b })]); - }; +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - var nnCol = xyResolver(_resolvers.COL_TYPE.NUMERIC, _resolvers.COL_TYPE.NUMERIC); - var ncCol = xyResolver(_resolvers.COL_TYPE.NUMERIC, _resolvers.COL_TYPE.CATEGORICAL); - var cnCol = xyResolver(_resolvers.COL_TYPE.CATEGORICAL, _resolvers.COL_TYPE.NUMERIC); +jQuery.Deferred.exceptionHook = function( error, stack ) { - Object.assign(map, { - 'histogram': [(0, _resolvers.xResolver)({ type: _resolvers.COL_TYPE.NUMERIC })], - 'boxplot': [cnCol], - 'line': [nnCol], - 'line-stacked': [nnCol], - 'line-stacked-100': [nnCol], - 'bar': [ncCol], - 'bar-stacked': [ncCol], - 'bar-stacked-100': [ncCol], - 'column': [cnCol], - 'column-stacked': [cnCol], - 'column-stacked-100': [cnCol], - 'scatter': [nnCol], - 'area': [cnCol], - 'area-stacked': [cnCol], - 'area-stacked-100': [cnCol], - 'biplot': [], - 'heatmap': [], - 'heatmap-matrix': [], - 'roccurve': [], - 'network': [], - 'decisionTree': [], - 'dendrogram': [], - 'treemap': [], - 'bubble': [], - 'qqplot': [], - 'pairwise-scatter': [], - 'complex': [], - 'card': [], - 'image-grid': [(0, _resolvers.imageColumnResolver)()] - }); - // -------------------------------------------------------------------------------------------- + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; - // validate resolvers - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - try { - for (var _iterator = Object.values(map)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var v = _step.value; - v.forEach(function (e) { - if (!e.pre) { - throw new Error('resolver must implement a "pre". see option-selector.js'); - } - if (!e.resolve) { - throw new Error('resolver must implement a "resolve". see option-selector.js'); - } - }); - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - return function (type, chartOption, cols) { - if (!map[type] || typeof config[type] !== 'undefined' && !config[type] || typeof config.default !== 'undefined' && !config.default) { - return chartOption; - } - var resolverList = map[type]; - return resolverList.reduce(function (_ref, r) { - var _ref2 = _toArray(_ref), - p = _ref2.slice(0); +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; - if (r.pre.apply(r, _toConsumableArray(p))) return r.resolve.apply(r, _toConsumableArray(p)); - return p; - }, [chartOption, cols])[0]; - }; -} -/***/ }), -/* 296 */ -/***/ (function(module, exports, __webpack_require__) { -"use strict"; +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); -Object.defineProperty(exports, "__esModule", { - value: true -}); +jQuery.fn.ready = function( fn ) { -var _typeutils = __webpack_require__(664); + readyList + .then( fn ) -var TypeUtils = _interopRequireWildcard(_typeutils); + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + return this; +}; -/** - * Source: datasource.js - * Created by daewon.park on 2017-04-28. - */ +jQuery.extend( { -var ChartWidget = Brightics.Chart.Widget; + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, -/** - options = - { - id: 'asdf', - name: 'Data Source #1', //데이터 소스 Title, - updateTime: '2017-03-30T01:33:50.304Z', - chartTab: { - show: true - }, - columnDraggable: true (default: false), - headerDraggable: true (default: false), - drawer: { - show: true, //false - menu: { - edit: { - show: true, - title: 'Edit', - click: function (event, index, options) { + // Handle when the DOM is ready + ready: function( wait ) { - } - }, - connect: { - show: true, - title: 'Connect Schedule', - click: function (event, index, options) { + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } - } - }, - delete: { - show: true, - title: 'Delete', - click: function (event, index, options) { + // Remember that the DOM is ready + jQuery.isReady = true; - } - } - } - }, - charts: [], - columns: [{ - name: 'sepal_length', - type: 'number', - internalType: 'Double' - }, { - name: 'sepal_width', - type: 'number', - internalType: 'Double' - }, { - name: 'petal_length', - type: 'number', - internalType: 'Double' - }, { - name: 'petal_width', - type: 'number', - internalType: 'Double' - }, { - name: 'species', - type: 'string', - internalType: 'String' - }] - } - **/ + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } -function DataSource(parentId, options) { - ChartWidget.call(this, parentId, options); + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); } -DataSource.prototype = Object.create(ChartWidget.prototype); -DataSource.prototype.constructor = DataSource; +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { -DataSource.prototype._init = function () { - ChartWidget.prototype._init.call(this); - this.setOptions(this.options); -}; + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); -// Draggable To Other Object -// drag-type: 'dataSource', 'column', 'chartTemplate' -// $helper.data('data', dataSource) -DataSource.prototype.setOptions = function (options) { - this.options = $.extend(true, this.options || {}, options, { - drawer: { - menu: {} - } - }); -}; +} else { -DataSource.prototype.setName = function (name) { - this.options.name = name; -}; + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); -DataSource.prototype.destroy = function () { - if (this.$drawerMenu) { - this.$drawerMenu.jqxMenu('destroy'); - this.$drawerMenu = null; - } + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} - var $parent = this.$mainControl.parents('.bcharts-ds-panel'); - this.$mainControl.remove(); - $parent.perfectScrollbar('update'); -}; -DataSource.prototype._createContents = function ($parent) { - this.$mainControl = $('
'); - $parent.append(this.$mainControl); - this._createDataSourceHeader(this.$mainControl); - this._createDrawerMenu(this.$mainControl); - this._createDataSourceContents(this.$mainControl); - this.render(); -}; -DataSource.prototype._createDataSourceHeader = function ($parent) { - this.$headerControl = $('' + '
' + '
' + '
' + '
' + '
' + '
'); - $parent.append(this.$headerControl); - this._applyExpander(); - this._applyDrawer(); - if (this.options.headerDraggable) { - this._bindDraggableEventToDataSourceHeader(); - } -}; -DataSource.prototype._applyExpander = function () { - // DataSource Content (bcharts-ds-contents) 접고 펴는 기능입니다. - // UX 디자인 나오는거 보고, jqxExpander를 적용할지 결정할 예정. - var _this = this; - this.$headerControl.click(function (event) { - if (!($(event.target).hasClass('bcharts-ds-drawer') || $(event.target).hasClass('bcharts-ds-drawer-button'))) { - var $arrow = $(this).find('.bcharts-expander-arrow'); - if ($arrow.hasClass('bcharts-icon-arrow-up')) { - $arrow.removeClass('bcharts-icon-arrow-up').addClass('bcharts-icon-arrow-down'); - _this.$mainControl.addClass('bcharts-ds-collapsed').removeClass('bcharts-ds-expanded'); - _this.$mainControl.find('.bcharts-ds-contents').hide(); - } else { - $arrow.removeClass('bcharts-icon-arrow-down').addClass('bcharts-icon-arrow-up'); - _this.$mainControl.removeClass('bcharts-ds-collapsed').addClass('bcharts-ds-expanded'); - _this.$mainControl.find('.bcharts-ds-contents').show(); - } +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; - // 접고 펼 때 상위 div의 perfectScrollbar를 업데이트한다. - _this.$mainControl.parents('.bcharts-ds-panel').perfectScrollbar('update'); - } - }); -}; + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } -DataSource.prototype._applyDrawer = function () { - var _this = this; - if (!this.options.drawer || !this.options.drawer.show) { - this.$headerControl.find('.bcharts-ds-drawer').hide(); - } + // Sets one value + } else if ( value !== undefined ) { + chainable = true; - // Click하면 Context Menu가 popup으로 생성 - this.$headerControl.find('.bcharts-ds-drawer').click(function () { - var anchorWidth = $(this).width(); - var anchorHeight = $(this).height(); - var anchorOffset = $(this).offset(); - var menuWidth = _this.$drawerMenu.width(); - if (_this.$drawerMenu.css('display') === 'none') { - _this.$drawerMenu.jqxMenu('open', anchorOffset.left + anchorWidth - menuWidth - 4, anchorOffset.top + anchorHeight); - } - }); -}; + if ( !isFunction( value ) ) { + raw = true; + } -DataSource.prototype._bindDraggableEventToDataSourceHeader = function () { - var _this = this; - this.$headerControl.draggable({ - appendTo: 'body', - helper: function helper(event) { - var $helper = $(this).clone(); - var width = $(this).width(); - var height = $(this).height(); - $helper.css({ - 'z-index': 5100, - 'width': width, - 'height': height, - 'overflow': 'hidden', - 'white-space': 'nowrap', - 'text-overflow': 'ellipsis' - }); //.ui-draggable-dragging - $helper.attr('drag-type', 'dataSource'); - $helper.data('datasource', $.extend(true, {}, _this.options)); - return $helper; - } - }); -}; + if ( bulk ) { -DataSource.prototype._createDrawerMenu = function ($parent) { - var $ul = $('
    '); - for (var key in this.options.drawer.menu) { - if (this.options.drawer.menu[key].show) { - var $li = $('
  • '); - $li.attr('action', key); - $li.text(this.options.drawer.menu[key].title); - $ul.append($li); - } - } + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; - this.$drawerMenu = $('
    ').append($ul); - $parent.append(this.$drawerMenu); - this.$drawerMenu.jqxMenu({ - theme: 'office', - autoOpenPopup: false, - mode: 'popup', - width: 140 //jqxMenu - li tag의 text에 space key가 들어있으면 space 부분까지만 width가 적용됨.. - }); - this._bindItemClickEventToDrawer(); -}; + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } -DataSource.prototype._bindItemClickEventToDrawer = function () { - var _this = this; - this.$drawerMenu.on('itemclick', function (event) { - var element = event.args; - var menuKey = $(element).attr('action'); - var dataSourceIndex = _this.$mainControl.prevAll('.bcharts-ds').length; - /* menu 옵션에 사용자가 설정한 click 함수 실행 로직 - * drawer: { menu: { '사용자가 정한 기능': click: function(){}}} - * drawer: { menu: { '사용자가 정한 기능': click: [function(){}, function(){}]}} function Array도 가능 - * drawer: { menu: { '사용자가 정한 기능': action: function(){}}} click이 아니라 action이나 다른 이름으로 함수를 지정해도 실행할 수 있도록 하였음. - * - * 부연설명 - * click: function(){} 만 사용하면 아래 3줄로 표현할 수 있지만 - * 사실 여기서 click() 이렇게 함수를 실행하니까 jquery click 함수와 매우 헷갈렸습니다. - * if (typeof _this.options.drawer.menu[menuKey].click === 'function') { - * _this.options.drawer.menu[menuKey].click(); - * } - */ - // Logic Start - if (_this.options.drawer.menu[menuKey]) { - var targetMenu = _this.options.drawer.menu[menuKey]; - for (var key in targetMenu) { - // click이나 action같은 key가 function인 경우 함수 실행 - if (typeof targetMenu[key] === 'function') { - targetMenu[key](event, dataSourceIndex, _this.options); - } - // function Array인 경우 - else if (targetMenu[key] instanceof Array && targetMenu[key].length) { - for (var i in targetMenu[key]) { - // 함수 실행 - if (typeof targetMenu[key][i] === 'function') { - targetMenu[key][i](event, dataSourceIndex, _this.options); - } - } - } - } - } - // Logic End - }); -}; + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } -DataSource.prototype._createDataSourceContents = function ($parent) { - var _this = this; - this.$contentsControl = $('' + '
    ' + '
      ' + '
      '); - $parent.append(this.$contentsControl); - this._createTabs(this.$contentsControl); + if ( chainable ) { + return elems; + } - if (this.$contentsControl.find('li').length) { - this.$contentsControl.jqxTabs({ - theme: 'office', - scrollable: false - }); + // Gets + if ( bulk ) { + return fn.call( elems ); + } - this.$contentsControl.on('selected', function (event) { - //var clickedItem = event.args.item; - _this._handleJqxTabsSelectedClick(); - }); - } + return len ? fn( elems[ 0 ], key ) : emptyGet; }; -DataSource.prototype._handleJqxTabsSelectedClick = function () { - // tab이 선택될 때 상위 div의 perfectScrollbar를 업데이트한다. - this.$mainControl.parents('.bcharts-ds-panel').perfectScrollbar('update'); -}; -// DataSource 상속 받는 Class의 경우 여기서 Tab 갯수와 기능 등등을 override 할 수 있다. -DataSource.prototype._createTabs = function ($parent) { - this._createColumnsTab($parent); -}; +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; -DataSource.prototype._createColumnsTab = function ($parent) { - var $columnsTab = $('
    • Columns
      0
    • '); - $parent.find('.bcharts-ds-contents-tabs').append($columnsTab); - $parent.append($('
      ')); -}; +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { -DataSource.prototype._updateColumnsCount = function (number) { - // Columns Tab에 표시되는 숫자 변경 - this.$contentsControl.find('.bcharts-ds-contents-columns-count').text(number); + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); }; -DataSource.prototype.fillColumnsTab = function (columns) { - var $container = $('
      '); - this.$contentsControl.jqxTabs('setContentAt', this.$contentsControl.jqxTabs('length') - 1, $container.html()); - $container = this.$contentsControl.find('.bcharts-ds-columns-container'); - this._createColumns($container, columns); - this.$contentsControl.find('.bcharts-ds-columns').perfectScrollbar(); - // Columns Tab에 표시되는 숫자 변경 - if (columns && columns instanceof Array) this._updateColumnsCount(columns.length); - this._createUtilToolsArea(); -}; -DataSource.prototype._createUtilToolsArea = function () { - var $container = this.$contentsControl.find('.bcharts-ds-columns-container'); - var $utilToolsArea = $('
      '); - $container.prepend($utilToolsArea); +function Data() { + this.expando = jQuery.expando + Data.uid++; +} - this._createFilterControl($utilToolsArea); -}; +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} -DataSource.prototype._createFilterControl = function ($parent) { - var _this = this; - var $searchArea = $('
      '); - $parent.append($searchArea); +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} - var $filterInput = $(''); - $searchArea.append($filterInput); +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} - $filterInput.jqxInput({ - placeHolder: 'Search Column', - theme: 'office' - }); - var applyFilter = function applyFilter(event) { - var filterValue = event.target.value.toLowerCase(); - var $columns = _this.$contentsControl.find('.bcharts-ds-columns-container .bcharts-ds-columns'); - $.each($columns.find('.bcharts-ds-column'), function (index, column) { - var columnName = $(column).find('.bcharts-ds-column-name').attr('title').toLowerCase(); - if (columnName.indexOf(filterValue) != -1) { - $(column).css('display', 'flex'); - } else { - $(column).css('display', 'none'); - } - }); - _this.$contentsControl.find('.bcharts-ds-columns').perfectScrollbar('update'); - _this.$mainControl.parents('.bcharts-ds-panel').perfectScrollbar('update'); - }; - $filterInput.keyup(function (event) { - applyFilter(event); - }); +var defaultDisplayMap = {}; - $filterInput.on('search', function (event) { - applyFilter(event); - }); -}; +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; -DataSource.prototype._createColumns = function ($parent, columns) { - var $columns = $('
      '); - $parent.append($columns); + if ( display ) { + return display; + } - for (var i in columns) { - var $col = $('
      '); - var dataTypeTitle = TypeUtils.convertDataTypeForTitle(columns[i].type, columns[i].internalType); - var dataTypeText = TypeUtils.convertDataTypeForText(columns[i].type, columns[i].internalType); - $col.find('.bcharts-ds-column-type').attr('title', dataTypeTitle); - $col.find('.bcharts-ds-column-type').text(dataTypeText); - $col.find('.bcharts-ds-column-name').attr('title', columns[i].name); - $col.find('.bcharts-ds-column-name .bcharts-ds-column-name-ellipsis').text(columns[i].name); - $columns.append($col); - if (this.options.columnDraggable) this._bindDraggableEventToDataSourceColumns($col, i); - } -}; + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); -DataSource.prototype._bindDraggableEventToDataSourceColumns = function ($target, index) { - var _this = this; - $target.draggable({ - appendTo: 'body', - scroll: false, - cursor: 'move', - helper: function helper(event) { - var $helper = $(this).clone(); - var width = $(this).width(); - var height = $(this).height(); - $helper.css({ - 'z-index': 5100, - 'width': width, - 'height': height, - 'overflow': 'hidden', - 'white-space': 'nowrap', - 'text-overflow': 'ellipsis' - }); //.ui-draggable-dragging - $helper.attr('drag-type', 'column'); - var helperData = $.extend(true, {}, _this.options); - // if (helperData.columns && helperData.columns.length) { - // //console.log(JSON.stringify(helperData.columns[index])); - // helperData.columns = [helperData.columns[index]]; - // } else { - // helperData.columns = []; - // } + temp.parentNode.removeChild( temp ); - $helper.data('datasource', helperData); - $helper.data('column', helperData.columns[index]); - return $helper; - } - }); -}; + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; -DataSource.prototype.render = function () { - this.fillName(); - this.fillContents(); -}; + return display; +} -DataSource.prototype.fillName = function () { - this.$headerControl.find('.bcharts-ds-title').attr('title', this.options.name); - this.$headerControl.find('.bcharts-ds-title .bcharts-ds-title-ellipsis').text(this.options.name); -}; +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} -DataSource.prototype.fillContents = function () { - this.fillColumnsTab(this.options.columns); -}; +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
      " ], + col: [ 2, "", "
      " ], + tr: [ 2, "", "
      " ], + td: [ 3, "", "
      " ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} -exports.default = DataSource; -/***/ }), -/* 297 */ -/***/ (function(module, exports, __webpack_require__) { +function getAll( context, tag ) { -"use strict"; + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); -Object.defineProperty(exports, "__esModule", { - value: true -}); + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); -var _widgetFactory = __webpack_require__(3); + } else { + ret = []; + } -var WidgetFactory = _interopRequireWildcard(_widgetFactory); + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + return ret; +} -/** - * Source: chart-panel.js - * Created by daewon.park on 2017-05-10. - */ -var ChartWidget = Brightics.Chart.Widget; -var ChartUtil = Brightics.Chart.Helper.ChartUtils; +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; -function ChartPanel(parentId, options) { - ChartWidget.call(this, parentId, options); + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } } -ChartPanel.prototype = Object.create(ChartWidget.prototype); -ChartPanel.prototype.constructor = ChartPanel; -ChartPanel.prototype._init = function () { - ChartWidget.prototype._init.call(this); -}; +var rhtml = /<|&#?\w+;/; -ChartPanel.prototype.destroy = function () { - if (this.$contextMenu) { - this.$contextMenu.jqxMenu('destroy'); - } - if (this.$contentsControl) { - this.$contentsControl.bcharts('destroy'); - } - $(window).off('resize', this.__resizeHandler); -}; +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; -ChartPanel.prototype.getOptions = function () { - return this.options; -}; + for ( ; i < l; i++ ) { + elem = elems[ i ]; -ChartPanel.prototype._createContents = function ($parent) { - this.$mainControl = $('
      '); - this.$mainControl.css(this.options.style); - this.$mainControl.attr('id', this.options.id); - this.$mainControl.attr('chart', this.options.chartOption.chart.type); - $parent.append(this.$mainControl); + if ( elem || elem === 0 ) { - this._createPanelHeader(this.$mainControl); - this._createPanelContents(this.$mainControl); - this._createDroppable(this.$mainControl); + // Add nodes directly + if ( toType( elem ) === "object" ) { - this._configureChartOptions(); - this._createChart(); - // this._connectGroup(); -}; + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); -ChartPanel.prototype._configureChartOptions = function () {}; + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); -ChartPanel.prototype._createPanelHeader = function ($parent) { - var _this2 = this; + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - var _this = this; + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - this.$headerControl = $('' + '
      ' + '
      ' + '
      ' + '
      ' + '
      '); - $parent.append(this.$headerControl); - this.$headerControl.perfectScrollbar(); - this.$headerControl.perfectScrollbar('update'); - this.__resizeHandler = function (e) { - return _this2.$headerControl.perfectScrollbar('update'); - }; - $(window).on('resize', this.__resizeHandler); - this._createChartSelector(); - this._createDraggable(); -}; + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } -ChartPanel.prototype._createDraggable = function () { - var _this = this; + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); - this.$headerControl.find('.bcharts-ws-panel-draggable').draggable({ - appendTo: 'body', - scroll: false, - cursor: 'move', - cursorAt: { left: 90, top: 20 }, - helper: function helper(event) { - var $helper = $('
      '); - _this.$headerControl.find('.bcharts-ws-panel-chart-selector').clone().addClass('bcharts-non-editable').appendTo($helper); - $helper.data('bcharts-ws-panel', $(this).closest('.bcharts-ws-panel')); - return $helper; - }, - start: function start(event, ui) { - _this.$mainControl.closest('.bcharts-worksheet').find('.bcharts-ws-panel-droppable').show(); - _this.$mainControl.find('.bcharts-ws-panel-droppable').hide(); - }, - stop: function stop(event, ui) { - _this.$mainControl.closest('.bcharts-worksheet').find('.bcharts-ws-panel-droppable').hide(); - } - }); -}; + // Remember the top-level container + tmp = fragment.firstChild; -ChartPanel.prototype._createChartSelector = function () { - var _this = this; - this.chartTypeSelector = WidgetFactory.createChartTypeSelectorWidget(this.$headerControl.find('.bcharts-ws-panel-chart-selector'), { - chartTypeList: this.options.chartTypeList, - chartTypeSelectable: this.options.chartTypeSelectable, - onChanged: function onChanged(type) { - if (typeof _this.options.chartTypeChanged === 'function') { - _this.options.chartTypeChanged(_this.options.id, type); - } - } - }); -}; + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } -ChartPanel.prototype._createPanelContents = function ($parent) { - this.$contentsControl = $('' + '
      ' + '
      '); - $parent.append(this.$contentsControl); -}; + // Remove wrapper from fragment + fragment.textContent = ""; -ChartPanel.prototype._createDroppable = function ($parent) { - var _this = this; + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { - $parent.append('' + '
      ' + '
      ' + '
      ' + '
      ' + ''); + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } - $parent.find('.bcharts-ws-panel-droppable').droppable({ - accept: '.bcharts-ws-panel-draggable', - activeClass: 'bcharts-droppable-state-active', - hoverClass: 'bcharts-droppable-state-hover', - over: function over(event, ui) { - var $dropLocation = $('
      '); - if ($(this).attr('anchor') === 'left') $dropLocation.css({ - width: '50%', - height: '100%', - top: 0 - });else if ($(this).attr('anchor') === 'right') $dropLocation.css({ - width: '50%', - height: '100%', - right: 0, - top: 0 - });else if ($(this).attr('anchor') === 'top') $dropLocation.css({ - width: '100%', - height: '50%', - top: 0 - });else if ($(this).attr('anchor') === 'bottom') $dropLocation.css({ - width: '100%', - height: '50%', - bottom: 0 - }); + attached = isAttached( elem ); - _this.$mainControl.find('.bcharts-ws-panel-droppable-location').remove(); - _this.$mainControl.append($dropLocation); - }, - out: function out(event, ui) { - _this.$mainControl.find('.bcharts-ws-panel-droppable-location').remove(); - }, - drop: function drop(event, ui) { - _this.$mainControl.find('.bcharts-ws-panel-droppable-location').remove(); - var movePanel = ui.helper.data('bcharts-ws-panel'); - var targetPanel = $(this).closest('.bcharts-ws-panel'); - var anchor = $(this).attr('anchor'); + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); - _this._fireEvent('movePanel', [movePanel, targetPanel, anchor]); - } - }); -}; + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } -ChartPanel.prototype._fireEvent = function (eventName, eventParam) { - this.$mainControl.closest('.bcharts-worksheet').trigger(eventName, eventParam); -}; + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } -ChartPanel.prototype.createToolbar = function (toolbar) { - var _this = this; - var $toolbar = this.$headerControl.find('.bcharts-ws-panel-toolbar'); - for (var key in toolbar.menu) { - var $item = $('
      '); - $item.attr('action', key); - $item.attr('title', toolbar.menu[key].title); - $toolbar.append($item); + return fragment; +} - if (typeof toolbar.menu[key].init === 'function') { - toolbar.menu[key].init($item); - } - if (typeof toolbar.menu[key].click === 'function') { - $item.click(toolbar.menu[key].click.bind(_this)); - } - } -}; -ChartPanel.prototype._createChart = function () { - this.$contentsControl.bcharts(this.options.chartOption); - this._renderChartSelector(); -}; +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; -ChartPanel.prototype.getGroup = function () { - return this.$contentsControl.bcharts('getGroup'); -}; +function returnTrue() { + return true; +} -ChartPanel.prototype._connectGroup = function () { - if (this.options.group) { - this.connect(this.options.group); - } -}; +function returnFalse() { + return false; +} -ChartPanel.prototype.connect = function (group) { - this.$contentsControl.bcharts('connect', group); -}; +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} -ChartPanel.prototype.disconnect = function () { - this.$contentsControl.bcharts('disconnect'); -}; +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} /* - * @param options = { - chart: { - type: 'area', - ... - }, - } + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. */ -ChartPanel.prototype.setChartOptions = function (chartOption) { - this._renderChart(chartOption); - if (chartOption.chart && chartOption.chart.type) { - this.$mainControl.attr('chart', chartOption.chart.type); - this._renderChartSelector(chartOption.chart.type); - } - this._fireEvent('changeChart', [this, chartOption]); +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} - $.extend(true, this.options.chartOption, chartOption); -}; +jQuery.removeEvent = function( elem, type, handle ) { -ChartPanel.prototype.setDataSource = function (dataSource) { - $.extend(true, this.options.chartOption.source, dataSource); - ChartUtil.assignArray(this.options.chartOption.source, dataSource); - this._renderChart(this.options.chartOption); -}; + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} -ChartPanel.prototype.refresh = function () { - this.$contentsControl.bcharts('render', true); - this._renderChartSelector(); -}; +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} -ChartPanel.prototype.getFilter = function () { - return this.$contentsControl.bcharts('getFilter'); -}; +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; -ChartPanel.prototype.setFilter = function (filter) { - return this.$contentsControl.bcharts('setFilter', filter); -}; + if ( dest.nodeType !== 1 ) { + return; + } -ChartPanel.prototype.getSelectedRange = function () { - return this.$contentsControl.bcharts('getSelectedRange'); -}; + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; -ChartPanel.prototype._renderChart = function (chartOption) { - this.$contentsControl.bcharts('setOptions', chartOption); -}; + if ( events ) { + dataPriv.remove( dest, "handle events" ); -ChartPanel.prototype._renderChartSelector = function (type) { - var chartType = type || (this.options.chartOption.chart ? this.options.chartOption.chart.type : this.options.chartOption.chart); - if (chartType) { - this.chartTypeSelector.render(chartType); - } -}; + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } -exports.default = ChartPanel; + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); -/***/ }), -/* 298 */ -/***/ (function(module, exports, __webpack_require__) { + dataUser.set( dest, udataCur ); + } +} -"use strict"; +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.RangeSlider = exports.ListBox = exports.CheckBox = undefined; + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} -var _filterControlCheckbox = __webpack_require__(674); +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} -var _filterControlCheckbox2 = _interopRequireDefault(_filterControlCheckbox); +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} -var _filterControlListbox = __webpack_require__(675); +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} -var _filterControlListbox2 = _interopRequireDefault(_filterControlListbox); -var _filterControlRangeslider = __webpack_require__(676); +function addGetHookIf( conditionFn, hookFn ) { -var _filterControlRangeslider2 = _interopRequireDefault(_filterControlRangeslider); + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } -exports.CheckBox = _filterControlCheckbox2.default; -exports.ListBox = _filterControlListbox2.default; -exports.RangeSlider = _filterControlRangeslider2.default; /** - * Source: filter-control-index - * Created by ji_sung.park on 2018-05-29 - */ + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} -/***/ }), -/* 299 */, -/* 300 */, -/* 301 */, -/* 302 */, -/* 303 */, -/* 304 */, -/* 305 */, -/* 306 */, -/* 307 */, -/* 308 */, -/* 309 */, -/* 310 */, -/* 311 */, -/* 312 */, -/* 313 */, -/* 314 */, -/* 315 */, -/* 316 */, -/* 317 */, -/* 318 */, -/* 319 */, -/* 320 */, -/* 321 */, -/* 322 */, -/* 323 */, -/* 324 */, -/* 325 */, -/* 326 */, -/* 327 */, -/* 328 */, -/* 329 */, -/* 330 */, -/* 331 */, -/* 332 */, -/* 333 */, -/* 334 */, -/* 335 */, -/* 336 */, -/* 337 */, -/* 338 */, -/* 339 */, -/* 340 */, -/* 341 */, -/* 342 */, -/* 343 */, -/* 344 */, -/* 345 */, -/* 346 */, -/* 347 */, -/* 348 */, -/* 349 */, -/* 350 */, -/* 351 */, -/* 352 */, -/* 353 */, -/* 354 */, -/* 355 */, -/* 356 */, -/* 357 */, -/* 358 */, -/* 359 */, -/* 360 */, -/* 361 */, -/* 362 */, -/* 363 */, -/* 364 */, -/* 365 */, -/* 366 */, -/* 367 */, -/* 368 */, -/* 369 */, -/* 370 */, -/* 371 */, -/* 372 */, + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + diff --git a/va-server/visual-analytics/views/multichart.ejs b/va-server/visual-analytics/views/multichart.ejs index 2a990f372..d1084b5dd 100644 --- a/va-server/visual-analytics/views/multichart.ejs +++ b/va-server/visual-analytics/views/multichart.ejs @@ -29,6 +29,7 @@ + @@ -66,6 +67,7 @@ + diff --git a/va-server/visual-analytics/views/popupchart.ejs b/va-server/visual-analytics/views/popupchart.ejs index f097e5386..ac9edd5da 100644 --- a/va-server/visual-analytics/views/popupchart.ejs +++ b/va-server/visual-analytics/views/popupchart.ejs @@ -27,6 +27,7 @@ + @@ -61,6 +62,7 @@ + diff --git a/va-server/visual-analytics/views/popupimage.ejs b/va-server/visual-analytics/views/popupimage.ejs index 5534b1010..352d53e4c 100644 --- a/va-server/visual-analytics/views/popupimage.ejs +++ b/va-server/visual-analytics/views/popupimage.ejs @@ -22,6 +22,7 @@ + @@ -56,6 +57,7 @@ + diff --git a/va-server/visual-analytics/views/popupmodel.ejs b/va-server/visual-analytics/views/popupmodel.ejs index fef33378a..309568c68 100644 --- a/va-server/visual-analytics/views/popupmodel.ejs +++ b/va-server/visual-analytics/views/popupmodel.ejs @@ -24,6 +24,7 @@ + @@ -58,6 +59,7 @@ +