vCount! + 1)}>➕</button>
     *     `;
     * }
     *
     * // enabling hooks
     * render(hooks(App), document.body);
     * ```
     *
     * @param renderer
     *  - `en` A function object that returns a template literal syntax
     *  - `ja` テンプレートリテラル構文を返却する関数オブジェクト
     * @param args
     *  - `en` Arguments passed template literal syntax
     *  - `ja` テンプレートリテラル構文にわたる引数
     */
    (renderer: UnknownFunction, ...args: unknown[]): unknown;
    /**
     * @en Add Hooks feature to template literal syntax. (specify a DOM disconnect detection element)
     * @ja テンプレートリテラル構文に Hooks 機能を付加 (DOM 切断検知要素を指定)
     *
     * @example <br>
     *
     * ```ts
     * const el = document.getElementById('some-page');
     * // enabling hooks with root element
     * render(hooks.with(el, App), document.body);
     * ```
     *
     * @param elRoot
     *  - `en` Root element used for DOM disconnection detection. If `null` passed, `document` is specified
     *  - `ja` DOM 切断検知に使用するルート要素. `null` が渡ると `document` が指定される
     * @param renderer
     *  - `en` A function object that returns a template literal syntax
     *  - `ja` テンプレートリテラル構文を返却する関数オブジェクト
     * @param args
     *  - `en` Arguments passed template literal syntax
     *  - `ja` テンプレートリテラル構文にわたる引数
     */
    with: (elRoot: Node | null, renderer: UnknownFunction, ...args: unknown[]) => unknown;
    /**
     * @en Return a stateful value and a function to update it.
     * @ja ステートフルな値と、それを更新するための関数を返却
     *
     * @param initialState
     *  - `en` The value you want the state to be initially.
     *  - `ja` 状態の初期化値
     * @returns
     *  - `en` returns an array with exactly two values. [`currentState`, `updateFunction`]
     *  - `ja` 2つの値を持つ配列を返却 [`currentState`, `updateFunction`]
     */
    useState: <T>(initialState?: T) => readonly [
        T extends ((...args: unknown[]) => infer R) ? R : T,
        HookStateUpdater<T extends ((...args: unknown[]) => infer S) ? S : T>
    ];
    /**
     * @en Accepts a function that contains imperative, possibly effectful code.
     * @ja 副作用を有する可能性のある命令型のコードの適用
     *
     * @param effect
     *  - `en` callback function that runs each time dependencies change
     *  - `ja` 依存関係が変更されるたびに実行されるコールバック関数
     * @param dependencies
     *  - `en` list of dependencies to the effect
     *  - `ja` 副作用発火のトリガーとなる依存関係のリスト
     */
    useEffect: (effect: () => void, dependencies?: unknown[]) => void;
    /**
     * @en Accepts a function that contains imperative, possibly effectful code.

     *     Unlike {@link Hooks.useEffect} , it is executed before the component is rendered and the new element is displayed on the screen.
     * @ja 副作用を有する可能性のある命令型のコードの適用

     *     {@link Hooks.useEffect} と異なり, コンポー�


	unknownFields protoimpl.UnknownFields

	// A list of virtual machines.
	AppWorkloads []*AppWorkload `protobuf:"bytes,1,rep,name=app_workloads,json=appWorkloads,proto3" json:"app_workloads,omitempty"`
}

func (x *ListAppWorkloadsResponse) Reset() {
	*x = ListAppWorkloadsResponse{}
	if protoimpl.UnsafeEnabled {
		mi := &file_resource_v2_app_workload_service_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *ListAppWorkloadsResponse) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*ListAppWorkloadsResponse) ProtoMessage() {}

func (x *ListAppWorkloadsResponse) ProtoReflect() protoreflect.Message {
	mi := &file_resource_v2_app_workload_service_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use ListAppWorkloadsResponse.ProtoReflect.Descriptor instead.
func (*ListAppWorkloadsResponse) Descriptor() ([]byte, []int) {
	return file_resource_v2_app_workload_service_proto_rawDescGZIP(), []int{1}
}

func (x *ListAppWorkloadsResponse) GetAppWorkloads() []*AppWorkload {
	if x != nil {
		return x.AppWorkloads
	}
	return nil
}

var File_resource_v2_app_workload_service_proto protoreflect.FileDescriptor

var file_resource_v2_app_workload_service_proto_rawDesc = []byte{
	0x0a, 0x26, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x70,
	0x70, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69,
	0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
	0x63, 0x65, 0x2e, 0x76, 0x32, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64,
	0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61,
	0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65,
	0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74,
	0x6f, 0x1a, 0x27, 0x72, 0x65, 0x73, 0x6f


 + gradients3D[i + 1] * dy + gradients3D[i + 2] * dz;

				attn *= attn;
				value += attn * attn * valuePart;
			}

			c = c.next;
		}
		return value;
	}

	private double extrapolate2D(int xsb, int ysb, double dx, double dy)
	{
		int index = perm2D[(perm[xsb & 0xFF] + ysb) & 0xFF];
		return gradients2D[index] * dx + gradients2D[index + 1] * dy;
	}

	private static int fastFloor(double x) {
		int xi = (int)x;
		return x < xi ? xi - 1 : xi;
	}

	private static Contribution3[] lookup3D;

	static {
		int[][] base3D = new int[][] {
			new int[] { 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1 },
			new int[] { 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1, 3, 1, 1, 1 },
			new int[] { 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 0, 2, 1, 0, 1, 2, 0, 1, 1 }
		};
		int[] p3D = new int[] { 0, 0, 1, -1, 0, 0, 1, 0, -1, 0, 0, -1, 1, 0, 0, 0, 1, -1, 0, 0, -1, 0, 1, 0, 0, -1, 1, 0, 2, 1, 1, 0, 1, 1, 1, -1, 0, 2, 1, 0, 1, 1, 1, -1, 1, 0, 2, 0, 1, 1, 1, -1, 1, 1, 1, 3, 2, 1, 0, 3, 1, 2, 0, 1, 3, 2, 0, 1, 3, 1, 0, 2, 1, 3, 0, 2, 1, 3, 0, 1, 2, 1, 1, 1, 0, 0, 2, 2, 0, 0, 1, 1, 0, 1, 0, 2, 0, 2, 0, 1, 1, 0, 0, 1, 2, 0, 0, 2, 2, 0, 0, 0, 0, 1, 1, -1, 1, 2, 0, 0, 0, 0, 1, -1, 1, 1, 2, 0, 0, 0, 0, 1, 1, 1, -1, 2, 3, 1, 1, 1, 2, 0, 0, 2, 2, 3, 1, 1, 1, 2, 2, 0, 0, 2, 3, 1, 1, 1, 2, 0, 2, 0, 2, 1, 1, -1, 1, 2, 0, 0, 2, 2, 1, 1, -1, 1, 2, 2, 0, 0, 2, 1, -1, 1, 1, 2, 0, 0, 2, 2, 1, -1, 1, 1, 2, 0, 2, 0, 2, 1, 1, 1, -1, 2, 2, 0, 0, 2, 1, 1, 1, -1, 2, 0, 2, 0 };
		int[] lookupPairs3D = new int[] { 0, 2, 1, 1, 2, 2, 5, 1, 6, 0, 7, 0, 32, 2, 34, 2, 129, 1, 133, 1, 160, 5, 161, 5, 518, 0, 519, 0, 546, 4, 550, 4, 645, 3, 647, 3, 672, 5, 673, 5, 674, 4, 677, 3, 678, 4, 679, 3, 680, 13, 681, 13, 682, 12, 685, 14, 686, 12, 687, 14, 712, 20, 714, 18, 809, 21, 813, 23, 840, 20, 841, 21, 1198, 19, 1199, 22, 1226, 18, 1230, 19, 1325, 23, 1327, 22, 1352, 15, 1353, 17, 1354, 15, 1357, 17, 1358, 16, 1359, 16, 1360, 11, 1361, 10, 1362, 11, 1365, 10, 1366, 9, 1367, 9, 1392, 11, 1394, 11, 1489, 10, 1493, 10, 1520, 8, 1521


(<MemoryRouter><App /></MemoryRouter>); });
  await act(async () => { fireEvent.click(screen.getByText(/Transfer Stock/i)); });

  expect(fetchMock.calls('/api/stock/transfer').length).toBe(1);
  expect(screen.getByText(/Stock transferred. Updated Stock: 70/i)).toBeInTheDocument();
}, 10000);

test('Shows error message on failure when transferring stock', async () => {
  fetchMock.post('/api/stock/transfer', 500);

  await act(async () => { render(<MemoryRouter><App /></MemoryRouter>); });
  await act(async () => { fireEvent.click(screen.getByText(/Transfer Stock/i)); });

  expect(fetchMock.calls('/api/stock/transfer').length).toBe(1);
  expect(screen.getByText(/Error transferring stock/i)).toBeInTheDocument();
}, 10000);
import React from 'react';
import { render, screen, act, fireEvent } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import fetchMock from 'fetch-mock';
import '@testing-library/jest-dom';
import App from './editSupplierDetails_filterProductsByCategory_setReorderLevel';

afterEach(() => {
  fetchMock.reset();
  fetchMock.restore();
});

test('Successfully edits supplier details.', async () => {
  fetchMock.put('/api/suppliers/1', { status: 200, body: { id: 1, name: 'Updated Supplier' } });

  await act(async () => { render(<MemoryRouter><App /></MemoryRouter>); });

  await act(async () => { fireEvent.change(screen.getByTestId('edit-supplier-name'), { target: { value: 'Updated Supplier' } }); });
  await act(async () => { fireEvent.click(screen.getByTestId('edit-supplier-button')); });

  expect(fetchMock.called('/api/suppliers/1')).toBe(true);
  expect(screen.getByText('Updated Supplier')).toBeInTheDocument();
}, 10000);

test('Fails to edit supplier details with server error.', async () => {
  fetchMock.put('/api/suppliers/1', { status: 500 });

  await act(async () => { render(<MemoryRouter><App /></MemoryRouter>); });

  await act(async () => { fireEvent.change(screen.getByTestId('edit-supplier-name'), { target: { value: 'Updated Supplier' } }); });
  await act(async () => { fireEvent.click(screen.getByTestId('edit-supplier-button')); });

  expect(fetchMock.called('/api/suppliers/1')).toBe(true);
  expect(screen.getByText('Failed to update supplier')).toBeInTheDocument();
}, 10000);

test('Filtering products by category shows only relevant products.', async () => {
  fetchMock.get('/products?category=Category1', { products: [{ id: 1, category: 'Category1', name: 'Product1' }] });

  await act(async () => { render(<MemoryRouter><App /></MemoryRouter>); });
  await act(async () => { fireEvent.change(screen.getByLabelText(/filter by category/i), { target: { value: 'Category1' }}); });
  await act(async () => { fireEvent.click(screen.getByText(/filter/i)); });

  expect(fetchMock.calls('/products?category=Category1')).toHaveLength(1);
  expect(screen.getByText(/product1/i)).toBeInTheDocument();
}, 10000);

test('Filtering products by category shows a message if no products are found.', async () => {
  fetchMock.get('/products?category=NoCategory', { products: [] });

  await act(async () => { render(<MemoryRouter><App /></MemoryRouter>); });
  await act(async () => { fireEvent.change(screen.getByLabelText(/filter by category/i), { target: { value: 'NoCategory' }}); });
  awa


nalgOpInfo, targetMLTransInfo);
  distConfig.maxTileSizes.append(numLoops, clDefaultDistTileSize);
  SmallVector<int64_t> distTileSizes =
      getDefaultDistributedLevelTileSizes(genericOp, distConfig);

  // TODO(dcaballe): The logic below is disconnected from the main tile size
  // selection logic in getMaxTileSize. We should either port it there or remove
  // it.
  // Adjust the number of workload per workgroup to at least 4096. This
  // prevents the runtime overheads domiating the execution time. The number is
  // derived from experimients. We should be able to make it related to target.
  constexpr int64_t kMinimumWorkload = 4096;
  auto shape = genericOp.getStaticLoopRanges();
  int64_t numWorkload = 1;
  for (const auto &[index, size] : llvm::enumerate(shape)) {
    if (ShapedType::isDynamic(size)) {
      numWorkload = ShapedType::kDynamic;
      break;
    }
    numWorkload *= distTileSizes[index] ? distTileSizes[index] : size;
  }
  for (unsigned currDim = 0;
       numWorkload < kMinimumWorkload && currDim < numLoops;) {
    int64_t currSize = distTileSizes[currDim];
    if (currSize == shape[currDim] || currSize == 0 ||
        ShapedType::isDynamic(shape[currDim]) ||
        ShapedType::isDynamic(numWorkload)) {
      currDim++;
      continue;
    }
    int64_t newSize = std::min<int64_t>(currSize * 2, shape[currDim]);
    numWorkload = numWorkload / currSize * newSize;
    distTileSizes[currDim] = newSize;
  }

  auto vecPreProcStrategy = getVectorPreProcStrategy(genericOp);
  LDBG() << "Vector pre-processing strategy: " << vecPreProcStrategy;

  // Adjust tiling sizes of vector levels to avoid large unroll factors. Most of
  // the cases are f32 and i32, so we divide it by 4.
  int64_t vecSize = getNativeVectorSizeInBytes(entryPointFn) / 4;
  SmallVector<int64_t> vecTileSizes = distConfig.minTileSizes;
  for (auto &i : vecTileSizes) {
    i = roundUpToPow2(std::min(i, vecSize),
                      vecPreProcStrategy == VectorPreProcStrategy::Masking);
  }

  LoweringConfigGenerator generator(genericOp);
  generator.setDistributionTileSizes(distTileSizes);
  generator.setVectorTileSizes(vecTileSizes);
  IREE::CPU::LoweringConfigAttr loweringConfig =
      generator.generateCPULoweringConfig();
  LDBG() << "Set lowering_config for element-wise op: " << loweringConfig;

  DispatchLoweringPassPipeline passPipeline;
  DictionaryAttr pipelineConfig;
  if (genericOp.hasPureBufferSemantics()) {
    passPipeline = DispatchLoweringPassPipeline::CPUBufferOpsTileAndVectorize;
  } else {
    passPipeline = DispatchLoweringPassPipeline::CPUDoubleTilingExpert;
  }

  if (vecPreProcStrategy == VectorPreProcStrategy::Peeling) {
    pipelineConfig = getPipelineConfWithPeelingAttr(genericOp.getContext());
  }

  return setOpConfigAndEntryPointFnTranslation(
      entryPointFn, genericOp, loweringConfig, passPipeline,
      /*workgroupSize=*/{},
      /*subgroupSize=*/{}, pipelineConfig);
}

