diff options
author | sobomax <sobomax@FreeBSD.org> | 2009-11-21 08:18:04 +0800 |
---|---|---|
committer | sobomax <sobomax@FreeBSD.org> | 2009-11-21 08:18:04 +0800 |
commit | aa6646c50fe2f8a920d85acb2c253fd08bad81e5 (patch) | |
tree | 5dc592990ba3f89997b5eb89d6ad0423553d80eb /net | |
parent | 44f8ffc96935025b838aea502773f39fd073e3bb (diff) | |
download | freebsd-ports-gnome-aa6646c50fe2f8a920d85acb2c253fd08bad81e5.tar.gz freebsd-ports-gnome-aa6646c50fe2f8a920d85acb2c253fd08bad81e5.tar.zst freebsd-ports-gnome-aa6646c50fe2f8a920d85acb2c253fd08bad81e5.zip |
Add sippy_b2bua 1.0.2, SIP Back-to-back user agent (B2BUA) server with
Radius support.
Diffstat (limited to 'net')
-rw-r--r-- | net/Makefile | 1 | ||||
-rw-r--r-- | net/sippy_b2bua/Makefile | 29 | ||||
-rw-r--r-- | net/sippy_b2bua/distinfo | 3 | ||||
-rw-r--r-- | net/sippy_b2bua/pkg-descr | 25 | ||||
-rw-r--r-- | net/sippy_b2bua/pkg-plist | 240 |
5 files changed, 298 insertions, 0 deletions
diff --git a/net/Makefile b/net/Makefile index 683c8278023d..c9e7f5278815 100644 --- a/net/Makefile +++ b/net/Makefile @@ -916,6 +916,7 @@ SUBDIR += silc-server SUBDIR += simpleproxy SUBDIR += sip_scenario + SUBDIR += sippy_b2bua SUBDIR += siproxd SUBDIR += sipsak SUBDIR += sixxs-aiccu diff --git a/net/sippy_b2bua/Makefile b/net/sippy_b2bua/Makefile new file mode 100644 index 000000000000..508651ff9e37 --- /dev/null +++ b/net/sippy_b2bua/Makefile @@ -0,0 +1,29 @@ +# New ports collection makefile for: pychecker +# Date created: 20 November 2009 +# Whom: Maxim Sobolev <sobomax@FreeBSD.org> +# +# $FreeBSD$ +# + +PORTNAME= sippy_b2bua +PORTVERSION= 1.0.2 +CATEGORIES= net python +MASTER_SITES= http://www.b2bua.org/chrome/site/ +DISTNAME= sippy-${PORTVERSION} + +MAINTAINER= sobomax@FreeBSD.org +COMMENT= SIP Back-to-back user agent (B2BUA) server with Radius support + +USE_PYTHON= yes +USE_PYDISTUTILS= yes +PYDISTUTILS_PKGNAME= sippy + +DOCS= COPYING README + +.if !defined(NOPORTDOCS) +post-install: + @${MKDIR} ${DOCSDIR} + cd ${WRKSRC} && ${INSTALL_DATA} ${DOCS} ${DOCSDIR} +.endif + +.include <bsd.port.mk> diff --git a/net/sippy_b2bua/distinfo b/net/sippy_b2bua/distinfo new file mode 100644 index 000000000000..8d8873985e48 --- /dev/null +++ b/net/sippy_b2bua/distinfo @@ -0,0 +1,3 @@ +MD5 (sippy-1.0.2.tar.gz) = 3e77d5677d852086a720e7bac17ae836 +SHA256 (sippy-1.0.2.tar.gz) = bdc14cf497b788fb6260bc020781a03a4a0604a61b2b7c5265a447b6175912cb +SIZE (sippy-1.0.2.tar.gz) = 54678 diff --git a/net/sippy_b2bua/pkg-descr b/net/sippy_b2bua/pkg-descr new file mode 100644 index 000000000000..f3daface472c --- /dev/null +++ b/net/sippy_b2bua/pkg-descr @@ -0,0 +1,25 @@ +Sippy B2BUA is a RFC3261-compliant Session Initiation Protocol (SIP) +Back-to-back user agent (B2BUA) server software. + +The B2BUA is a SIP call controlling component. Unlike a SIP proxy, which only +maintains transaction state, the B2BUA maintains complete call state and +participates in all call requests. For this reason it can perform number of +functions that are not possible to implement using SIP proxy, such as for +example accurate call accounting, pre-paid rating and billing, fail over call +routing etc. Unlike PBX-type solutions such as Asterisk for example, the B2BUA +doesn't perform any media relaying or processing, therefore it doesn't +introduce any additional packet loss, delay or jitter into the media path. + +Features: + o Realtime calls control and call data records (CDRs) generation; + o Optional ability to use Sippy RTPproxy for media relaying; + o Optional ability to perform Cisco-compatible RADIUS AAA (Authentication, + Authorization and Accounting); + o RFC3261 compliance; + o RFC3326 support; + o IPv6 support; + o Seamless compatibility with majority of popular SIP software and hardware + on the market today; + o Robustness and Resilience. + +WWW: http://www.b2bua.org/ diff --git a/net/sippy_b2bua/pkg-plist b/net/sippy_b2bua/pkg-plist new file mode 100644 index 000000000000..1c124b2c9229 --- /dev/null +++ b/net/sippy_b2bua/pkg-plist @@ -0,0 +1,240 @@ +bin/b2bua_radius.py +bin/b2bua_simple.py +%%PYTHON_SITELIBDIR%%/sippy/CCEvents.py +%%PYTHON_SITELIBDIR%%/sippy/CCEvents.pyc +%%PYTHON_SITELIBDIR%%/sippy/CCEvents.pyo +%%PYTHON_SITELIBDIR%%/sippy/Cli_server_local.py +%%PYTHON_SITELIBDIR%%/sippy/Cli_server_local.pyc +%%PYTHON_SITELIBDIR%%/sippy/Cli_server_local.pyo +%%PYTHON_SITELIBDIR%%/sippy/Cli_session.py +%%PYTHON_SITELIBDIR%%/sippy/Cli_session.pyc +%%PYTHON_SITELIBDIR%%/sippy/Cli_session.pyo +%%PYTHON_SITELIBDIR%%/sippy/ESipHeaderCSV.py +%%PYTHON_SITELIBDIR%%/sippy/ESipHeaderCSV.pyc +%%PYTHON_SITELIBDIR%%/sippy/ESipHeaderCSV.pyo +%%PYTHON_SITELIBDIR%%/sippy/ESipHeaderIgnore.py +%%PYTHON_SITELIBDIR%%/sippy/ESipHeaderIgnore.pyc +%%PYTHON_SITELIBDIR%%/sippy/ESipHeaderIgnore.pyo +%%PYTHON_SITELIBDIR%%/sippy/External_command.py +%%PYTHON_SITELIBDIR%%/sippy/External_command.pyc +%%PYTHON_SITELIBDIR%%/sippy/External_command.pyo +%%PYTHON_SITELIBDIR%%/sippy/FakeAccounting.py +%%PYTHON_SITELIBDIR%%/sippy/FakeAccounting.pyc +%%PYTHON_SITELIBDIR%%/sippy/FakeAccounting.pyo +%%PYTHON_SITELIBDIR%%/sippy/MsgBody.py +%%PYTHON_SITELIBDIR%%/sippy/MsgBody.pyc +%%PYTHON_SITELIBDIR%%/sippy/MsgBody.pyo +%%PYTHON_SITELIBDIR%%/sippy/RadiusAccounting.py +%%PYTHON_SITELIBDIR%%/sippy/RadiusAccounting.pyc +%%PYTHON_SITELIBDIR%%/sippy/RadiusAccounting.pyo +%%PYTHON_SITELIBDIR%%/sippy/RadiusAuthorisation.py +%%PYTHON_SITELIBDIR%%/sippy/RadiusAuthorisation.pyc +%%PYTHON_SITELIBDIR%%/sippy/RadiusAuthorisation.pyo +%%PYTHON_SITELIBDIR%%/sippy/Radius_client.py +%%PYTHON_SITELIBDIR%%/sippy/Radius_client.pyc +%%PYTHON_SITELIBDIR%%/sippy/Radius_client.pyo +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_client_local.py +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_client_local.pyc +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_client_local.pyo +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_client_udp.py +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_client_udp.pyc +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_client_udp.pyo +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_session.py +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_session.pyc +%%PYTHON_SITELIBDIR%%/sippy/Rtp_proxy_session.pyo +%%PYTHON_SITELIBDIR%%/sippy/SdpBody.py +%%PYTHON_SITELIBDIR%%/sippy/SdpBody.pyc +%%PYTHON_SITELIBDIR%%/sippy/SdpBody.pyo +%%PYTHON_SITELIBDIR%%/sippy/SdpConnecton.py +%%PYTHON_SITELIBDIR%%/sippy/SdpConnecton.pyc +%%PYTHON_SITELIBDIR%%/sippy/SdpConnecton.pyo +%%PYTHON_SITELIBDIR%%/sippy/SdpGeneric.py +%%PYTHON_SITELIBDIR%%/sippy/SdpGeneric.pyc +%%PYTHON_SITELIBDIR%%/sippy/SdpGeneric.pyo +%%PYTHON_SITELIBDIR%%/sippy/SdpMedia.py +%%PYTHON_SITELIBDIR%%/sippy/SdpMedia.pyc +%%PYTHON_SITELIBDIR%%/sippy/SdpMedia.pyo +%%PYTHON_SITELIBDIR%%/sippy/SdpMediaDescription.py +%%PYTHON_SITELIBDIR%%/sippy/SdpMediaDescription.pyc +%%PYTHON_SITELIBDIR%%/sippy/SdpMediaDescription.pyo +%%PYTHON_SITELIBDIR%%/sippy/SdpOrigin.py +%%PYTHON_SITELIBDIR%%/sippy/SdpOrigin.pyc +%%PYTHON_SITELIBDIR%%/sippy/SdpOrigin.pyo +%%PYTHON_SITELIBDIR%%/sippy/Signal.py +%%PYTHON_SITELIBDIR%%/sippy/Signal.pyc +%%PYTHON_SITELIBDIR%%/sippy/Signal.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipAddress.py +%%PYTHON_SITELIBDIR%%/sippy/SipAddress.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipAddress.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipAddressHF.py +%%PYTHON_SITELIBDIR%%/sippy/SipAddressHF.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipAddressHF.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipAlso.py +%%PYTHON_SITELIBDIR%%/sippy/SipAlso.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipAlso.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipAuthorization.py +%%PYTHON_SITELIBDIR%%/sippy/SipAuthorization.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipAuthorization.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipCCDiversion.py +%%PYTHON_SITELIBDIR%%/sippy/SipCCDiversion.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipCCDiversion.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipCSeq.py +%%PYTHON_SITELIBDIR%%/sippy/SipCSeq.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipCSeq.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipCallId.py +%%PYTHON_SITELIBDIR%%/sippy/SipCallId.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipCallId.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipCiscoGUID.py +%%PYTHON_SITELIBDIR%%/sippy/SipCiscoGUID.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipCiscoGUID.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipConf.py +%%PYTHON_SITELIBDIR%%/sippy/SipConf.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipConf.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipContact.py +%%PYTHON_SITELIBDIR%%/sippy/SipContact.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipContact.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipContentLength.py +%%PYTHON_SITELIBDIR%%/sippy/SipContentLength.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipContentLength.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipContentType.py +%%PYTHON_SITELIBDIR%%/sippy/SipContentType.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipContentType.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipExpires.py +%%PYTHON_SITELIBDIR%%/sippy/SipExpires.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipExpires.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipFrom.py +%%PYTHON_SITELIBDIR%%/sippy/SipFrom.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipFrom.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipGenericHF.py +%%PYTHON_SITELIBDIR%%/sippy/SipGenericHF.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipGenericHF.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipHeader.py +%%PYTHON_SITELIBDIR%%/sippy/SipHeader.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipHeader.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipLogger.py +%%PYTHON_SITELIBDIR%%/sippy/SipLogger.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipLogger.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipMaxForwards.py +%%PYTHON_SITELIBDIR%%/sippy/SipMaxForwards.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipMaxForwards.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipMsg.py +%%PYTHON_SITELIBDIR%%/sippy/SipMsg.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipMsg.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipNumericHF.py +%%PYTHON_SITELIBDIR%%/sippy/SipNumericHF.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipNumericHF.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipPAssertedIdentity.py +%%PYTHON_SITELIBDIR%%/sippy/SipPAssertedIdentity.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipPAssertedIdentity.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipProxyAuthenticate.py +%%PYTHON_SITELIBDIR%%/sippy/SipProxyAuthenticate.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipProxyAuthenticate.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipProxyAuthorization.py +%%PYTHON_SITELIBDIR%%/sippy/SipProxyAuthorization.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipProxyAuthorization.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipRecordRoute.py +%%PYTHON_SITELIBDIR%%/sippy/SipRecordRoute.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipRecordRoute.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipReferTo.py +%%PYTHON_SITELIBDIR%%/sippy/SipReferTo.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipReferTo.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipReferredBy.py +%%PYTHON_SITELIBDIR%%/sippy/SipReferredBy.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipReferredBy.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipReplaces.py +%%PYTHON_SITELIBDIR%%/sippy/SipReplaces.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipReplaces.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipRequest.py +%%PYTHON_SITELIBDIR%%/sippy/SipRequest.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipRequest.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipResponse.py +%%PYTHON_SITELIBDIR%%/sippy/SipResponse.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipResponse.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipRoute.py +%%PYTHON_SITELIBDIR%%/sippy/SipRoute.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipRoute.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipServer.py +%%PYTHON_SITELIBDIR%%/sippy/SipServer.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipServer.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipTo.py +%%PYTHON_SITELIBDIR%%/sippy/SipTo.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipTo.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipTransactionManager.py +%%PYTHON_SITELIBDIR%%/sippy/SipTransactionManager.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipTransactionManager.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipURL.py +%%PYTHON_SITELIBDIR%%/sippy/SipURL.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipURL.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipUserAgent.py +%%PYTHON_SITELIBDIR%%/sippy/SipUserAgent.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipUserAgent.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipVia.py +%%PYTHON_SITELIBDIR%%/sippy/SipVia.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipVia.pyo +%%PYTHON_SITELIBDIR%%/sippy/SipWWWAuthenticate.py +%%PYTHON_SITELIBDIR%%/sippy/SipWWWAuthenticate.pyc +%%PYTHON_SITELIBDIR%%/sippy/SipWWWAuthenticate.pyo +%%PYTHON_SITELIBDIR%%/sippy/Timeout.py +%%PYTHON_SITELIBDIR%%/sippy/Timeout.pyc +%%PYTHON_SITELIBDIR%%/sippy/Timeout.pyo +%%PYTHON_SITELIBDIR%%/sippy/UA.py +%%PYTHON_SITELIBDIR%%/sippy/UA.pyc +%%PYTHON_SITELIBDIR%%/sippy/UA.pyo +%%PYTHON_SITELIBDIR%%/sippy/UaStateConnected.py +%%PYTHON_SITELIBDIR%%/sippy/UaStateConnected.pyc +%%PYTHON_SITELIBDIR%%/sippy/UaStateConnected.pyo +%%PYTHON_SITELIBDIR%%/sippy/UaStateDead.py +%%PYTHON_SITELIBDIR%%/sippy/UaStateDead.pyc +%%PYTHON_SITELIBDIR%%/sippy/UaStateDead.pyo +%%PYTHON_SITELIBDIR%%/sippy/UaStateDisconnected.py +%%PYTHON_SITELIBDIR%%/sippy/UaStateDisconnected.pyc +%%PYTHON_SITELIBDIR%%/sippy/UaStateDisconnected.pyo +%%PYTHON_SITELIBDIR%%/sippy/UaStateFailed.py +%%PYTHON_SITELIBDIR%%/sippy/UaStateFailed.pyc +%%PYTHON_SITELIBDIR%%/sippy/UaStateFailed.pyo +%%PYTHON_SITELIBDIR%%/sippy/UaStateGeneric.py +%%PYTHON_SITELIBDIR%%/sippy/UaStateGeneric.pyc +%%PYTHON_SITELIBDIR%%/sippy/UaStateGeneric.pyo +%%PYTHON_SITELIBDIR%%/sippy/UacStateCancelling.py +%%PYTHON_SITELIBDIR%%/sippy/UacStateCancelling.pyc +%%PYTHON_SITELIBDIR%%/sippy/UacStateCancelling.pyo +%%PYTHON_SITELIBDIR%%/sippy/UacStateIdle.py +%%PYTHON_SITELIBDIR%%/sippy/UacStateIdle.pyc +%%PYTHON_SITELIBDIR%%/sippy/UacStateIdle.pyo +%%PYTHON_SITELIBDIR%%/sippy/UacStateRinging.py +%%PYTHON_SITELIBDIR%%/sippy/UacStateRinging.pyc +%%PYTHON_SITELIBDIR%%/sippy/UacStateRinging.pyo +%%PYTHON_SITELIBDIR%%/sippy/UacStateTrying.py +%%PYTHON_SITELIBDIR%%/sippy/UacStateTrying.pyc +%%PYTHON_SITELIBDIR%%/sippy/UacStateTrying.pyo +%%PYTHON_SITELIBDIR%%/sippy/UacStateUpdating.py +%%PYTHON_SITELIBDIR%%/sippy/UacStateUpdating.pyc +%%PYTHON_SITELIBDIR%%/sippy/UacStateUpdating.pyo +%%PYTHON_SITELIBDIR%%/sippy/UasStateIdle.py +%%PYTHON_SITELIBDIR%%/sippy/UasStateIdle.pyc +%%PYTHON_SITELIBDIR%%/sippy/UasStateIdle.pyo +%%PYTHON_SITELIBDIR%%/sippy/UasStateRinging.py +%%PYTHON_SITELIBDIR%%/sippy/UasStateRinging.pyc +%%PYTHON_SITELIBDIR%%/sippy/UasStateRinging.pyo +%%PYTHON_SITELIBDIR%%/sippy/UasStateTrying.py +%%PYTHON_SITELIBDIR%%/sippy/UasStateTrying.pyc +%%PYTHON_SITELIBDIR%%/sippy/UasStateTrying.pyo +%%PYTHON_SITELIBDIR%%/sippy/UasStateUpdating.py +%%PYTHON_SITELIBDIR%%/sippy/UasStateUpdating.pyc +%%PYTHON_SITELIBDIR%%/sippy/UasStateUpdating.pyo +%%PYTHON_SITELIBDIR%%/sippy/Udp_server.py +%%PYTHON_SITELIBDIR%%/sippy/Udp_server.pyc +%%PYTHON_SITELIBDIR%%/sippy/Udp_server.pyo +%%PYTHON_SITELIBDIR%%/sippy/__init__.py +%%PYTHON_SITELIBDIR%%/sippy/__init__.pyc +%%PYTHON_SITELIBDIR%%/sippy/__init__.pyo +%%PYTHON_SITELIBDIR%%/sippy/b2bua_radius.py +%%PYTHON_SITELIBDIR%%/sippy/b2bua_radius.pyc +%%PYTHON_SITELIBDIR%%/sippy/b2bua_radius.pyo +%%PYTHON_SITELIBDIR%%/sippy/b2bua_simple.py +%%PYTHON_SITELIBDIR%%/sippy/b2bua_simple.pyc +%%PYTHON_SITELIBDIR%%/sippy/b2bua_simple.pyo +@dirrm %%PYTHON_SITELIBDIR%%/sippy +%%PORTDOCS%%%%DOCSDIR%%/COPYING +%%PORTDOCS%%%%DOCSDIR%%/README +%%PORTDOCS%%@dirrm %%DOCSDIR%% |