/// Sets the lowering configuration for a generic op to use
/// CPUDoubleTilingExpert pipeline.
static LogicalResult
setGenericRootConfig(mlir::FunctionOpInterface entryPointFn,
                     linalg::GenericOp genericOp,
                     const LinalgOpInfo &linalgOpInfo,
                     const TargetMLTransformInfo &targetMLTransInfo) {
  assert(!getLoweringConfig(genericOp) &&
         "expected lowering_config is not set");

  if (succeeded(setTransposeLikeOpRootConfig(
          entryPointFn, genericOp, linalgOpInfo,


'>
824

1

        let file_path = file.path().to_str().unwrap();

825

1

        let coverage = collector.coverage_data.get(file_path).unwrap();

826

1

        assert_eq!(coverage.total_functions, 3);

827

828

        // Should mark test functions as covered

829

1

        assert!(coverage.covered_functions.contains("test_something"));

830

1

        assert!(coverage.covered_functions.contains("test_helper"));

831

1

        assert!(!coverage.covered_functions.contains("regular_function"));

832

1

    }

833

834

    #[test]

835

1

    fn test_analyze_mixed_content() {

836

1

        let mut collector = RuchyCoverageCollector::new();
<


 = 'none';
		clearBtn.style.display = 'block';
	}
};

function reset(e) {
	e.preventDefault();
	//clear local storage for region only
	localStorage.removeItem('regionName');
	init();
}

```
इस फ़ंक्शन में, कुछ दिलचस्प तर्क है। इसके माध्यम से पढ़ना, क्या आप देख सकते हैं कि क्या होता है?

- यदि उपयोगकर्ता ने APIKey और क्षेत्र कोड को स्थानीय संग्रहण में संग्रहीत किया है, तो यह जांचने के लिए दो `const` लगाए गए हैं।
- यदि उनमें से कोई भी नल है, तो अपनी शैली को 'ब्लॉक' के रूप में प्रदर्शित करने के लिए रूप बदलकर दिखाएं
- रिजल्ट, लोडिंग और clearBtn को छिपाएं और किसी भी एरर टेक्स्ट को खाली स्ट्रिंग पर सेट करें
- यदि कोई की और क्षेत्र मौजूद है, तो एक दिनचर्या शुरू करें:
  - कार्बन उपयोग डेटा प्राप्त करने के लिए एपीआई को कॉल करें
  - परिणाम क्षेत्र छिपाएँ
  - फॉर्म को छिपाएं
  - रीसेट बटन दिखाएं

आगे बढ़ने से पहले, ब्राउज़रों में उपलब्ध एक बहुत ही महत्वपूर्ण अवधारणा के बारे में सीखना उपयोगी है: [लोकलस्टोरेज](https://developer.mozilla.org/docs/Web/API/Window/localStorage).लोकलस्टोरेज, ब्राउज़र में स्ट्रिंगस को 'की-वैल्यू' पेयर के रूप में स्टोर करने का एक उपयोगी तरीका है। इस प्रकार के वेब स्टोरेज को ब्र


 : LbEncapType,
	pub dscp : u8,
	pub typ : LbSrvType,
	pub target_port : u16,
	pub node_port : u16,
	pub new_flows_table_length : u32,
	pub is_del : bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_add_del_vip_reply_e8d4e804)]
pub struct LbAddDelVipReply {
	pub context : u32,
	pub retval : i32,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_add_del_as_35d72500)]
pub struct LbAddDelAs {
	pub client_index : u32,
	pub context : u32,
	pub pfx : AddressWithPrefix,
	pub protocol : u8,
	pub port : u16,
	pub as_address : Address,
	pub is_del : bool,
	pub is_flush : bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_add_del_as_reply_e8d4e804)]
pub struct LbAddDelAsReply {
	pub context : u32,
	pub retval : i32,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_flush_vip_1063f819)]
pub struct LbFlushVip {
	pub client_index : u32,
	pub context : u32,
	pub pfx : AddressWithPrefix,
	pub protocol : u8,
	pub port : u16,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_flush_vip_reply_e8d4e804)]
pub struct LbFlushVipReply {
	pub context : u32,
	pub retval : i32,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_vip_dump_56110cb7)]
pub struct LbVipDump {
	pub client_index : u32,
	pub context : u32,
	pub pfx : AddressWithPrefix,
	pub pfx_matcher : PrefixMatcher,
	pub protocol : u8,
	pub port : u16,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_vip_details_1329ec9b)]
pub struct LbVipDetails {
	pub context : u32,
	pub vip : LbVip,
	pub encap : LbEncapType,
	pub dscp : IpDscp,
	pub srv_type : LbSrvType,
	pub target_port : u16,
	pub flow_table_length : u16,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_as_dump_1063f819)]
pub struct LbAsDump {
	pub client_index : u32,
	pub context : u32,
	pub pfx : AddressWithPrefix,
	pub protocol : u8,
	pub port : u16,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_and_crc(lb_as_details_8d24c29e)]
pub struct LbAsDetails {
	pub context : u32,
	pub vip : LbVip,
	pub app_srv : Address,
	pub flags : u8,
	pub in_use_since : u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, VppMessage)]
#[message_name_


 == 0)
		return Runtime.CopyString(_T(""));
	std::string username;
	j["response"]["users"][index]["username"].get_to(username);
	return Runtime.CopyString(DarkEdif::UTF8ToTString(username).c_str());
}

int Extension::Exp_FetchedUserID(int index)
{
	if (LatestResponse->Type != FetchUsers)
		return 0;
	nlohmann::json j = LatestResponse->GetResponseJson(this);
	if (!j["response"]["users"].is_array() || j["response"]["users"].size() == 0)
		return 0;
	std::string id;
	j["response"]["users"][index]["id"].get_to(id);
	return stoi(id);
}

const TCHAR* Extension::Exp_FetchedUserDescription(int index)
{
	if (LatestResponse->Type != FetchUsers)
		return Runtime.CopyString(_T(""));
	nlohmann::json j = LatestResponse->GetResponseJson(this);
	if (!j["response"]["users"].is_array() || j["response"]["users"].size() == 0)
		return Runtime.CopyString(_T(""));
	std::string desc;
	j["response"]["users"][index]["developer_description"].get_to(desc);
	return Runtime.CopyString(DarkEdif::UTF8ToTString(desc).c_str());
}

const TCHAR* Extension::Exp_FetchedUserAvatar(int index, int resolution)
{
	if (LatestResponse->Type != FetchUsers)
		return Runtime.CopyString(_T(""));
	nlohmann::json j = LatestResponse->GetResponseJson(this);
	if (!j["response"]["users"].is_array() || j["response"]["users"].size() == 0)
		return Runtime.CopyString(_T(""));
	std::string avatar;
	j["response"]["users"][index]["avatar_url"].get_to(avatar);
	std::tstring avatarOut = _T("https://m.gjcdn.net/user-avatar/") + std::to_tstring(resolution) + DarkEdif::UTF8ToTString(avatar.substr(34, avatar.length() - 38)) + _T(".png");
	return Runtime.CopyString(avatarOut.c_str());
}

const TCHAR* Extension::Exp_FetchedUserWebsite(int index)
{
	if (LatestResponse->Type != FetchUsers)
		return Runtime.CopyString(_T(""));
	nlohmann::json j = LatestResponse->GetResponseJson(this);
	if (!j["response"]["users"].is_array() || j["response"]["users"].size() == 0)
		return Runtime.CopyString(_T(""));
	std::string website;
	j["response"]["users"][index]["developer_website"].get_to(website);
	return Runtime.CopyString(DarkEdif::UTF8ToTString(website).c_str());
}

const TCHAR* Extension::Exp_FetchedUserStatus(int index)
{
	if (LatestResponse->Type != FetchUsers)
		return Runtime.CopyString(_T(""));
	nlohmann::json j = LatestResponse->GetResponseJson(this);
	if (!j["response"]["users"].is_array() || j["response"]["users"].size() == 0)
		return Runtime.CopyString(_T(""));
	std::string status;
	j["response"]["users"][index]["status"].get_to(status);
	return Runtime.CopyString(DarkEdif::UTF8ToTString(status).c_str());
}

const TCHAR* Extension::Exp_FetchedUserType(int index)
{
	if (LatestResponse->Type != FetchUsers)
		return Runtime.CopyString(_T(""));
	nlohmann::json j = LatestResponse->GetResponseJson(this);
	if (!j["response"]["users"].is_array() || j[


IDIA") then
			infologFile:close()
			self.isNotRunningNvidia = false
			return false
		end
		line = infologFile:read()
	end
	infologFile:close()
	self.isNotRunningNvidia = true
	return true
end

---------------------------------------------------------------------------------
-- Listener handler
---------------------------------------------------------------------------------
local function ShallowCopy(orig)
	local orig_type = type(orig)
	local copy
	if orig_type == 'table' then
		copy = {}
		for orig_key, orig_value in pairs(orig) do
			copy[orig_key] = orig_value
		end
	else -- number, string, boolean, etc
		copy = orig
	end
	return copy
end

function Configuration:AddListener(event, listener)
	if listener == nil then
		Log.Error("Event: " .. tostring(event) .. ", listener cannot be nil")
		return
	end
	local eventListeners = self.listeners[event]
	if eventListeners == nil then
		eventListeners = {}
		self.listeners[event] = eventListeners
	end
	table.insert(eventListeners, listener)
end

function Configuration:RemoveListener(event, listener)
	if self


xea\x04\xdb\xb1\x1d\
'\x8es\x1d\xdf\xf7\xbd3sgf/\xd6^\x8f\xbd\
\xf7\x19\x1b\xf5\x1f\xb8G\x1e\xcf\xcc\x99s\xf6\xe3\xdb\xdf\
\xfa\xd6c\x9f\x0b\xb0v\xac\x1dk\xc7\xda\xb1v\xac\x1d\
k\xc7\xda\xb1v\xac\x1d\x1790\xfe\xb7\xe7\xef\xdf\x9c\
\x22h\xde\xdf@\xbc\x8e\x88&\x01\x91\xdf(\xfe\x88~\
!\xf1\xbf\xf4\x9d\x7f\x07\x22\xbc\xe0\xbc}\x87\xa0\xa7B\
l$\x9e\x8b\xdfI\x7f\x8b\x9f\xe5\xb4|\xc9\xd7s\x83\
\xb1I\xfbO\xcf\x05?)\xef\xa0\xd7\x04\xeb\x93\xbf\x87\
\xd4\x8e\xfe,\xed\x06\x1b\x97\xb6/\x17H\x9f\xc1\xc6G\
zzpL@\xe9\xf7\xf8\xf1@\x07\x87~\x03~\xef\
\xf2S\xb8\xe7\xa17\xa7p\xb4z6\x00\x8d#\x22\xc8\
\xc4\x0b\x00\xe29\xe9\xb88W\x02S\x02D6\xd8<\
h\x9b\xbc\x81a\xa3\xcb\x03%\x1b\xa4^\xcb\x93\x93[\
\xe3\xe0\xf5\xbb_\xef\xd7\x14m\xd4\xc0\x8d\xad\x04\x1eK\
\xa0\x04\x96\x02k\x9fC\x90\xf1\x05\x03W;\xd1\xbeC\
\xb9X\x09U\x8c\x0b1\xd7\xc5\xd6\x0d\x15\x8d6\xee\xe3\
\xb3\x13i\x86N-\xf4\xb1gP\x06\xa8\x97\x01\xf4\x9e\
}@\xdaTl\x00C1X\xc73\xe8D\xb4\x89\x8b\
\x80`\x93\x10\xe6P\x8d\x11y2\xf2!\xd8\xc2\xf4\xfd\
\x9a\x1a\x93\xac\xc9 \xeb(,*\x16,6\x22\xa3\x96\
6\x0a\xd0\xfd7\x82\xf1*\x8c\xdc_1]\xf6\x0dN\
\x9e\x1c(\xc4\xf2\xe4\x05&\xa5\x1d\x86L_Y-\x06\
\xc0z\x94\xf3\x8a\x98\x8c<\xd8J\x96\x80\x94\xab\x98&\
\xa9\xb3\x04]\xca:pi\xa2d\xa6\x0b\x05;\x15\x94\
d\xc2\xe9~p3\xd5{\x9d\xb9\x90\xfb\xc9\x0c\x15\xa6\
\xe9j\xf2\xdb\xf5\xd5\xa0\xe9\x94\xec\x184\xb7<\x8d<\
\xbf\xfc\xc1\xfa\xb4\x89\x85b@B\xff\x82\xee~\x9f\x01\
\x895\xf6\x09\x00q\xc5\xd3\xe4\x0c\xc4\xa4G\xd9L\xbd\
=\xc3G(\x1a\x02d\xc6\xd5Xg,VS4 \
r;T\x07\xd6to\xa2\x1a\x04!}\xb6w\xd3\x99\
\x0c\x5c\x9e\x0c$\xd3I\xe7\xdc\xaem2:V\x0c\x89\
\xfb\xc1Q\xf4I\xea\x84}\xa0f\x86I@\xa9\x98\x08\
\xa5E\xd3\x09\x84R\xcf\x5c\xc3l\xa1t\x00&\xfa\xd6\
G2[\x1a\xd0?g\x8f\x08-\xb8\x8e\xd9\x8aS\x05\
\x83\x87\x03E\xd9\xae\xf3O\x89E\xa8\xf4\xa6BP\xb3\
\x09\x08\xca\xc5\x04\x95\xeab\x9c\xe4&T\xd0:1C\
5Kt\x22\xf5\x8553\xc8\xcc#o\x17\xcc\xb3\xa9\
\xa6\xd9\xc4\xfd\xfe\xa4E\xea\xc9\x12P\xd6\x9f\x8f\x1d\xc0\
\xee)\xe6\x1a\xe4f\xacj\xa0`v\xb3\xee\xa1\x9c9\
\x05\x10u7m\x0b\xca\xd4F\xa1]\xd0\x8b(iB\
!\xd2\xda\xb62\xc6\xd9\x9cu\x84\xea\xdf\xc9\xd8g\xb7\
Q\xd6\x91\x0cx\xd6\x0e\xbb\x19\xd5\xec i\x0dy\x88\
`\xe0jc\x98\xbd\xab/.\xa13I\xbec\x84\x80\
A\xaa\x1c\x8c\x12\xa82\xae1\x91\x85\xdc\x18y,\xe2\
\x86/\xe0\xe8bQ6\x93Dmo\x00\xca9\xd9\x05\
\x08\x83\xf1\x8b\x22\xa5?C\xcd\x1c\x10.\x08\x0b28\
\x85>\x05\xd30\x05\x07\xcdk\xda\x5c\xa2\xab\xd7sy\
\x91\xe5^\x97\x05\xd4E\x8a~,\xb2\x13\xab\x1a\x186\
\x0f4m\xb0\x95\xa4d\xf3\xc9\x92\x8a\x95N^%S\
\xd8\xdd\xbe\xf1W\xddz\xbe\xc6t(6\x99'\x05\xbe\
\x82z]\xa1K\xce\x8eA\xed\xa0,S\xa5\x0b\xd71\
g\xafUc\xbb\xce.\xe8\xa4P\xb0\x04*<f\xea\
LL!6Qg\x10\x9fFk\xdc\xe3\x14\xf5&\x06\
N\xb2'\x03*\x05\x81\x85\x99\x84R\x03\xa04\x83\xd2\
K\x80Xb(\xf4\x08l\xc2\xfd\xec1\xcd\x14\xf3$\
\x9d\xb4\x06\x88-N\xb6\xcf\xc4\x1c\xffB\x85y&\xfa\
\xa2\x9b\x129\x9az#\xb8\x0e\xa5\xc0(jP\xdd\x9c\
\xc8\xbd\x83y._%\xc5\x0d]D\xcd\x96K\xea\x0e\
\x82\x90\x16\xc3p\x10\xde\xa7p_'\x1e\xea\x02\x9dM\
\xc8&\x9f\xda\xce:\x96c oGX\xec\xdf\x03\xec\
\xdcX\xc1go\xdd\x08#\xd0\x83\x83\xc7Z\xf0\xe0+\
\xbdb\x9cY\xaf\x5c\xb3dd\x1a\x87@\x01\x12\xfaJ\
V\x19\x9bz\x03J\x90lwj\xa7\x03\x0cb\xca\xa9\
\xb9\x16\x13#\x19p2;\xbf\xb7\xef\x0e\xc3\xf2\xb4\xbc\
\x826\xcf\xba\xdb\xad\x85\x0f\xda\x8f\xaf\x96\x9b}\x8a\x89\
\x92p\xef\x1a\xab\xe0\xf1;\xb6\xc3\xae\xf1\x0aVW{\
p\xcb\x8ea\xf8\xa1\xf1\x05\xf8\xddgV#\x08X7\
5iW\x06+\xab\x81\x06\x8a\x0ab2\xb7*\xd1;\
\xe4\x15I\xde1\x07W@\x85\xeb5\x8a\xbb'\xa9\x09\
gJ\xfc,n)\xc3\x00H\xf9\x91\x0a{\xbc\x04\xcd\
\x5cd\x1d\x93\xf6`\x8d\x85\x83\x01\x1e\xe8\x22d\xd6\xf3\
\xf7\x9dc\x15\x1d\xfc\x85\x1dx\xf9%#r\x7f\xb3\xd9\
\x944\xe8\x17\xaf\x07xci\x0e\xbf\xf0l\xcbl\x1e\
\x13\xb5U\x0b\x048\x9b\x5c\xd0\x85J\x13`\x80D\xb0\
.\x5cA\xd5\x86l\x0e@\x05\xf5K-)\x98\x00\x04\
\xf5U\xadG\xc7\x00y\x82\x99Y\xc1\xc6R&\x8d\x1a\
\x84`\xcd\xccB\xc1\x1a\xf0f\x82\xe6S\xbb65\xf1\
\xf1\x8fl\xc7\xdd\x13C\xaa!\xa89\xe2\xe8\xe8\x10_\
\xb5\x11~\xfbV\xbe\xbf\xdf\x87/~o9.\x892\
\x04\x1b\xe0\x8b\xac!\x8dN\x98\x92\xb9)C*pw\
\xea\xe2B9\xc4\xb0\x952\xcd\xc2\xe4A,\xe0\xcb\x22\
\x08n\xb7\xd9\x5c(\xb7\xe9\xa2\x8d&\xce\xee\x0e\xcb\xd8\
J\x19\x1bY\x85\x98\x22\x83\xfa\x02\x94 \xe7\x98eg\
\x04\x87\xcdj7'\x05\xbd^\x1f\xfa\xecA\xb9l\xc3\
\x0cj\x08\x8bFF\x86`\xd3\xa6\x0d\xf0;{\xf9\xfa\
\xde*|\xe9{K\xa8qL%HR\xca7\x83\x85\
\x1e`\x8c\x89n>\xf0Un:\xbe\xda\xc9\xb6KQ\
\x11\xea\xa4\xf31 \x1c\x1bB\xf8\x83\x9b'e\xa2\xdf\
}\xb3\x0d\xfb_YN&\x96\x03.\xed\x5c\xd2#\xfe\
~\xeb;G\xe1\xea-#86\xac\xe7_8\xb7\x0a\
\x8f\x1d[\xb6\xfa\x91\x85K\xc1M($\x13\x85z\x5c\
\x88\xaa\x1blV\xac5\x07\x05\x9c!\xe8\xb0\xe6t\xda\
\x1d\xe8v


()
//        dictionary.initNgrams()

    loggerln("\rRead %d words\n".format(builder.ntokens))
    loggerln("Number of words:  ${builder.nwords}")
    loggerln("Number of labels: ${builder.nlabels}")

    if (thresholdCount > 0) loggerln("Max threshold count: $lastMinThreshold")

    if (builder.wordIdMap.size == 0) {
        throw RuntimeException("Empty vocabulary. Try a smaller -minCount second.")
    }

    val dict = builder.toDictionary(args)
    loggerln("Number of wordHash2Id: ${dict.onehotMap.wordHash2WordId.size}")
    return dict

}
package com.mayabot.nlp.fasttext.loss

import com.mayabot.nlp.blas.Matrix
import com.mayabot.nlp.common.IntArrayList
import com.mayabot.nlp.fasttext.Model
import kotlin.random.Random

class NegativeSamplingLoss(wo: Matrix, val neg: Int, targetCounts: LongArray) : BinaryLogisticLoss(wo) {
    companion object {
        const val NEGATIVE_TABLE_SIZE = 10000000
    }

    val negatives = IntArrayList()

    val uniform: (random: Random) -> Int

    init {
        var z = 0.0
        for (i in 0 until targetCounts.size) {
            z += Math.pow(targetCounts[i].toDouble(), 0.5)
        }

        for (i in 0 until targetCounts.size) {
            val c = Math.pow(targetCounts[i].toDouble(), 0.5)
            for (j in 0 until (c * NEGATIVE_TABLE_SIZE / z).toInt()) {
                negatives.add(i)
            }
        }
        val ns = negatives.size()
        //uniform_ = std::uniform_int_distribution<size_t>(0, negatives_.size());
        uniform = { random -> random.nextInt(ns) }
    }

    override fun forward(targets: IntArrayList, targetIndex: Int, state: Model.State, lr: Float, backprop: Boolean): Float {
        val target = targets[targetIndex]
        var loss = binaryLogistic(target, state, true, lr, backprop)
        for (n in 0 until neg) {
            var negativeTarget = getNegative(target, state.rng)
            loss += binaryLogistic(negativeTarget, state, false, lr, backprop)
        }
        return loss
    }

    private fun getNegative(target: Int, rng: Random): Int {
        var negative = -1
        do {
            negative = negatives[uniform(rng)]
        } while (target == negative)
        return negative
    }

}
package com.mayabot.nlp.module.lucene

import com.mayabot.nlp.module.pinyin.PinyinService
import com.mayabot.nlp.module.pinyin.model.PinyinFuzzy.fuzzy2
import com.mayabot.nlp.module.pinyin.model.SimplePinyin
import org.apache.lucene.analysis.TokenStream

class PinyinTokenizerFilter(
    input: TokenStream,
    private val includeSelf: Boolean,
    private val fuzzy: Boolean,
    private val head: Boolean,
    private val pinyinService: PinyinService
) : BaseSynTokenFilter(input) {

    companion object {
        private val chaMap = mapOf<Char, String>(
            '一' to "1",
            '二' to "2",
            '三' to "3",
            '四' to "4",
            '五' to "5",
            '六' to "6",
            '七' to "7",
            '八' to "8",
            '九' to "9",
        )
    }

    override fun extend(item: CharSequence): List<String> {
        if (item.isEmpt


һѡҪĸԼʽȻDMҲԾضʽʺضƷħԣ磬ҪһӪԣʥԣͨҪʽÿһʽ˼ַƷDMַʽԼʽ
ΪͬһƷɶһֵԼʽʵϣƷԼҲġµԼʽغǰһͬ࣬ÿµʽصȡǰһʽлõЩǿԼר棩磬һʹÿֲʽΪע+1ǿֵ˺ʽΪͬһʥһᱣʽħԣʧȥֲʽõ֮ʽ档

Լʽ

Լʽʽ

ʽｫʽĳз

ǰһָ˽ɫиʽıҪܰСֵҪһĳܵ͵ȼҪСʩߵȼҪרҪ󣨲ƷרҪһЩǰ᲻㣬һʽҪǰᡣ

иʽɵдһĿ¡еƷ磬һɣָͲˡһսۣΪߵһ֣ҵȤͶս۵ͶС

ʽһԼʽԼĽҺ;Ҳʽһ֡

һԼʽõĻгһýɫЯԼƷʱЧ

ǿԼһ˾ǿԼרĽɫõ档ЩýɫЯԼƷԷǿԼרǰʱЧ

Ʒһָĺ͸ʽһʽƷ͡

Ѫ֮ʽ

ͨѡǿĵԼ

ǰֵ+3

øɱĳսȼȼٸ2Ļ֣ˣħޣ˹ǳࡣ

ʽһСʱڣ뻨15һԱսܵ˻¾ʽһʽҪѪҺƵҺͿԼϡ

սܵͬʱͱߵص֪ʶ춨ʱ+2ֲֵ78ҳ֪ʶܣ磬ڽѪ֮ʽʱɱһͷʹص֪ʶ춨ʱ+2ֵ

ǿԼڹ뱻ͬʱɵ˺+4ֵ

Ʒһʽκϡ

ֲʽ

ͨսʤܵĶȡЧĿ־壬ѡԼ

ǰ6

ѡɱĳһȡ⹥ѪսȼҪȼ2

ʽһڣ뻨һֶɢĸϡ⽫һȼҳ24Сʱøȼ24СʱڱƳʽԶʧܡڵȴ


 exec.CommandContext(ctx, "mysqlsh", args...)
	c.Stdout = &stdoutb
	c.Stderr = &stderrb

	var result SQLResult

	if err := c.Run(); err != nil {
		return result, errors.Wrapf(err, "run %s, stdout: %s, stderr: %s", cmd, stdoutb.String(), stderrb.String())
	}

	if err := json.Unmarshal(stdoutb.Bytes(), &result); err != nil {
		return result, errors.Wrapf(err, "unmarshal result %s", stdoutb.String())
	}

	if len(result.Error) > 0 {
		return result, errors.New(result.Error)
	}

	return result, nil
}

func (m *mysqlsh) getGTIDExecuted(ctx context.Context) (string, error) {
	result, err := m.runSQL(ctx, "SELECT @@GTID_EXECUTED")
	if err != nil {
		return "", err
	}

	v, ok := result.Rows[0]["@@GTID_EXECUTED"]
	if !ok {
		return "", errors.Errorf("unexpected output: %+v", result)
	}

	return v, nil
}

func (m *mysqlsh) getGTIDPurged(ctx context.Context) (string, error) {
	result, err := m.runSQL(ctx, "SELECT @@GTID_PURGED")
	if err != nil {
		return "", err
	}

	v, ok := result.Rows[0]["@@GTID_PURGED"]
	if !ok {
		return "", errors.Errorf("unexpected output: %+v", result)
	}

	return v, nil
}

func (m *mysqlsh) getGroupSeeds(ctx context.Context) (string, error) {
	result, err := m.runSQL(ctx, "SELECT @@group_replication_group_seeds")
	if err != nil {
		return "", err
	}

	v, ok := result.Rows[0]["@@group_replication_group_seeds"]
	if !ok {
		return "", errors.Errorf("unexpected output: %+v", result)
	}

	return v, nil
}

func (m *mysqlsh) setGroupSeeds(ctx context.Context, seeds string) error {
	sql := fmt.Sprintf("SET PERSIST group_replication_group_seeds = '%s'", seeds)

	_, err := m.runSQL(ctx, sql)
	if err != nil {
		return err
	}

	return nil
}

func updateGroupPeers(ctx context.Context, peers sets.Set[string], version *v.Version) error {
	log.Printf("Updating group seeds in peers: %v", peers)

	seedList := make([]string, 0)
	for _, peer := range peers.UnsortedList() {
		seedList = append(seedList, fmt.Sprintf("%s:%d", peer, 3306))
	}

	slices.SortFunc(seedList, func(a, b string) int {
		return strings.Compare(a, b)
	})

	for _, peer := range peers.UnsortedList() {
		sh := newShell(peer, version)

		log.Printf("Connected to peer %s", peer)

		tmpSeeds := make([]string, 0)
		for _, seed := range seedList {
			// peer shouldn't have its own host as seed
			if seed == fmt.Sprintf("%s:%d", peer, 3306) {
				continue
			}
			tmpSeeds = append(tmpSeeds, seed)
		}

		seeds := strings.Join(tmpSeeds, ",")
		if seeds == "" {
			log.Printf("seeds are empty")
			continue
		}

		if err := sh.setGroupSeeds(ctx, seeds); err != nil {
			log.Printf("ERROR: failed to set @@group_replication_group_seeds in %s: %s", peer, err)
			continue
		}

		log.Printf("Seeds: %s", seeds)
		log.Printf("Updated group_replication_group_seeds in peer %s", peer)
	}

	return nil
}

func (m *m


 FrigateCamera,
    promptConfig: FrigateCameraLLMPromptConfig,
    binarySensorProperty: FrigateCameraLLMPromptPropertyConfig,
    cameraLLMResponse: JsonObject
): Boolean {
    val jsonPrimitive = lossyFindJsonProperty(camera, promptConfig, binarySensorProperty, cameraLLMResponse)
    return lossyParseJsonBooleanValue(camera, promptConfig, binarySensorProperty, jsonPrimitive)
}

internal fun lossyFindJsonProperty(camera: FrigateCamera, promptConfig: FrigateCameraLLMPromptConfig, llmPromptPropertyConfig: FrigateCameraLLMPromptPropertyConfig, cameraLLMResponse: JsonObject): JsonPrimitive {
    val directMatch = cameraLLMResponse[llmPromptPropertyConfig.name]

    if (directMatch != null) {
        return directMatch.jsonPrimitive
    }

    // Sometimes LLM adds spaces between '_' in the property name.
    val lossyMatch = cameraLLMResponse
        .keys
        .singleOrNull { key -> key.lowercase().replace(" ", "") == llmPromptPropertyConfig.name }

    if (lossyMatch != null) {
        return cameraLLMResponse[lossyMatch]!!.jsonPrimitive
    }

    error("lossyFindJsonProperty could not find property '${llmPromptPropertyConfig.name}' in LLM model '${promptConfig.model}' response '$cameraLLMResponse' for camera ${camera.name}")
}

internal fun lossyParseJsonBooleanValue(camera: FrigateCamera, promptConfig: FrigateCameraLLMPromptConfig, booleanProperty: FrigateCameraLLMPromptPropertyConfig, shouldBeBooleanValue: JsonPrimitive): Boolean {
    val actualBoolean = shouldBeBooleanValue.booleanOrNull

    if (actualBoolean != null) {
        return actualBoolean
    }

    if (shouldBeBooleanValue.isString) {
        val string = shouldBeBooleanValue.content.lowercase()

        when (string) {
            "yes", "true", "1" -> return true
            "no", "false", "0" -> return false
        }
    }

    error("lossyParseJsonBooleanValue could not decode LLM model '${promptConfig.model}' response '$shouldBeBooleanValue' as boolean for camera ${camera.name} for property '${booleanProperty.name}'")
}
/*
 * Copyright 2017 Arthur Ivanets, arthur.ivanets.work@gmail.com
 *
 * 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.
 */

@file:JvmName("ArviExtensions")

package com.arthurivanets.arvi.ktx

import android.content.Context
import com.arthurivanets.arvi.PlayerProvider
import com.arthurivanets.arvi.PlayerProviderImpl
import com.arthurivanets.arvi.util.misc.ExoPlayerUtils
import com.google.android.exoplayer2.upstream.cache.Cache

/**
 * Obtains the global [PlayerProvider] instance.
 */
val Context.playerProvider: PlayerProvider
    get() = PlayerProviderImpl.getInstance(this)

/**
 * Creates/obtains the Exo Player [Cache] of the default size [ExoPlayerUtils.DEFAULT_CACHE_SIZE].
 *
 * @return the created/obtains [Cache]
 */
fun Context.defaultExoCache(): Cache {
    return ExoPlayerUtils.getCache(this)
}

/**
 * Creates/obtains the Exo Player [Cache] of the specified size (in bytes).
 *
 * @return the created/obtains [Cache]
 */
fun Context.exoCache(size: Long): Cache {
    return ExoPlayerUtils.getCache(this, size)
}
/*
 * Copyright


五
2274. 李四万七十六
2275. 杨四万七十七
2276. 朱四万七十八
2277. 秦四万七十九
2278. 陈四万八十
2279. 高四万八十一
2280. 林四万八十二
2281. 郭四万八十三
2282. 马四万八十四
2283. 罗四万八十五
2284. 梁四万八十六
2285. 宋四万八十七
2286. 韩四万八十八
2287. 齐四万八十九
2288. 谢四万九十
2289. 唐四万九十一
2290. 赵四万九十二
2291. 刘四万九十三
2292. 黄四万九十四
2293. 董四万九十五
2294. 袁四万九十六
2295. 于四万九十七
2296. 邓四万九十八
2297. 邱四万九十九
2298. 钱五万
2299. 丁五万零一
2300. 任五万零二
2301. 沈五万零三
2302. 伍五万零四
2303. 顾五万零五
2304. 蒋五万零六
2305. 汪五万零七
2306. 田五万零八
2307. 李五万零九
2308. 杨五万一十
2309. 朱五万一十一
2310. 秦五万一十二
2311. 陈五万一十三
2312. 高五万一十四
2313. 林五万一十五
2314. 郭五万一十六
2315. 马五万一十七
2316. 罗五万一十八
2317. 梁五万一十九
2318. 宋五万二十
2319. 韩五万二十一
2320. 齐五万二十二
2321. 谢五万二十三
2322. 唐五万二十四
2323. 赵五万二十五
2324. 刘五万二十六
2325. 黄五万二十七
2326. 董五万二十八
2327. 袁五万二十九
2328. 于五万三十
2329. 邓五万三十一
2330. 邱五万三十二
2331. 钱五万三十三
2332. 丁五万三十四
2333. 任五万三十五
2334. 沈五万三十六
2335. 伍五万三十七
2336. 顾五万三十八
2337. 蒋五万三十九
2338. 汪五万四十
2339. 田五万四十一
2340. 李五万�


() ? SH1_TIO_IOSPACE_ADDR(n,x) :		\
		 SH2_TIO_IOSPACE_ADDR(n,x)))

#define SH_REMOTE_MMR(n,x)						\
	(is_shub1() ? SH1_REMOTE_MMR(n,x) : SH2_REMOTE_MMR(n,x))

#define REMOTE_HUB_ADDR(n,x)						\
	(IS_TIO_NASID(n) ?  ((volatile u64*)TIO_IOSPACE_ADDR(n,x)) :	\
	 ((volatile u64*)SH_REMOTE_MMR(n,x)))

#define HUB_L(x)			(*((volatile typeof(*x) *)x))
#define	HUB_S(x,d)			(*((volatile typeof(*x) *)x) = (d))

#define REMOTE_HUB_L(n, a)		HUB_L(REMOTE_HUB_ADDR((n), (a)))
#define REMOTE_HUB_S(n, a, d)		HUB_S(REMOTE_HUB_ADDR((n), (a)), (d))

/*
 * Coretalk address breakdown
 */
#define CTALK_NASID_SHFT		40
#define CTALK_NASID_MASK		(0x3FFFULL << CTALK_NASID_SHFT)
#define CTALK_CID_SHFT			38
#define CTALK_CID_MASK			(0x3ULL << CTALK_CID_SHFT)
#define CTALK_NODE_OFFSET		0x3FFFFFFFFF

#endif /* _ASM_IA64_SN_ADDRS_H */


s flavors of commit.
     *
	 * @exception  StandardException  Standard exception policy.
	 * @see Transaction#commit
     **/
	private LogInstant prepareCommit(int commitflag)
        throws StandardException
    {
		LogInstant flushTo = null;

		if (state == CLOSED)
        {
			throw StandardException.newException(
                    SQLState.XACT_PROTOCOL_VIOLATION_DETAILED,
                    toInternalDetailString());
        }

		if (SanityManager.DEBUG)
		{
			if ((commitflag & Transaction.KEEP_LOCKS) != 0)
			{
                // RESOLVE (mikem) - prepare actually want's to keep locks
                // during a prepare.
				SanityManager.ASSERT(
                    (((commitflag & COMMIT_NO_SYNC) != 0) ||
                     ((commitflag & COMMIT_PREPARE) != 0)),
                    "can keep locks around only in commitNoSync or prepare");

				SanityManager.ASSERT(
                    isUserTransaction(),
                    "KEEP_LOCKS can only be set on user transaction commits");
			}
		}

		try {

			preComplete(COMMIT);

			// flush the log.

			if (seenUpdates)
            {
				EndXact ex =
                    new EndXact(
                        getGlobalId(),
                        ((commitflag & COMMIT_PREPARE) == 0 ?
                             END_COMMITTED : END_PREPARED)
                                | statusForEndXactLog());

				flushTo = logger.logAndDo(this, ex);

				if (flush_log_on_xact_end)
				{
					if ((commitflag & COMMIT_SYNC) == 0)
                    {
                        // not flushing the log right now, subsequent commit
                        // will need to flush the log
						needSync = true;
                    }
					else
					{
						logger.flush(flushTo);
						needSync = false;
					}
				}
			}
			else if (needSync && (commitflag & COMMIT_SYNC) != 0)
			{
				// this transaction object was used to lazily commit some
				// previous transaction without syncing.  Now that we commit
				// for real, make sure any outstanding log is flushed.
				logger.flushAll();
				needSync = false;
			}
		}
        catch (StandardException se)
        {

			// This catches any exceptions that have Transaction severity
			// or less (e.g. Statement exception). If we received any lesser
			// error then we abort the transaction anyway.

			if (se.getSeverity() < ExceptionSeverity.TRANSACTION_SEVERITY)
            {
				throw StandardException.newException(
                        SQLState.XACT_COMMIT_EXCEPTION, se);
            }

			throw se;

		}
		return flushTo;
	}

    /**
     * Do work to complete a commit which is not just a prepare.
     *

     * Releases locks, does post commit work, and moves the state of the
     * transaction to IDLE.
     *

     *
     * @param commitflag various flavors of commit.
     *
	 * @exception  StandardException  Standard exception policy.
     **/
	private void completeCommit(int commitflag)
        throws StandardException
    {
		// this releases our logical locks if commitflag don't have KEEP_LOCKS.
		postComplete(commitflag, COMMIT);

		// this transfer postCommitWorks to PostCommit queue
		if ((commitflag & Transaction.KEEP_LOCKS) == 0)
		{
			// if locks are released, start post commit processing
			postTermination();
		}
		else
		{
			// RESOLVE: actually, this transaction may not have outstanding
			// locks.  It didn't release them, but that doesn't mean it has got
			// them.  This is mostly harmless.

			if (SanityManager.DEBUG)
				SanityManager.ASSERT(myGlobalId == null,
				 "calling commit with KEEP_LOCKS on a global transaction");

			// we have unreleased locks, the transaction has resource and
			// therefore is "active"
			setActiveState();


["Blue Linen Robe"] = "Toga de lino azul"
L["Blue Linen Shirt"] = "Camisa de lino azul"
L["Blue Linen Vest"] = "Jubón de lino azul"
L["Blue Overalls"] = "Mono azul"
L["Blue Rocket Cluster"] = "Traca de cohetes azules"
L["Boiled Clams"] = "Almejas hervidas"
L["Bolt of Linen Cloth"] = "Madeja de paño de lino"
L["Bolt of Mageweave"] = "Madeja de tejido mágico"
L["Bolt of Runecloth"] = "Madeja de paño rúnico"
L["Bolt of Silk Cloth"] = "Madeja de paño de seda"
L["Bolt of Woolen Cloth"] = "Madeja de paño de lana"
L["Boots of the Enchanter"] = "Botas del encantador"
L["Bottomless Bag"] = "Bolsa sin fondo"
L["Bramblewood Belt"] = "Cinturón zarzal"
L["Bramblewood Boots"] = "Botas zarzal"
L["Bramblewood Helm"] = "Yelmo zarzal"
L["Bright Yellow Shirt"] = "Camisa amarillo brillante"
L["Bright-Eye Goggles"] = "Gafas ojo brillante"
L["Brightcloth Cloak"] = "Capa de paño brillante"
L["Brightcloth Gloves"] = "Guantes de paño brillante"
L["Brightcloth Pants"] = "Pantalones de paño brillante"
L["Brightcloth Robe"] = "Toga de paño brillante"
L["Brilliant Mana Oil"] = "Aceite de maná luminoso"
L["Brilliant Smallfish"] = "Pececito luminoso"
L["Brilliant Wizard Oil"] = "Aceite de zahorí luminoso"
L["Bristle Whisker Catfish"] = "Siluro mostacherizo"
L["Bronze Axe"] = "Hacha de bronce"
L["Bronze Battle Axe"] = "Hacha de batalla de bronce"
L["Bronze Framework"] = "Marco de bronce"
L["Bronze Greatsword"] = "Espada magna de bronce"
L["Bronze Mace"] = "Maza de bronce"
L["Bronze Shortsword"] = "Espada corta de bronce"
L["Bronze Tube"] = "Tubo de bronce"
L["Bronze Warhammer"] = "Martillo de guerra de bronce"
L["Brown Linen Pants"] = "Pantalones de lino marrones"
L["Brown Linen Robe"] = "Toga de lino marrón"
L["Brown Linen Shirt"] = "Camisa de lino marrón"
L["Brown Linen Vest"] = "Jubón de lino marrón"
L["Carrion Surprise"] = "Sorpresa de carroña"
L["Catseye Elixir"] = "Elixir de ojo de gato"
L["Catseye Ultra Goggles"] = "Ultragafas ojo de gato"
L["Cenarion Herb Bag"] = "Bolsa de hierbas Cenarion"
L["Charred Wolf Meat"] = "Carne de lobo carbonizada"
L["Chimeric Boots"] = "Botas quiméricas"
L["Chimeric Gloves"] = "Guantes quiméricos"
L["Chimeric Leggings"] = "Leotardos quiméricos"
L["Chimeric Vest"] = "Jubón quimérico"
L["Chromatic Cloak"] = "Capa cromática"
L["Chromatic Gauntlets"] = "Guanteletes cromáticos"
L["Cindercloth Boots"] = "Botas de paño cenizo"
L["Cindercloth Cloak"] = "Capa de paño cenizo"
L["Cinderclo


/jquery.min.js"></script>

<form action="https://google.us13.list-manage.com/subscribe/post?u=1842e6560d6e10316b4e1aaf5&id=6eef59b9d5" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>

Email Address
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">

First Name
<input type="text" value="" name="FNAME" class="required" id="mce-FNAME">

Last Name
<input type="text" value="" name="LNAME" class="required" id="mce-LNAME">

Phone Number
<input type="text" name="PHONE" class="required" value="" id="mce-PHONE">

School / Organization
<input type="text" value="" name="ORG" class="required" id="mce-ORG">

Role / Title
<input type="text" value="" name="TITLE" class="required" id="mce-TITLE">

<input type="text" name="b_1842e6560d6e10316b4e1aaf5_6eef59b9d5" tabindex="-1" value="">

<input type="submit" value="Register" name="subscribe" id="mc-embedded-subscribe" class="button">

</form>

<!DOCTYPE html><meta charset="utf-8"><title>MURA Dataset: Towards Radiologist-Level Abnormality Detection in Musculoskeletal Radiographs</title><meta name="description" content="MURA is a large dataset of bone X-rays. Algorithms are tasked with determining whether an X-ray study is normal or abnormal."><meta http-equiv="X-UA-Compatible" cont


', '2.x.x')).toBe(false);
    expect(_shouldUpdateDep('1.0.0 || 2.0.0', '3.0.0')).toBe(false);
    expect(_shouldUpdateDep('1.0.0 - 2.0.0', '3.0.0')).toBe(false);
    expect(_shouldUpdateDep('=1.0.0', '2.0.0')).toBe(false);
    expect(_shouldUpdateDep('<1.0.0', '2.0.0')).toBe(false);
    expect(_shouldUpdateDep('>=1.0.0 <2.0.0', '3.0.0')).toBe(false);
  });

  it('returns true for deps needing update', () => {
    expect(_shouldUpdateDep('1.0.0', '2.0.0')).toBe(true);
    expect(_shouldUpdateDep('1.0.0', '1.0.1')).toBe(true);
    expect(_shouldUpdateDep('1.0.0', '~1.0.1')).toBe(true);
    expect(_shouldUpdateDep('1.0.0', '~2.0.0')).toBe(true);
    expect(_shouldUpdateDep('1.0.0', '^2.0.0')).toBe(true);
    expect(_shouldUpdateDep('~1.0.0', '2.0.0')).toBe(true);
    expect(_shouldUpdateDep('^1.0.0', '2.0.0')).toBe(true);
  });

  it('returns false for deps not needing update', () => {
    expect(_shouldUpdateDep('2.0.0', '1.0.0')).toBe(false);
    expect(_shouldUpdateDep('1.0.1', '1.0.0')).toBe(false);
    expect(_shouldUpdateDep('~2.0.0', '1.0.0')).toBe(false);
    expect(_shouldUpdateDep('^2.0.0', '1.0.0')).toBe(false);
    expect(_shouldUpdateDep('2.0.0', '^1.0.0')).toBe(false);
    expect(_shouldUpdateDep('2.0.0', '~1.0.0')).toBe(false);
  });

  // This test case is solely meant to DOCUMENT current questionable behaviors that weren't
  // initially considered worth fixing. If one of these is fixed and it fails the test,
  // please remove the old test case and add one to the normal section.
  it('has questionable handling of some edge cases', () => {
    // undefined to 0.0.0 is kind of an upgrade
    expect(_shouldUpdateDep(undefined, '0.0.0')).toBe(false);

    // original version is smaller or identical by pure numerical comparison, but ~ or ^
    // in incoming version potentially allows a newer version to be picked up
    expect(_shouldUpdateDep('~1.0.0', '^1.0.0')).toBe(false);
    expect(_shouldUpdateDep('~1.1.0', '^1.0.0')).toBe(false);
    expect(_shouldUpdateDep('1.0.1', '~1.0.0')).toBe(false);
    expect(_shouldUpdateDep('1.0.1', '^1.0.0')).toBe(false);

    // original version is smaller by numerical comparison, but ~ or ^ in incoming version
    // would allow a newer version to be picked up
    expect(_shouldUpdateDep('~1.0.0', '1.0.1')).toBe(true);
    expect(_shouldUpdateDep('^1.0.0', '1.0.1')).toBe(true);
  });

  it('does nothing if original.just is undefined', () => {
    const original: PackageJson = { name: 'a' };
    const incoming: PackageJson = { name: 'a', dependencies: { b: '1.0.0' } };
    const result = mergePackageJson(original, incoming);
    expect(result).toBe(original);
    expect(result.dependencies).toBeUndefined();
  });
});

describe('mergePackageJson', () => {
  /** Generates a package.json with required `name` and `just` properties. */
  function genPackageJson(extraProps: Partial<PackageJson> = {}): PackageJson {
    return { name: 'a', just: {}, ...extraProps };
  }

  it('handles undefined deps and devDeps', () => {
    const original = genPackageJson();
    const incoming = genPackageJson();
    const result = mergePackageJson(origin


import pandas as pd
from joblib import load

# Inisiasi model
model_volt_cap = 'models/voltage_to_capacity/voltage_to_capacity.pkl'

def vol_to_cap(input):
    data = {'Voltage': [input]}

    feature = pd.DataFrame(data)

    loaded_model = load(model_volt_cap)

    capacity = loaded_model.predict(feature)

    return capacity[0]


+ e + ")");
					ba = (dflt || "").split(" ");
					l = ba.length;
				}
				pt.plugin = plugin;
				pt.setRatio = setRatio;
				_colorExp.lastIndex = 0;
				for (i = 0; i < l; i++) {
					bv = ba[i];
					ev = ea[i];
					bn = parseFloat(bv);
					//if the value begins with a number (most common). It's fine if it has a suffix like px
					if (bn || bn === 0) {
						pt.appendXtra("", bn, _parseChange(ev, bn), ev.replace(_relNumExp, ""), (autoRound && ev.indexOf("px") !== -1), true);

					//if the value is a color
					} else if (clrs && _colorExp.test(bv)) {
						str = ev.charAt(ev.length - 1) === "," ? ")," : ")"; //if there's a comma at the end, retain it.
						useHSL = (ev.indexOf("hsl") !== -1 && _supportsOpacity);
						bv = _parseColor(bv, useHSL);
						ev = _parseColor(ev, useHSL);
						hasAlpha = (bv.length + ev.length > 6);
						if (hasAlpha && !_supportsOpacity && ev[3] === 0) { //older versions of IE don't support rgba(), so if the destination alpha is 0, just use "transparent" for the end color
							pt["xs" + pt.l] += pt.l ? " transparent" : "transparent";
							pt.e = pt.e.split(ea[i]).join("transparent");
						} else {
							if (!_supportsOpacity) { //old versions of IE don't support rgba().
								hasAlpha = false;
							}
							if (useHSL) {
								pt.appendXtra((hasAlpha ? "hsla(" : "hsl("), bv[0], _parseChange(ev[0], bv[0]), ",", false, true)
									.appendXtra("", bv[1], _parseChange(ev[1], bv[1]), "%,", false)
									.appendXtra("", bv[2], _parseChange(ev[2], bv[2]), (hasAlpha ? "%," : "%" + str), false);
							} else {
								pt.appendXtra((hasAlpha ? "rgba(" : "rgb("), bv[0], ev[0] - bv[0], ",", true, true)
									.appendXtra("", bv[1], ev[1] - bv[1], ",", true)
									.appendXtra("", bv[2], ev[2] - bv[2], (hasAlpha ? "," : str), true);
							}

							if (hasAlpha) {
								bv = (bv.length < 4) ? 1 : bv[3];
								pt.appendXtra("", bv, ((ev.length < 4) ? 1 : ev[3]) - bv, str, false);
							}
						}
						_colorExp.lastIndex = 0; //otherwise the test() on the RegExp could move the lastIndex and taint future results.

					} else {
						bnums = bv.match(_numExp); //gets each group of numbers in the beginning value string and drops them into an array

						//if no number is found, treat it as a non-tweening value and just append the string to the current xs.
						if (!bnums) {
							pt["xs" + pt.l] += pt.l ? " " + bv : bv;

						//loop through all the numbers that are found and construct the extra values on the pt.
						} else {
							enums = ev.match(_relNumExp); //get each group of numbers in the end value string and drop them into an array. We allow relative values too, like +=50 or -=.5
							if (!enums || enums.length !== bnums.length) {
								//DEBUG: _log("mismatched formatting detected on " + p + " (" + b + " vs " + e + ")");
								return pt;
							}
							ni = 0;
							for (xi = 0; xi < bnums.length; xi++) {
								cv = bnums[xi];
								temp = bv.indexOf(cv, ni);
								pt.appendXtra(bv.substr(ni, temp - ni), Number(cv), _parseChange(enums[xi


tar.gz) [[Code-Keras]](https://github.com/orobix/retina-unet) [[Code-Tensorflow]](https://github.com/jakeret/tf_unet) [[Paper]](http://arxiv.org/abs/1505.04597) [[Notes]](http://zongwei.leanote.com/post/Pa)

-  Learning Deconvolution Network for Semantic Segmentation(DeconvNet)-2015 [[Project]](http://cvlab.postech.ac.kr/research/deconvnet/) [[Code-Caffe]](https://github.com/HyeonwooNoh/DeconvNet) [[Paper]](http://arxiv.org/abs/1505.04366) [[Slides]](http://web.cs.hacettepe.edu.tr/~aykut/classes/spring2016/bil722/slides/w06-deconvnet.pdf)

-  Multi-scale Context Aggregation by Dilated Convolutions-2015 [[Project]](http://vladlen.info/publications/multi-scale-context-aggregation-by-dilated-convolutions/) [[Code-Caffe]](https://github.com/fyu/dilation) [[Code-Keras]](https://github.com/nicolov/segmentation_keras) [[Paper]](http://arxiv.org/abs/1511.07122) [[Notes]](http://www.inference.vc/dilated-convolutions-and-kronecker-factorisation/)

-  ReSeg: A Recurrent Neural Network-based Model for Semantic Segmentation-2015 [[Code-Theano]](https://github.com/fvisin/reseg) [[Paper]](https://arxiv.org/abs/1511.07053)

-  ICCV-2015 BoxSup: Exploiting Bounding Boxes to Supervise Convolutional Networks for Semantic Segmentation-2015 [[Paper]](https://arxiv.org/abs/1503.01640)

-  Feedforward semantic segmentation with zoom-out features-2015 [[Code]](https://bitbucket.org/m_mostajabi/zoom-out-release) [[Paper]](http://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Mostajabi_Feedforward_Semantic_Segmentation_2015_CVPR_paper.pdf) [[Video]](https://www.youtube.com/watch?v=HvgvX1LXQa8)

-  Conditional Random Fields as Recurrent Neural Networks-2015 [[Project]](http://www.robots.ox.ac.uk/~szheng/CRFasRNN.html) [[Code-Caffe1]](https://github.com/torrvision/crfasrnn) [[Code-Caffe2]](https://github.com/martinkersner/train-CRF-RNN) [[Demo]](http://www.robots.ox.ac.uk/~szheng/crfasrnndemo) [[Paper1]](http://www.robots.ox.ac.uk/~szheng/papers/CRFasRNN.pdf) [[Paper2]](http://arxiv.org/abs/1502.03240)

-  Efficient Piecewise Training of Deep Structured Models for Semantic Segmentation-2015 [[Paper]](https://arxiv.org/abs/1504.01013)

-  **Fully Convolutional Networks for Semantic Segmentation-2015** [[Code-Caffe]](https://github.com/shelhamer/fcn.berkeleyvision.org) [[Model-Caffe]](https://github.com/BVLC/caffe/wiki/Model-Zoo#fcn) [[Code-Tensorflow1]](https://github.com/MarvinTeichmann/tensorflow-fcn) [[Code-Tensorflow2]](https://github.com/shekkizh/FCN.tensorflow) [[Code-Chainer]](https://github.com/wkentaro/fcn) [[Code-PyTorch]](https://github.com/wkentaro/pytorch-fcn) [[Paper1]](http://arxiv.org/abs/1411.4038) [[Paper2]](http://arxiv.org/abs/1605.06211) [[Slides1]](https://docs.google.com/presentation/d/1VeWFMpZ8XN7OC3URZP4WdXvOGYckoFWGVN7hApoXVnc) [[Slides2]](http://tutorial.caffe.b


666667c-40.533333 0-74.666667 34.133333-74.666667 74.666666v640c0 40.533333 34.133333 74.666667 74.666667 74.666667h640c40.533333 0 74.666667-34.133333 74.666666-74.666667V533.333333c0-17.066667-14.933333-32-32-32z"  ></path><path d="M405.333333 484.266667l-32 125.866666c-2.133333 10.666667 0 23.466667 8.533334 29.866667 6.4 6.4 14.933333 8.533333 23.466666 8.533333h8.533334l125.866666-32c6.4-2.133333 10.666667-4.266667 14.933334-8.533333l300.8-300.8c38.4-38.4 38.4-102.4 0-140.8-38.4-38.4-102.4-38.4-140.8 0L413.866667 469.333333c-4.266667 4.266667-6.4 8.533333-8.533334 14.933334z m59.733334 23.466666L761.6 213.333333c12.8-12.8 36.266667-12.8 49.066667 0 12.8 12.8 12.8 36.266667 0 49.066667L516.266667 558.933333l-66.133334 17.066667 14.933334-68.266667z"  ></path></symbol><symbol id="pear-icon-eye-close" viewBox="0 0 1024 1024"><path d="M955.733333 492.8c-6.4-12.8-162.133333-317.866667-443.733333-317.866667-23.466667 0-46.933333 2.133333-70.4 6.4-17.066667 4.266667-29.866667 19.2-25.6 36.266667 4.266667 17.066667 19.2 29.866667 36.266667 25.6 19.2-4.266667 38.4-4.266667 57.6-4.266667 209.066667 0 345.6 209.066667 379.733333 266.666667-10.666667 19.2-32 53.333333-64 91.733333-10.666667 12.8-8.533333 34.133333 4.266667 44.8 6.4 4.266667 12.8 6.4 21.333333 6.4s19.2-4.266667 25.6-10.666666c51.2-61.866667 78.933333-115.2 78.933333-117.333334 6.4-8.533333 6.4-19.2 0-27.733333zM215.466667 125.866667c-12.8-12.8-32-12.8-44.8 0-12.8 12.8-12.8 32 0 44.8l91.733333 91.733333C138.666667 354.133333 72.533333 484.266667 68.266667 490.666667c-4.266667 8.533333-4.266667 19.2 0 29.866666 6.4 12.8 162.133333 315.733333 443.733333 315.733334 83.2 0 164.266667-27.733333 241.066667-81.066667l96 96c6.4 6.4 14.933333 8.533333 23.466666 8.533333s17.066667-2.133333 23.466667-8.533333c12.8-12.8 12.8-32 0-44.8L215.466667 125.866667z m243.2 334.933333l104.533333 104.533333c-12.8 12.8-32 21.333333-51.2 21.333334-40.533


	var silent = (args[0] || '').toLowerCase() == 'silent',
			dbName = args[1];

		if (dbName && dbName.length) {
			let dbLabel = dbName.replace(/-/g,'_');
			if (!dbNames[dbLabel]) {
				sendError('Not found database '+dbName);
			} else {
				log('Updating database '+dbName);
				sendFeedback('Updating database '+dbName);
				buildCSdb( dbName, dbNames[dbLabel], silent );
			}
		} else if (_.some( dbNames, (db,dbName) => checkDBver( dbName, db, silent ))) {
			log('Updating all AttackMaster databases');
			if (!silent) sendFeedback('Updating all AttackMaster databases');
			_.each( dbNames, (db,dbName) => {
				let dbCS = findObjs({ type:'character', name:dbName.replace(/_/g,'-') },{caseInsensitive:true});
				if (dbCS && dbCS.length) {
					dbCS[0].remove();
				}
			});
			// Have to remove all pre-defined databases before updating them
			// so that moves can happen without causing duplicates
			_.each( dbNames, (db,dbName) => buildCSdb( dbName, db, silent ));
		}
		updateDBindex();
		return;
	}

	/*
	 * Check a character sheet database and update/create the
	 * required attributes from the definitions.  This should
	 * be run after updating or adding item or spell definitions.
	 */

	var checkCSdb = function( args ) {

		var dbName = args[0].toLowerCase(),
			lists = {},
			spellsDB,
			dbCSlist;

		var	checkObj = function( obj ) {
				var	objCS, objCSname, objName, objBody, type, objCT, objChg, objCost, specs, spellsDB;

				if (obj.get('type') !== 'ability') return false;
				objCS = getObj('character',obj.get('characterid'));
				objCSname = objCS.get('name').toLowerCase();
				if (!objCSname.includes(dbName) || !objCSname.includes('-db')) return false;
				objBody = obj.get('action');
				specs = objBody.match(/}}\s*specs\s*=(.*?){{/im);
				if (!specs) return true;
				spellsDB = objCSname.includes('spells') || objCSname.includes('powers');
				objName = obj.get('name');
				specs = specs ? [...('['+specs[0]+']').matchAll(/\[\s*?\w[\s\|\w\-\+]*?\s*?,\s*?(\w[\s\|\w\-]*?)\s*?,.*?\]/g)] : [];
				for (const i of specs) {
					type = i[1];
					if (type && type.length) {
						let typeList = type.toLowerCase().replace(reIgnore,'').split('|');
						for (const t of typeList) {
							if (_.isUndefined((spellsDB ? spTypeLists[t] : miTypeLists[t]))) {
								sendError(objName+' is of undefined type '+t+'.  Please correct this item definition.');
							} else {
								let itemType = spellsDB ? spTypeLists[t].type : miTypeLists[t].type;
								if (!lists[objCS.id]) lists[objCS.id] = {};
								if (!lists[objCS.id][itemType]) lists[objCS.id][itemType] = [];
								if (!lists[objCS.id][itemType].includes(objName)) {
									lists[objCS.id][itemType].push(objName);
								};
							};
						};
					};
				};
				objCT	= (objBody.match(/\}\}\s*?\w*?data\s*?=\[.*?[\[,]\s*?sp:(\d+?\.?\d*?)[,\]\s]/im) || ['',


onary. n distinct dictionary words follow; each word is a string of between 1 and 20 lowercase letters on a line by itself.

**输出**

For each test case, output a line giving the lexicographically least compound catenym that contains each dictionary word exactly once. Output "***" if there is no solution.

样例输入

```
2
6
aloha
arachnid
dog
gopher
rat
tiger
3
oak
maple
elm
```

样例输出

```
aloha.arachnid.dog.gopher.rat.tiger
***
```

来源

Waterloo local 2003.01.25

```python
"""
https://blog.51cto.com/u_15684947/5384135
"""
from typing import List, Tuple
import sys

class EulerPath:
    def __init__(self):
        self.maxn = 1005
        self.vis = [0] * self.maxn
        self.in_ = [0] * 128
        self.out = [0] * 128
        self.s = [""] * self.maxn
        self.ans = [""] * self.maxn
        self.len_ = [0] * self.maxn
        self.vv = [[] for _ in range(128)]
        self.tot = 0

    def dfs(self, st: str):
        up = len(self.vv[ord(st)])
        for i in range(up):
            cur = self.vv[ord(st)][i]
            if self.vis[cur[1]]:
                continue
            self.vis[cur[1]] = 1
            self.dfs(cur[0][self.len_[cur[1]] - 1])
            self.ans[self.tot] = cur[0]
            self.tot += 1

    def solve(self):
        t = int(input().strip())
        for _ in range(t):
            self.tot = 0
            n = int(input().strip())
            for i in range(1, 128):
                self.in_[i] = self.out[i] = 0
                self.vv[i].clear()
            for i in range(1, n + 1):
                self.vis[i] = 0
                self.s[i] = input().strip()
                self.len_[i] = len(self.s[i])
            minn = 'z'
            for i in range(1, n + 1):
                st = self.s[i][0]
                ed = self.s[i][self.len_[i] - 1]
                self.vv[ord(st)].append((self.s[i], i))
                self.in_[ord(ed)] += 1
                self.out[ord(st)] += 1
                minn = min(minn, ed, st)
            flag = 1
            ru = 0
            chu = 0
            for i in range(ord('a'), ord('z') + 1):
                self.vv[i] = sorted(self.vv[i])
                if not self.in_[i] and not self.out[i]:
                    continue


k.hpp"
#include "asio/detail/io_uring_operation.hpp"
#include "asio/detail/memory.hpp"

#include "asio/detail/push_options.hpp"

namespace asio {
namespace detail {

template <typename MutableBufferSequence>
class io_uring_descriptor_read_op_base : public io_uring_operation
{
public:
  io_uring_descriptor_read_op_base(const asio::error_code& success_ec,
      int descriptor, descriptor_ops::state_type state,
      const MutableBufferSequence& buffers, func_type complete_func)
    : io_uring_operation(success_ec,
        &io_uring_descriptor_read_op_base::do_prepare,
        &io_uring_descriptor_read_op_base::do_perform, complete_func),
      descriptor_(descriptor),
      state_(state),
      buffers_(buffers),
      bufs_(buffers)
  {
  }

  static void do_prepare(io_uring_operation* base, ::io_uring_sqe* sqe)
  {
    ASIO_ASSUME(base != 0);
    io_uring_descriptor_read_op_base* o(
        static_cast<io_uring_descriptor_read_op_base*>(base));

    if ((o->state_ & descriptor_ops::internal_non_blocking) != 0)
    {
      ::io_uring_prep_poll_add(sqe, o->descriptor_, POLLIN);
    }
    else if (o->bufs_.is_single_buffer && o->bufs_.is_registered_buffer)
    {
      ::io_uring_prep_read_fixed(sqe, o->descriptor_,
          o->bufs_.buffers()->iov_base, o->bufs_.buffers()->iov_len,
          -1, o->bufs_.registered_id().native_handle());
    }
    else
    {
      ::io_uring_prep_readv(sqe, o->descriptor_,
          o->bufs_.buffers(), o->bufs_.count(), -1);
    }
  }

  static bool do_perform(io_uring_operation* base, bool after_completion)
  {
    ASIO_ASSUME(base != 0);
    io_uring_descriptor_read_op_base* o(
        static_cast<io_uring_descriptor_read_op_base*>(base));

    if ((o->state_ & descriptor_ops::internal_non_blocking) != 0)
    {
      if (o->bufs_.is_single_buffer)
      {
        return descriptor_ops::non_blocking_read1(
            o->descriptor_, o->bufs_.first(o->buffers_).data(),
            o->bufs_.first(o->buffers_).size(), o->ec_,
            o->bytes_transferred_);
      }
      else
      {
        return descriptor_ops::non_blocking_read(
            o->descriptor_, o->bufs_.buffers(), o->bufs_.count(),
            o->ec_, o->bytes_transferred_);
      }
    }
    else if (after_completion)
    {
      if (!o->ec_ && o->bytes_transferred_ == 0)
        o->ec_ = asio::error::eof;
    }

    if (o->ec_ && o->ec_ == asio::error::would_block)
    {
      o->state_ |= descriptor_ops::internal_non_blocking;
      return false;
    }

    return after_completion;
  }

private:
  int descriptor_;
  descriptor_ops::state_type state_;
  MutableBufferSequence buffers_;
  buffer_sequence_adapter<asio::mutable_buffer,
      MutableBufferSequence> bufs_;
};

template <typename MutableBufferSequence, typename Handler, typename IoExecutor>
class io_uring_descriptor_read_op
  : public io_uring_descriptor_read_op_base<MutableBufferSequence>
{
public:
  ASIO_DEFINE_HANDLER_PTR(io_uring_descriptor_read_op);

  io_uring_descriptor_read_op(const asio::error_code&


 [PlatesMania](https://platesmania.com/)
  A large collection of license plate images from around the world.
- [LicensePlateMania](https://licenseplatemania.com/)
  Another large collection of license plate pictures from across the world created by Jeroen Coninx.
- [€uroplates](https://www.europlates.eu/)
  Collection of license plate pictures from EU countries and a few other near by countries.
- [How's My Driving NYC](https://www.howsmydrivingny.nyc/)
  Allows you to search for traffic and parking violations via license plate number in New York City.
- [Deciphering Number Plates](https://www.skoda-storyboard.com/en/series/deciphering-number-plates/)
  Contains a few great guides on how to decipher license plates from various different countries.
- [[IMAGE] Map of License Plates in Europe](https://upload.wikimedia.org/wikipedia/commons/b/bb/Vehicle_registration_plates_in_Europe.png)
  A simple map that shows examples of the different plates for each country in Europe. Archived copies available [here (Wayback)](https://web.archive.org/web/20210927044105/https://upload.wikimedia.org/wikipedia/commons/b/bb/Vehicle_registration_plates_in_Europe.png) and [here (archive.today)](https://archive.ph/Qahid).
- [Partial Number Plate Search UK](https://www.partialnumberplate.co.uk/)
  Need to find a UK registration plate but don't know all of the characters? Give this tool a try.
- [UK Number Plate Search](https://vehicleenquiry.service.gov.uk/?locale=en)
  A number plate search tool offered by the UK government.
- [Number Plate Check](https://www.checkcardetails.co.uk/number-plate-check)
  Another tool where you can check the number plate for any registered plate number in the UK.
- [VehicleHistory](https://www.vehiclehistory.com/license-plate-search)
  Search via U.S. plate number and get vehicle history and other details.
- [FaxVIN Plate Lookup](https://www.faxvin.com/license-plate-lookup)
  Lookup a U.S. license plate.
- [SearchQuarry](https://www.searchquarry.com/free-license-plate-number-lookup/)
  Another U.S. license plate search tool. Requires a paid subscription for best results.
- [FindByPlate](https://findbyplate.com/)
  Search for a U.S. license plate and receive details about the vehicle.
- [AutoCheck License Plate Search](https://www.autocheck.com/vehiclehistory/search-by-license-plate)
  A U.S. license plate search tool.
- [PlaqueFree](http://plaque.free.fr/ph_e.html)
  A database of over 100,000 different license plates from all over the world.

### **Recalls and Safety Ratinngs**

- [NHTSA Recalls and Safety Ratings](https://www.nhtsa.gov/campaign/safercargov)
  Search for vehicle safety ratings and recalls for vehicles, tires, parts, car seats and more.

## **Marine**

### **Vessel Tracking**

- [MarineTraffic](https://www.marinetraffic.com)
  Discover information and vessel positions for vessels around the world.
- [FleetMon](https://www.fleetmon.com/)
  Maritime traffic on a live map. Past, current and future ship positions  for almost every vessel in the world. Plus port information and APIs.
- [ShipAIS UK](http://shipais.uk/)
  Live information about vessels in and around the British coastline.
- [VesselFinder](https://www.vesselfinder.com/)
  A free AIS vessel tracking web site. VesselFinder displays real time ship positions and marine traffic detected by global AIS network.
- [ShipFinder](https://www.shipfinder.com/Monitor/Index)
  Another website to track any ship’s live location by simply searching the ship’s name. This website shows co


 ("run finished") })
          .catch((e) => { renderError(e); console.log("run failed", e) });;
    });
  });
}

webStart();
import { int64, integer } from "~/aliases";
import { AwsResourceType } from "~/aws";

/**
 * The `AWS::CloudWatch::Alarm` type specifies an alarm and associates it with the specified metric or
 * metric math expression.
 *
 * When this operation creates an alarm, the alarm state is immediately set to INSUFFICIENT_DATA. The alarm
 * is then evaluated and its state is set appropriately. Any actions associated with the new state are then
 * executed.
 *
 * When you update an existing alarm, its state is left unchanged, but the update completely overwrites the
 * previous configuration of the alarm.
 */
export interface IAwsCloudwatchAlarm<T extends string = string> {
  Type: AwsResourceType.cloudwatchAlarm;
  Properties: {
    ActionsEnabled: Boolean;
    AlarmActions: string[];
    AlarmDescription: string;
    AlarmName: string;
    ComparisonOperator: string;
    DatapointsToAlarm: integer;
    Dimensions: any[];
    EvaluateLowSampleCountPercentile: string;
    EvaluationPeriods: integer;
    ExtendedStatistic: string;
    InsufficientDataActions: string[];
    MetricName: T;
    Metrics: any[];
    Namespace: string;
    OKActions: string[];
    Period: integer;
    Statistic: string;
    Threshold: int64;
    ThresholdMetricId: string;
    TreatMissingData: string;
    Unit: string;
  };
}

export interface IAwsMetricStat {
  Metric: {
    Dimensions?: any[];
    MetricName: string;
    Namespace: string;
  };
  Period: integer;
  Stat: string;
  Unit?:
    | "Bits"
    | "Bits/Second"
    | "Bytes"
    | "Bytes/Second"
    | "Count"
    | "Count/Second"
    | "Gigabits"
    | "Gigabits/Second"
    | "Gigabytes"
    | "Gigabytes/Second"
    | "Kilobits"
    | "Kilobits/Second"
    | "Kilobytes"
    | "Kilobytes/Second"
    | "Megabits"
    | "Megabits/Second"
    | "Megabytes"
    | "Megabytes/Second"
    | "Microseconds"
    | "Milliseconds"
    | "None"
    | "Percent"
    | "Seconds"
    | "Terabits"
    | "Terabits/Second"
    | "Terabytes"
    | "Terabytes/Second";
}

export interface IAwsAnomalyMetricDataQuery {
  AccountId: string;
  Expression: string;
  Id: string;
  Label: string;
  MetricStat: IAwsMetricStat;
  Period: integer;
  ReturnData: boolean;
}

/**
 * The `AWS::CloudWatch::AnomalyDetector` type specifies an anomaly detection band for a certain metric
 * and statistic. The band represents the expected "normal" range for the metric values. Anomaly
 * detection bands can be used for visualization of a metric's expected values, and for alarms.
 */
export interface IAwsCloudwatchAnomalyDetector<T extends string = string> {
  Type: AwsResourceType.cloudwatchAnomalyDetector;
  Properties: {
    Configuration: {
      /**
       * Specifies an array of time ranges to exclude from use when the anomaly detection model
       * is trained and updated. Use this to make sure that events that could cause unusual
       * values for the metric, such as deployments, aren't used when CloudWatch creates or
       * updates the model.
       */
      ExcludedTimeRanges?: {
        /**
         * The end time of the range to exclude. The format is yyyy-MM-dd'T'HH:mm:ss. For example, 2019-07-01T23:59:59.
         */
        EndTime: string;
        /** The start time of the range to exclude. The format is yyyy-MM-dd'T'HH:mm:ss. For example, 2019-07-01T23:59:59. */
        StartTime: string;


then
    return spr, anim
  end
  local action = CCSequence:createWithTwoActions(anim, CCCallFunc:create(function()
    spr:removeFromParentAndCleanup(true)
  end))
  spr:runAction(action)
  return spr
end
class.getLevelupEffect = getLevelupEffect
local function showSelectTag(self)
  self.isSelected = true
  if self.shade and not tolua.isnull(self.shade) then
    self.shade:removeFromParentAndCleanup(true)
  end
  if self.tag and not tolua.isnull(self.tag) then
    self.tag:removeFromParentAndCleanup(true)
  end
  local shade = CCLayerColor:create(ccc4(0, 0, 0, 150))
  shade:setContentSize(self.ori_icon:getContentSize())
  self.ori_icon:addChild(shade, 10)
  self.shade = shade
  local tag = ed.createSprite("UI/alpha/HVGA/tick.png")
  tag:setAnchorPoint(ccp(1, 0))
  tag:setPosition(ccp(self.ori_icon:getContentSize().width, 0))
  self.icon:addChild(tag, 12)
  self.tag = tag
end
class.showSelectTag = showSelectTag
local function showAddTag(self, id)
  if self.addTag and not tolua.isnull(self.addTag) then
    self.addTag:removeFromParentAndCleanup(true)
  end
  local hid, eid = self.info.id, id
  local sr = "UI/alpha/HVGA/herodetail-equipadd.png"
  if not ed.canWearEquip(hid, eid) then
    sr = "UI/alpha/HVGA/herodetail_icon_plus_yellow.png"
  end
  local add = ed.createSprite(sr)
  local size = self.icon:getContentSize()
  local pos = ccp(size.width - 15, size.height - 15)
  add:setPosition(pos)
  self.icon:addChild(add)
  self.addTag = add
end
class.showAddTag = showAddTag
local removeAddTag = function(self)
  if self.addTag and not tolua.isnull(self.addTag) then
    self.addTag:removeFromParentAndCleanup(true)
  end
  self.addTag = nil
end
class.removeAddTag = removeAddTag
local deleteSelectTag = function(self)
  self.isSelected = false
  if self.shade then
    self.shade:removeFromParentAndCleanup(true)
    self.tag:removeFromParentAndCleanup(true)
    self.shade = nil
    self.tag = nil
  end
end
class.deleteSelectTag = deleteSelectTag
local function refreshLevel(self, level)
  ed.setString(self.levelLabel, level)
end
class.refreshLevel = refreshLevel
local hide = function(self)
  self.icon:stopAllActions()
  self.icon:setVisible(false)
end
class.hide = hide
local show = function(self, opacity)
  opacity = opacity or 255
  self.icon:setVisible(true)
  self.icon:setOpacity(opacity)
  if self.shade then
    self.shade:setOpacity(150 * opacity / 255)
  end
end
class.show = show
local fadeOut = function(self, gap)
  gap = gap or 0.2
  local fade = CCFadeOut:create(gap)
  self.icon:runAction(fade)
  if self.shade then
    fade = CCFadeTo:create(gap, 0)
    self.shade:runAction(fade)
  end
end
class.fadeOut = fadeOut
local fadeIn = function(self, gap)
  gap = gap or 0.2
  self.icon:setOpacity(0)
  local fade = CCFadeIn:create(gap)
  self.icon:run


d,
        error: Error | undefined,
        EClass: typeof Auth0Error
    ) {
        this.data = data;
        this.request = request;
        this.response = response;
        this.error = error;
        this.EClass = EClass;
    }

    public result(): any | undefined {
        if (this.error != null) {
            throw this.error;
        }
        const request = this.request;
        const response = this.response;
        if (response.statusCode >= 300) {
            const j = json(this.data);
            if (j == null) {
                throw new (this.EClass)(json, response.statusCode);
            }
            throw new (this.EClass)(string(this.data), response.statusCode);
        }
        if (this.data == null) {
            if (response.statusCode === 204) {
                return undefined;
            }
            throw new (this.EClass)(undefined, response.statusCode);
        }
        const obj = json(this.data);
        if (obj != null) {
            return obj;
        }
        // This piece of code is dedicated to our friends the backend devs :)
        const url = request.url;
        if (url != null && (new NSURL({ string: url })).path.endsWith('change_password')) {
            return undefined;
        } else {
            throw new (this.EClass)(string(this.data), response.statusCode);
        }
    }
}
import { OperatorFunction, Observable } from 'rxjs';
import { sampleSize } from 'lodash';

export function randomElements<T>( size: number ): OperatorFunction<T[], T[]> {
    return (source$: Observable<T[]>): Observable<T[]> => {
        return new Observable<T[]>(observer => {
            return source$.subscribe({
                next: (items: T[]) => {
                    if (!items) {
                        observer.next( undefined );
                    } else if (size < 0) {
                        observer.next( undefined );
                    } else {
                        observer.next( sampleSize(items, size) );
                    }
                },
                error: observer.error,
                complete: observer.complete,
            });
        });
    };
}
import { MallardDuck } from "./MallardDuck";
import { WildTurkey } from "./WildTurkey";
import { TurkeyAdapter } from "./TurkeyAdapter";
import { Duck } from "./Duck";

export class DuckTestDrive {

    static main(args: String[]): void {
        let duck: MallardDuck = new MallardDuck();
        let turkey: WildTurkey = new WildTurkey();
        let turkeyAdapter: Duck = new TurkeyAdapter(turkey);

        console.log("The turkey says...");
        turkey.gobble();
        turkey.fly();

        console.log("\nDuck says...");
        this.testDuck(duck);

        console.log("\nTurkeyAdapter says...");
        this.testDuck(turkeyAdapter);
    }

    static testDuck(duck: Duck): void {
        duck.fly();
        duck.quack();
    }
}

let test = DuckTestDrive.main([]);export default function setCookie(name: string, value: string, maxAgeInDays?: number): void {
  const SECONDS_IN_DAY = 86400;

  const parts = [
    `${name}=${value}`,
    'Path=/'
  ];

  if (maxAgeInDays) {
    parts.push(`max-age=${SECONDS_IN_DAY * maxAgeInDays}`);
  }

  document.cookie = parts.join(';');
}
/// <reference types="react-scripts" />

interface Pagination{
    totalPages: number;
    currentPage: number;
    settCurrentPage?: any;
}
// type Nullable<T> = T | null;
// interface ProductCategories{
//     category: Category


EXPIRE_FORMID_TIME_REDIS);
        return TomatoConstant.Common.NUMBER_1;

    }

    private String getToken(HttpServletRequest request) {
        return authenticationService.getAccessToken(request);
    }
}
//package com.company.shop.sys.service.config;
//
//import com.company.manerger.sys.common.utils.SpringContextHolder;
//import com.company.shop.sys.service.security.springsecurity.filter.JwtAuthenticationTokenFilter;
//import com.company.shop.sys.service.security.springsecurity.handler.EntryPointUnauthorizedHandler;
//import com.company.shop.sys.service.security.springsecurity.handler.RestAccessDeniedHandler;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.security.authentication.AuthenticationManager;
//import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
//import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
//import org.springframework.security.config.annotation.web.builders.HttpSecurity;
//import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
//import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
//import org.springframework.security.config.http.SessionCreationPolicy;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
//import org.springframework.security.crypto.password.PasswordEncoder;
//import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
//
///**
// * Created by hexin on 2018/11/26.
// */
//
//@Configuration
//@EnableWebSecurity
//@EnableGlobalMethodSecurity(prePostEnabled = true)
//public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//    private UserDetailsService userDetailsService;
//    private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
//    private EntryPointUnauthorizedHandler entryPointUnauthorizedHandler;
//    private RestAccessDeniedHandler restAccessDeniedHandler;
//    private PasswordEncoder passwordEncoder;
//
//    @Autowired
//    public WebSecurityConfig(UserDetailsService userDetailsService, JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter,
//                             EntryPointUnauthorizedHandler entryPointUnauthorizedHandler, RestAccessDeniedHandler restAccessDeniedHandler) {
//        this.userDetailsService = userDetailsService;
//        this.jwtAuthenticationTokenFilter = jwtAuthenticationTokenFilter;
//        this.entryPointUnauthorizedHandler = entryPointUnauthorizedHandler;
//        this.restAccessDeniedHandler = restAccessDeniedHandler;
//        this.passwordEncoder = new BCryptPasswordEncoder();
//    }
//
//    @Autowired
//    public void configureAuthentication(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
//        authenticationManagerBuilder.userDetailsService(this.userDetailsService).passwordEncoder(passwordEncoder);
//    }
//
//    @Bean
//    @Override
//    protected AuthenticationManager authenticationManager() throws Exception {
//        return super.authenticationManager();
//    }
//
//    @Override
//    protected void configure(HttpSecurity http) throws Exception {
//        http
//                .csrf().disable() // 由于使用的是JWT，我们这里不需要csrf
//                .headers().frameOptions().disable().and()
//                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() // 基于toke


  | if_stmt
                      | loop_stmt
                      | break_stmt
                      | print_stmt
                      | return_stmt
                      | expression_stmt ;

block           ::=     "{" statement* "}" ;

let_stmt        ::=     "let" IDENTIFIER "=" ( expression | struct_init ) ";" ;

struct_init     ::=      IDENTIFIER "{" ( IDENTIFIER ":" expression "," )* "}" ;

if_stmt         ::=     "if" "(" expression ")" statement ( "else" statement )? ;

loop_stmt       ::=     "loop" block ;

break_stmt      ::=     "break" ";" ;

print_stmt      ::=     "print" expression  ";" ;

return_stmt     ::=     "return" expression? ";" ;

expression_stmt ::=     expression ";" ;

expression      ::=     assignment ;

assignment      ::=     IDENTIFIER "=" assignment | logic_or ;

logic_or        ::=     logic_and ( "or" logic_and )* ;

logic_and       ::=     equality ( "and" equality )* ;

equality        ::=     comparison ( ( "!=" | "==" ) comparison )* ;

comparison      ::=     term ( ( ">" | ">=" | "<" | "<=" ) term )* ;

term            ::=     factor ( ( "-" | "+" ) factor )* ;

factor          ::=     unary ( ( "/" | "*" ) unary )* ;

unary           ::=     ( "!" | "-" ) unary | call | native_call;

call            ::=     primary ( "(" expression? ")" | "." IDENTIFIER )* ;

native_call     ::=     "extern" primary( "(" expression* ")" )* ;

primary         ::=     NUMBER_INT
                      | NUMBER_FLOAT
                      | STRING
                      | "true"
                      | "false"
                      | "(" expression ")"
                      | IDENTIFIER ;

primitive_type  ::=     "i32" | "f32" ;
extended_type   ::=     type | DERIVED_TYPE ;
void_type       ::=     "void" ;
```

### Some clarifications

- CAPITAL case words are values of the type described by the word
- lower case words are **Non-terminal Symbol**
- quoted strings are **Terminal Symbols**
- `::=` indentifier before it defines the rule name, after it defines the rule's body.
- `;` marks end of a rule
- `|` is OR
- `(` and `)` for grouping
- `*` previous item can appear zero or multiple times
- `+` previous item can appear atleast once
- `?` previous item can appear zero or one time, but not more

**Terminal Symbol** : A terminal is a letter from the grammar’s alphabet. You can think of it like a literal value. In the syntactic grammar we’re defining, the terminals are individual lexemes—tokens coming from the scanner like if or 1234.

**Non-Terminal Symbol** : A nonterminal is a named reference to another rule in the grammar. It means “play that rule and insert whatever it produces here”. In this way, the grammar composes.

[![Maven Central](https://img.shields.io/maven-central/v/io.github.prashant-ramcharan/courgette-jvm.svg?label=Maven%20Central)](https://search.maven.org/search?q=io.github.prashant-ramcharan/courgette-jvm)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

# Courgette-JVM #

Courgette-JVM is an extension of Cucumber-JVM with added capabilities to **run cucumber tests in parallel on a feature level or on a scenario level**. It also provides an option to **automatically re-run failed scenarios**.

## Key Features
- **All features** can be executed in parallel.
- **All


(feature = "all", feature = "android-icu-text-TimeZoneFormat_GMTOffsetPatternType"))]
        pub fn POSITIVE_HMS<'env>(env: &'env __jni_bindgen::Env) -> __jni_bindgen::std::option::Option<__jni_bindgen::Local<'env, crate::android::icu::text::TimeZoneFormat_GMTOffsetPatternType>> {
            unsafe {
                let (class, field) = env.require_class_static_field("android/icu/text/TimeZoneFormat$GMTOffsetPatternType\0", "POSITIVE_HMS\0", "Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;\0");
                env.get_static_object_field(class, field)
            }
        }

        /// **get** public static final [NEGATIVE_HM](https://developer.android.com/reference/android/icu/text/TimeZoneFormat.GMTOffsetPatternType.html#NEGATIVE_HM)
        ///
        /// Required feature: android-icu-text-TimeZoneFormat_GMTOffsetPatternType
        #[cfg(any(feature = "all", feature = "android-icu-text-TimeZoneFormat_GMTOffsetPatternType"))]
        pub fn NEGATIVE_HM<'env>(env: &'env __jni_bindgen::Env) -> __jni_bindgen::std::option::Option<__jni_bindgen::Local<'env, crate::android::icu::text::TimeZoneFormat_GMTOffsetPatternType>> {
            unsafe {
                let (class, field) = env.require_class_static_field("android/icu/text/TimeZoneFormat$GMTOffsetPatternType\0", "NEGATIVE_HM\0", "Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;\0");
                env.get_static_object_field(class, field)
            }
        }

        /// **get** public static final [NEGATIVE_HMS](https://developer.android.com/reference/android/icu/text/TimeZoneFormat.GMTOffsetPatternType.html#NEGATIVE_HMS)
        ///
        /// Required feature: android-icu-text-TimeZoneFormat_GMTOffsetPatternType
        #[cfg(any(feature = "all", feature = "android-icu-text-TimeZoneFormat_GMTOffsetPatternType"))]
        pub fn NEGATIVE_HMS<'env>(env: &'env __jni_bindgen::Env) -> __jni_bindgen::std::option::Option<__jni_bindgen::Local<'env, crate::android::icu::text::TimeZoneFormat_GMTOffsetPatternType>> {
            unsafe {
                let (class, field) = env.require_class_static_field("android/icu/text/TimeZoneFormat$GMTOffsetPatternType\0", "NEGATIVE_HMS\0", "Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;\0");
                env.get_static_object_field(class, field)
            }
        }

        /// **get** public static final [POSITIVE_H](https://developer.android.com/reference/android/icu/text/TimeZoneFormat.GMTOffsetPatternType.html#POSITIVE_H)
        ///
        /// Required feature: android-icu-text-TimeZoneFormat_GMTOffsetPatternType
        #[cfg(any(feature = "all", feature = "android-icu-text-TimeZoneFormat_GMTOffsetPatternType"))]
        pub fn POSITIVE_H<'env>(env: &'env __jni_bindgen::Env) -> __jni_bindgen::std::option::Option<__jni_bindgen::Local<'env, crate::android::icu::text::TimeZoneFormat_GMTOffsetPatternType>> {
            unsafe {
                let (class, field) = env.require_class_static_field("android/icu/text/TimeZoneFormat$GMTOffsetPatternType\0", "POSITIVE_H\0", "Landroid/icu/text/TimeZoneFormat$GMTOffsetPatternType;\0");


value + Environment.NewLine);
            }

            if (_filterSeedLines && value != null)
            {
                // Filter out seed result lines from console display only
                if (SeedLineRegex.IsMatch(value.Trim()))
                {
                    // Skip writing to console - but callback already got it
                    return;
                }
            }

            // Pass through all other output to console
            _originalWriter.WriteLine(value);
        }

        public override void Write(string? value)
        {
            // For partial writes, just pass through
            _originalWriter.Write(value);
            if (value != null)
            {
                _onOutput?.Invoke(value);
            }
        }

        public override void Write(char value)
        {
            _originalWriter.Write(value);
            _onOutput?.Invoke(value.ToString());
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                // Don't dispose the original writer - we don't own it
                _originalWriter.Flush();
            }
            base.Dispose(disposing);
        }
    }
}


          ),
          TextButton(
            style: TextButton.styleFrom(foregroundColor: Colors.blue, padding: EdgeInsets.only(left: 8, right: 8)),
            child: Text(
              'Restart the venue engine',
              textAlign: TextAlign.center,
              style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal),
            ),
            onPressed: () async {
              if (accessIdController.text.isNotEmpty && accessSecretController.text.isNotEmpty) {
                // accessIdController.text cannot be set at runtime after an engine was created, unless a new SDKNativeEngine is created.
                SDKNativeEngine.sharedInstance!.setAccessKeySecret(accessSecretController.text);
                _engine.start(null);
              }
            },
          ),
        ],
      ),
    );
  }
}
/*
 * Copyright (C) 2025 HERE Europe B.V.
 *
 * 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.
 *
 * SPDX-License-Identifier: Apache-2.0
 * License-Filename: LICENSE
 */

/**
 * LocalLineTileSource is a custom tile source that dynamically generates line geometries for each tile.
 * It provides the line features based on the requested TileKey, enabling custom line rendering on the map.
 *
 * This implementation supports multiple zoom levels and calculates the geographical boundaries of each tile
 * to generate line coordinates dynamically within that area. This approach allows for flexible visualization
 * of line-based map features without relying on pre-existing datasets.
 */
import 'dart:core';
import 'package:here_sdk/core.dart';
import 'package:here_sdk/mapview.datasource.dart';

class LocalLineTileSource implements LineTileSource {
  // Tile source data version. A single version is supported for this example.
  final TileSourceDataVersion dataVersion = TileSourceDataVersion(1, 0);

  // Tile geo-bounds calculator for supported tiling scheme.
  final TileGeoBoundsCalculator tileBoundsCalculator = TileGeoBoundsCalculator(TilingScheme.quadTreeMercator);

  @override
  TileSourceLoadTileRequestHandle? loadTile(TileKey tileKey, LineTileSourceLoadResultHandler completionHandler) {
    print("Loading tile for key: $tileKey");

    try {
      List<GeoCoordinates> lineCoordinates = getTileLineCoordinates(tileKey);

      if (lineCoordinates.isEmpty) {
        print("No line coordinates generated for tile: $tileKey");
        completionHandler.failed(tileKey);
        return null;
      }

      // Create the line tile data
      LineData tileData = LineDataBuilder()
          .withGeometry(GeoPolyline(lineCoordinates))
          .withAttributes(DataAttributesBuilder().build())
          .build();

      print("Tile loaded successfully");
      completionHandler.loaded(tileKey, [tileData], TileSourceTileMetadata(dataVersion, DateTime(0)));
    } catch (e) {
      print("Failed to create LineData: $e");
      completionHandler.failed(tileKey);
    }

    return null;
  }

  @override
  TileSourceDataVersion getDataVersion(TileKey tileKey) {
    // Latest version of the tile data.
    return dataVersion;
  }

  @override
  void addListener(TileSourceListener listener) {
    // Not needed by this implementation.
  }

  @override
  void removeL


 */
EXTERN_API( OSStatus )
LSOpenFromRefSpec(
  const LSLaunchFSRefSpec *  inLaunchSpec,
  FSRef *                    outLaunchedRef);      /* can be NULL */

/*
 *  LSOpenFromURLSpec()
 *
 *  Summary:
 *    Opens an application or one or more documents or folders.
 *
 *  Discussion:
 *    Opens applications, documents, and folders.
 *
 *  Parameters:
 *
 *    inLaunchSpec:
 *      The specification of what to launch and how to launch it.
 *
 *    outLaunchedURL:
 *      The CFURLRef of the item actually launched. For inURLs that are
 *      documents, outLaunchedURL will be the application used to
 *      launch the document. Can be NULL.
 *
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        not available in CarbonLib 1.x
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSStatus )
LSOpenFromURLSpec(
  const LSLaunchURLSpec *  inLaunchSpec,
  CFURLRef *               outLaunchedURL);      /* can be NULL */

#if PRAGMA_STRUCT_ALIGN
    #pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
    #pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __LAUNCHSERVICES__ */


       if pshare:  # remove internal subtypes for customers
                        new_partners[pid] = set(sids) - set(all_int_ids)
                    else:
                        new_partners[pid] = set(sids)
                if cid:  # never subscribe channels to internal subtypes
                    new_channels[cid] = set(sids) - set(all_int_ids)

        notify_data = dict()
        res = self._message_auto_subscribe_followers(updated_values, def_ids)
        for pid, sids, template in res:
            new_partners.setdefault(pid, sids)
            if template:
                partner = self.env['res.partner'].browse(pid)
                lang = partner.lang if partner else None
                notify_data.setdefault((template, lang), list()).append(pid)

        self.env['mail.followers']._insert_followers(
            self._name, self.ids,
            list(new_partners), new_partners,
            list(new_channels), new_channels,
            check_existing=True, existing_policy=followers_existing_policy)

        # notify people from auto subscription, for example like assignation
        for (template, lang), pids in notify_data.items():
            self.with_context(lang=lang)._message_auto_subscribe_notify(pids, template)

        return True

    # ------------------------------------------------------
    # CONTROLLERS
    # ------------------------------------------------------

    def _get_mail_redirect_suggested_company(self):
        """ Return the suggested company to be set on the context
        in case of a mail redirection to the record. To avoid multi
        company issues when clicking on a link sent by email, this
        could be called to try setting the most suited company on
        the allowed_company_ids in the context. This method can be
        overridden, for example on the hr.leave model, where the
        most suited company is the company of the leave type, as
        specified by the ir.rule.
        """
        if 'company_id' in self:
            return self.company_id
        return False