master
mr26.3.1
mr26.0.1
mr13.5.1
mr12.5.1
mr26.3
mr26.0
mr13.5
mr12.5
mr26.2.1
mr26.2
mr26.1.1
mr26.1
mr11.5.1
mr11.5
mr14.1.1
mr14.1
mr13.3.1
mr13.2.1
mr13.1.1
mr13.0.1
mr14.0.1
mr13.0
mr13.1
mr13.2
mr13.3
mr14.0
mr13.4.1
mr13.4
mr10.5
mr10.5.9
mr10.5.8
mr10.5.7
mr12.4.1
mr12.3.1
mr12.2.1
mr12.1.1
mr12.0.1
mr11.4.1
mr11.3.1
mr12.4
mr12.3
mr12.2
mr12.1
mr12.0
mr11.4
mr11.3
mr10.5.3
mr9.5
mr9.5.9
mr10.5.2
mr9.5.1
mr9.5.2
mr9.5.3
mr9.5.4
mr9.5.5
mr9.5.6
mr9.5.7
mr9.5.8
mr10.5.1
mr10.5.4
mr10.5.5
mr10.5.6
mr8.5
mr8.5.12
mr8.5.11
mr11.2.1
mr11.1.1
mr11.0.1
mr10.4.1
mr10.3.1
mr10.2.1
mr10.1.1
mr10.0.1
mr9.4.1
mr9.3.1
mr9.2.1
mr9.1.1
mr9.0.1
mr8.5.10
mr8.5.9
mr8.5.8
mr8.5.7
mr8.5.6
mr8.5.5
mr8.5.4
mr8.5.3
mr8.5.2
mr8.5.1
mr11.2
mr11.1
mr11.0
mr10.4
mr10.3
mr10.2
mr10.1
mr10.0
mr9.4
mr9.3
mr9.2
mr9.1
mr9.0
mr7.5.5
mr7.5
mr7.5.13
mr7.5.12
mr7.5.6
mr7.5.11
mr7.5.9
mr6.5
mr6.5.13
mr7.5.10
mr6.5.11
mr6.5.10
mr6.5.12
mr6.5.9
mr7.5.4
mr7.5.8
mr6.5.1
mr6.5.2
mr6.5.3
mr6.5.4
mr6.5.5
mr6.5.6
mr6.5.7
mr6.5.8
mr7.5.1
mr7.5.2
mr7.5.3
mr7.5.7
mr8.4.2
mr5.5
mr5.5.13
mr8.4
mr8.3.2
mr8.4.1
mr8.3
mr5.5.12
mr5.5.11
mr5.5.10
mr8.3.1
mr8.2
mr8.1
mr8.0
mr8.1.1
mr8.2.2
mr8.2.1
mr8.1.2
mr8.0.2
mr7.3.2
mr8.0.1
mr7.4.2
mr7.4
mr5.5.6
mr5.5.7
mr5.5.8
mr5.5.9
mr4.5
mr4.5.13
mr5.5.5
mr7.4.1
mr6.0.2
mr6.1.2
mr6.2.2
mr6.3.2
mr6.4.2
mr6.0
mr6.1
mr6.2
mr6.3
mr6.4
mr4.5.12
mr7.3
mr7.3.1
mr4.5.4
mr7.2
mr7.2.2
mr7.0
mr7.1
mr7.2.1
mr7.0.2
mr7.1.2
mr7.1.1
mr7.0.1
mr4.5.11
mr5.5.1
mr5.5.2
mr5.5.3
mr5.5.4
mr6.0.1
mr6.1.1
mr6.2.1
mr6.3.1
mr6.4.1
mr4.5.10
mr3.8
mr3.8.13
mr4.5.9
mr4.5.8
mr4.3.1
mr4.3.2
mr4.3
mr4.4.1
mr4.4.2
mr4.4
mr4.5.7
mr5.4.2
mr4.5.6
mr5.4
mr3.8.12
mr5.4.1
mr5.3
mr3.8.11
mr5.3.2
mr4.5.3
mr4.5.5
mr5.2
mr5.2.1
mr5.3.1
mr3.8.10
mr5.2.2
mr5.1
mr5.1.2
mr5.1.1
mr5.0
ipeshinskaya/17173_remove_code_save_2017_02_26
ipeshinskaya/sms
mr5.0.2
mr5.0.1
mr3.8.9
mr3.8.8
mr4.5.2
mr3.8.7
ipeshinskaya/master
mr4.5.1
ipeshinskaya/17173_save_2016_08_31_00
ipeshinskaya/17173
ipeshinskaya/17173_2016_08_31_00
mr3.8.6
mr3.8.5
mr3.8.4
ipeshinskaya/paths
ieshinskaya/autologin
ipeshinskaya/14253_script_only
mr4.2.2
mr4.2
rkrenn/lnp_unique
mr4.2.1
mr4.1
ipeshinskaya/15213_cloudpbx_patch
rkrenn/apidump_tempfiles
ipeshinskaya/testscache
ipeshinskaya/17173_code_reduce_example_review
ipeshinskaya/17173_code_reduction_example_review
mr4.1.2
mr4.1.1
mr3.8.3
ipeshinskaya/17173_inheritance_pure
ipeshinskaya/17173_inheritance_clear
ipeshinskaya/17173_moo
rkrenn/callist
ipeshinskaya/api_0
mr4.0
ipeshinskaya/autotests
mr4.0.2
apogrebennyk/14659_mr384
mr4.0.1
mprokop/docker
ipeshinskaya/12347
agranig/multi-billprof
alutay/MT14585_more_rest_api
mr3.7.2
mr3.7.1
mr3.7
ipeshinskaya/14767
mr3.8.1
mr3.8.2
ipeshinskaya/14767_1
ipeshinskaya/lost
agranig/baseclean
gjungwirth/img_api
ipeshinskaya/11147_2
ipeshinskaya/11147
mr3.6.2
mr3.6.1
mr3.6
ipeshinskaya/5435
ipeshinskaya/10715
ipeshinskaya/9177
mr3.5.1
mr3.5
mr3.4.2
mr3.4
mprokop/10181
mr3.4.1
agranig/gpp
ipeshinskaya/9431
ipeshinskaya/InvoiceTemplate6
agranig/webphone
mr3.3.2
mr3.3
1.1
agranig/8279-csc-normalize-number
gjungwirth/email_test
agranig/pbx-dev-map
gjungwirth/voicemail_number
mr3.3.1
mr3.2.2
ipeshinskaya/InvoiceTemplate5
mr3.2
agranig/subprof
agranig/selfsignup
mr3.2.1
agranig/dummydel
agranig/pbxapi
gjungwirth/testcover
gjungwirth/test_sleeps
apogrebennyk/3_1_force_outbound
agranig/mt5661_update_prepaid
agranig/auth-refactoring
gjungwirth/fix_tests
agranig/rest
ldieckow/rest
apogrebennyk/preloaded_route_1_0
1.0
agranig/1_0_subfix
ldieckow/cert-manage
agranig/peering-route
1.1.17
1.1.16
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.7
1.1.6
1.1.5
1.0.26
1.0.25
1.1.4
1.1.2
1.0.22
1.1.0
1.0.19
1.0.18
1.0.17
1.0.16
1.0.14
1.0.13
1.0.12
1.0.11
1.0.10
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.15
1.0.20
1.0.21
1.0.23
1.0.24
1.1.1
1.1.14
1.1.15
1.1.3
1.1.8
mr10.0.1.1
mr10.0.1.10
mr10.0.1.11
mr10.0.1.12
mr10.0.1.2
mr10.0.1.3
mr10.0.1.4
mr10.0.1.5
mr10.0.1.6
mr10.0.1.7
mr10.0.1.8
mr10.0.1.9
mr10.1.1.1
mr10.1.1.10
mr10.1.1.11
mr10.1.1.12
mr10.1.1.13
mr10.1.1.2
mr10.1.1.3
mr10.1.1.4
mr10.1.1.5
mr10.1.1.6
mr10.1.1.7
mr10.1.1.8
mr10.1.1.9
mr10.2.1.1
mr10.2.1.2
mr10.2.1.3
mr10.2.1.4
mr10.2.1.5
mr10.2.1.6
mr10.2.1.7
mr10.2.1.8
mr10.2.1.9
mr10.3.1.1
mr10.3.1.2
mr10.3.1.3
mr10.3.1.4
mr10.3.1.5
mr10.3.1.6
mr10.3.1.7
mr10.4.1.1
mr10.4.1.2
mr10.4.1.3
mr10.4.1.4
mr10.4.1.5
mr10.4.1.6
mr10.4.1.7
mr10.4.1.8
mr10.5.1.1
mr10.5.1.10
mr10.5.1.11
mr10.5.1.12
mr10.5.1.13
mr10.5.1.14
mr10.5.1.15
mr10.5.1.16
mr10.5.1.17
mr10.5.1.18
mr10.5.1.19
mr10.5.1.2
mr10.5.1.20
mr10.5.1.21
mr10.5.1.22
mr10.5.1.23
mr10.5.1.24
mr10.5.1.25
mr10.5.1.26
mr10.5.1.27
mr10.5.1.28
mr10.5.1.29
mr10.5.1.3
mr10.5.1.30
mr10.5.1.31
mr10.5.1.32
mr10.5.1.33
mr10.5.1.34
mr10.5.1.35
mr10.5.1.36
mr10.5.1.37
mr10.5.1.38
mr10.5.1.39
mr10.5.1.4
mr10.5.1.40
mr10.5.1.41
mr10.5.1.5
mr10.5.1.6
mr10.5.1.7
mr10.5.1.8
mr10.5.1.9
mr10.5.2.1
mr10.5.2.10
mr10.5.2.11
mr10.5.2.12
mr10.5.2.13
mr10.5.2.14
mr10.5.2.15
mr10.5.2.16
mr10.5.2.17
mr10.5.2.18
mr10.5.2.19
mr10.5.2.2
mr10.5.2.20
mr10.5.2.21
mr10.5.2.22
mr10.5.2.3
mr10.5.2.4
mr10.5.2.5
mr10.5.2.6
mr10.5.2.7
mr10.5.2.8
mr10.5.2.9
mr10.5.3.1
mr10.5.3.10
mr10.5.3.11
mr10.5.3.12
mr10.5.3.13
mr10.5.3.14
mr10.5.3.15
mr10.5.3.2
mr10.5.3.3
mr10.5.3.4
mr10.5.3.5
mr10.5.3.6
mr10.5.3.7
mr10.5.3.8
mr10.5.3.9
mr10.5.4.1
mr10.5.4.10
mr10.5.4.2
mr10.5.4.3
mr10.5.4.4
mr10.5.4.5
mr10.5.4.6
mr10.5.4.7
mr10.5.4.8
mr10.5.4.9
mr10.5.5.1
mr10.5.5.10
mr10.5.5.11
mr10.5.5.2
mr10.5.5.3
mr10.5.5.4
mr10.5.5.5
mr10.5.5.6
mr10.5.5.7
mr10.5.5.8
mr10.5.5.9
mr10.5.6.1
mr10.5.6.2
mr10.5.6.3
mr10.5.6.4
mr10.5.6.5
mr10.5.6.6
mr10.5.6.7
mr10.5.7.1
mr10.5.7.2
mr10.5.7.3
mr10.5.8.1
mr10.5.8.2
mr10.5.8.3
mr10.5.8.4
mr10.5.9.1
mr11.0.1.1
mr11.0.1.10
mr11.0.1.11
mr11.0.1.12
mr11.0.1.2
mr11.0.1.3
mr11.0.1.4
mr11.0.1.5
mr11.0.1.6
mr11.0.1.7
mr11.0.1.8
mr11.0.1.9
mr11.1.1.1
mr11.1.1.10
mr11.1.1.11
mr11.1.1.12
mr11.1.1.2
mr11.1.1.3
mr11.1.1.4
mr11.1.1.5
mr11.1.1.6
mr11.1.1.7
mr11.1.1.8
mr11.1.1.9
mr11.2.1.1
mr11.2.1.10
mr11.2.1.11
mr11.2.1.2
mr11.2.1.3
mr11.2.1.4
mr11.2.1.5
mr11.2.1.6
mr11.2.1.7
mr11.2.1.8
mr11.2.1.9
mr11.3.1.1
mr11.3.1.10
mr11.3.1.11
mr11.3.1.12
mr11.3.1.13
mr11.3.1.14
mr11.3.1.15
mr11.3.1.16
mr11.3.1.17
mr11.3.1.18
mr11.3.1.19
mr11.3.1.2
mr11.3.1.20
mr11.3.1.21
mr11.3.1.3
mr11.3.1.4
mr11.3.1.5
mr11.3.1.6
mr11.3.1.7
mr11.3.1.8
mr11.3.1.9
mr11.4.1.1
mr11.4.1.2
mr11.4.1.3
mr11.4.1.4
mr11.4.1.5
mr11.4.1.6
mr11.4.1.7
mr11.5.1.1
mr11.5.1.10
mr11.5.1.11
mr11.5.1.12
mr11.5.1.13
mr11.5.1.14
mr11.5.1.15
mr11.5.1.16
mr11.5.1.17
mr11.5.1.18
mr11.5.1.19
mr11.5.1.2
mr11.5.1.20
mr11.5.1.21
mr11.5.1.22
mr11.5.1.23
mr11.5.1.24
mr11.5.1.25
mr11.5.1.26
mr11.5.1.27
mr11.5.1.28
mr11.5.1.29
mr11.5.1.3
mr11.5.1.30
mr11.5.1.31
mr11.5.1.32
mr11.5.1.33
mr11.5.1.34
mr11.5.1.35
mr11.5.1.36
mr11.5.1.37
mr11.5.1.38
mr11.5.1.39
mr11.5.1.4
mr11.5.1.5
mr11.5.1.6
mr11.5.1.7
mr11.5.1.8
mr11.5.1.9
mr12.0.1.1
mr12.0.1.2
mr12.0.1.3
mr12.0.1.4
mr12.0.1.5
mr12.0.1.6
mr12.0.1.7
mr12.1.1.1
mr12.1.1.2
mr12.1.1.3
mr12.1.1.4
mr12.1.1.5
mr12.1.1.6
mr12.2.1.1
mr12.2.1.10
mr12.2.1.11
mr12.2.1.12
mr12.2.1.13
mr12.2.1.14
mr12.2.1.15
mr12.2.1.16
mr12.2.1.2
mr12.2.1.3
mr12.2.1.4
mr12.2.1.5
mr12.2.1.6
mr12.2.1.7
mr12.2.1.8
mr12.2.1.9
mr12.3.1.1
mr12.3.1.10
mr12.3.1.11
mr12.3.1.12
mr12.3.1.13
mr12.3.1.14
mr12.3.1.15
mr12.3.1.2
mr12.3.1.3
mr12.3.1.4
mr12.3.1.5
mr12.3.1.6
mr12.3.1.7
mr12.3.1.8
mr12.3.1.9
mr12.4.1.1
mr12.4.1.2
mr12.4.1.3
mr12.5.1.1
mr12.5.1.10
mr12.5.1.11
mr12.5.1.12
mr12.5.1.13
mr12.5.1.14
mr12.5.1.15
mr12.5.1.16
mr12.5.1.17
mr12.5.1.18
mr12.5.1.19
mr12.5.1.2
mr12.5.1.20
mr12.5.1.21
mr12.5.1.22
mr12.5.1.23
mr12.5.1.24
mr12.5.1.25
mr12.5.1.26
mr12.5.1.27
mr12.5.1.28
mr12.5.1.29
mr12.5.1.3
mr12.5.1.30
mr12.5.1.31
mr12.5.1.32
mr12.5.1.33
mr12.5.1.34
mr12.5.1.35
mr12.5.1.36
mr12.5.1.37
mr12.5.1.38
mr12.5.1.39
mr12.5.1.4
mr12.5.1.40
mr12.5.1.41
mr12.5.1.42
mr12.5.1.43
mr12.5.1.44
mr12.5.1.45
mr12.5.1.46
mr12.5.1.47
mr12.5.1.48
mr12.5.1.49
mr12.5.1.5
mr12.5.1.50
mr12.5.1.51
mr12.5.1.52
mr12.5.1.53
mr12.5.1.54
mr12.5.1.55
mr12.5.1.56
mr12.5.1.57
mr12.5.1.58
mr12.5.1.59
mr12.5.1.6
mr12.5.1.60
mr12.5.1.61
mr12.5.1.62
mr12.5.1.63
mr12.5.1.64
mr12.5.1.65
mr12.5.1.66
mr12.5.1.67
mr12.5.1.7
mr12.5.1.8
mr12.5.1.9
mr13.0.1.1
mr13.0.1.10
mr13.0.1.2
mr13.0.1.3
mr13.0.1.4
mr13.0.1.5
mr13.0.1.6
mr13.0.1.7
mr13.0.1.8
mr13.0.1.9
mr13.1.1.1
mr13.1.1.2
mr13.1.1.3
mr13.1.1.4
mr13.1.1.5
mr13.1.1.6
mr13.1.1.7
mr13.2.1.1
mr13.2.1.10
mr13.2.1.2
mr13.2.1.3
mr13.2.1.4
mr13.2.1.5
mr13.2.1.6
mr13.2.1.7
mr13.2.1.8
mr13.2.1.9
mr13.3.1.1
mr13.3.1.2
mr13.3.1.3
mr13.3.1.4
mr13.3.1.5
mr13.3.1.6
mr13.3.1.7
mr13.4.1.1
mr13.4.1.2
mr13.4.1.3
mr13.4.1.4
mr13.4.1.5
mr13.4.1.6
mr13.4.1.7
mr13.4.1.8
mr13.5.1.1
mr13.5.1.10
mr13.5.1.11
mr13.5.1.12
mr13.5.1.13
mr13.5.1.14
mr13.5.1.15
mr13.5.1.16
mr13.5.1.17
mr13.5.1.18
mr13.5.1.19
mr13.5.1.2
mr13.5.1.20
mr13.5.1.21
mr13.5.1.22
mr13.5.1.23
mr13.5.1.24
mr13.5.1.25
mr13.5.1.26
mr13.5.1.27
mr13.5.1.28
mr13.5.1.29
mr13.5.1.3
mr13.5.1.30
mr13.5.1.31
mr13.5.1.32
mr13.5.1.33
mr13.5.1.34
mr13.5.1.35
mr13.5.1.36
mr13.5.1.37
mr13.5.1.38
mr13.5.1.39
mr13.5.1.4
mr13.5.1.40
mr13.5.1.41
mr13.5.1.42
mr13.5.1.43
mr13.5.1.44
mr13.5.1.45
mr13.5.1.46
mr13.5.1.47
mr13.5.1.48
mr13.5.1.49
mr13.5.1.5
mr13.5.1.6
mr13.5.1.7
mr13.5.1.8
mr13.5.1.9
mr14.0.1.1
mr14.0.1.10
mr14.0.1.11
mr14.0.1.12
mr14.0.1.13
mr14.0.1.14
mr14.0.1.15
mr14.0.1.16
mr14.0.1.17
mr14.0.1.2
mr14.0.1.3
mr14.0.1.4
mr14.0.1.5
mr14.0.1.6
mr14.0.1.7
mr14.0.1.8
mr14.0.1.9
mr14.1.1.1
mr14.1.1.2
mr14.1.1.3
mr14.1.1.4
mr14.1.1.5
mr14.1.1.6
mr14.1.1.7
mr14.1.1.8
mr14.1.1.9
mr26.0.1.1
mr26.0.1.10
mr26.0.1.11
mr26.0.1.12
mr26.0.1.13
mr26.0.1.14
mr26.0.1.15
mr26.0.1.16
mr26.0.1.17
mr26.0.1.18
mr26.0.1.19
mr26.0.1.2
mr26.0.1.20
mr26.0.1.21
mr26.0.1.3
mr26.0.1.4
mr26.0.1.5
mr26.0.1.6
mr26.0.1.7
mr26.0.1.8
mr26.0.1.9
mr26.1.1.1
mr26.1.1.10
mr26.1.1.11
mr26.1.1.12
mr26.1.1.13
mr26.1.1.14
mr26.1.1.2
mr26.1.1.3
mr26.1.1.4
mr26.1.1.5
mr26.1.1.6
mr26.1.1.7
mr26.1.1.8
mr26.1.1.9
mr26.2.1.1
mr26.2.1.2
mr26.2.1.3
mr26.2.1.4
mr26.3.1.1
mr26.3.1.2
mr3.2.1.1
mr3.2.2.1
mr3.2.2.2
mr3.2.2.3
mr3.2.2.4
mr3.3.1.1
mr3.3.1.10
mr3.3.1.2
mr3.3.1.3
mr3.3.1.4
mr3.3.1.5
mr3.3.1.6
mr3.3.1.7
mr3.3.1.8
mr3.3.1.9
mr3.3.2.1
mr3.3.2.10
mr3.3.2.11
mr3.3.2.12
mr3.3.2.13
mr3.3.2.14
mr3.3.2.15
mr3.3.2.16
mr3.3.2.17
mr3.3.2.18
mr3.3.2.2
mr3.3.2.3
mr3.3.2.4
mr3.3.2.5
mr3.3.2.6
mr3.3.2.7
mr3.3.2.8
mr3.3.2.9
mr3.4.1.1
mr3.4.1.10
mr3.4.1.11
mr3.4.1.12
mr3.4.1.13
mr3.4.1.14
mr3.4.1.15
mr3.4.1.16
mr3.4.1.17
mr3.4.1.2
mr3.4.1.3
mr3.4.1.4
mr3.4.1.5
mr3.4.1.6
mr3.4.1.7
mr3.4.1.8
mr3.4.1.9
mr3.4.2.1
mr3.4.2.10
mr3.4.2.11
mr3.4.2.12
mr3.4.2.13
mr3.4.2.2
mr3.4.2.3
mr3.4.2.4
mr3.4.2.5
mr3.4.2.6
mr3.4.2.7
mr3.4.2.8
mr3.4.2.9
mr3.5.1.1
mr3.5.1.10
mr3.5.1.11
mr3.5.1.12
mr3.5.1.13
mr3.5.1.2
mr3.5.1.3
mr3.5.1.4
mr3.5.1.5
mr3.5.1.6
mr3.5.1.7
mr3.5.1.8
mr3.5.1.9
mr3.6.1.1
mr3.6.1.2
mr3.6.1.3
mr3.6.1.4
mr3.6.1.5
mr3.6.1.6
mr3.6.1.7
mr3.6.1.8
mr3.6.1.9
mr3.6.2.1
mr3.6.2.2
mr3.6.2.3
mr3.6.2.4
mr3.6.2.5
mr3.7.1.1
mr3.7.1.10
mr3.7.1.11
mr3.7.1.12
mr3.7.1.13
mr3.7.1.14
mr3.7.1.15
mr3.7.1.16
mr3.7.1.17
mr3.7.1.18
mr3.7.1.19
mr3.7.1.2
mr3.7.1.20
mr3.7.1.21
mr3.7.1.22
mr3.7.1.23
mr3.7.1.24
mr3.7.1.25
mr3.7.1.26
mr3.7.1.27
mr3.7.1.28
mr3.7.1.29
mr3.7.1.3
mr3.7.1.30
mr3.7.1.31
mr3.7.1.32
mr3.7.1.33
mr3.7.1.34
mr3.7.1.35
mr3.7.1.36
mr3.7.1.37
mr3.7.1.38
mr3.7.1.4
mr3.7.1.5
mr3.7.1.6
mr3.7.1.7
mr3.7.1.8
mr3.7.1.9
mr3.7.2.1
mr3.7.2.10
mr3.7.2.11
mr3.7.2.12
mr3.7.2.13
mr3.7.2.14
mr3.7.2.15
mr3.7.2.16
mr3.7.2.17
mr3.7.2.18
mr3.7.2.19
mr3.7.2.2
mr3.7.2.20
mr3.7.2.21
mr3.7.2.22
mr3.7.2.23
mr3.7.2.24
mr3.7.2.25
mr3.7.2.3
mr3.7.2.4
mr3.7.2.5
mr3.7.2.6
mr3.7.2.7
mr3.7.2.8
mr3.7.2.9
mr3.8.1.1
mr3.8.1.10
mr3.8.1.11
mr3.8.1.12
mr3.8.1.13
mr3.8.1.14
mr3.8.1.15
mr3.8.1.16
mr3.8.1.17
mr3.8.1.18
mr3.8.1.19
mr3.8.1.2
mr3.8.1.20
mr3.8.1.21
mr3.8.1.22
mr3.8.1.23
mr3.8.1.24
mr3.8.1.25
mr3.8.1.26
mr3.8.1.27
mr3.8.1.28
mr3.8.1.3
mr3.8.1.4
mr3.8.1.5
mr3.8.1.6
mr3.8.1.7
mr3.8.1.8
mr3.8.1.9
mr3.8.10.1
mr3.8.11.1
mr3.8.12.1
mr3.8.13.1
mr3.8.2.1
mr3.8.2.10
mr3.8.2.11
mr3.8.2.12
mr3.8.2.13
mr3.8.2.14
mr3.8.2.15
mr3.8.2.2
mr3.8.2.3
mr3.8.2.4
mr3.8.2.5
mr3.8.2.6
mr3.8.2.7
mr3.8.2.8
mr3.8.2.9
mr3.8.3.1
mr3.8.3.10
mr3.8.3.11
mr3.8.3.12
mr3.8.3.13
mr3.8.3.14
mr3.8.3.15
mr3.8.3.16
mr3.8.3.2
mr3.8.3.3
mr3.8.3.4
mr3.8.3.5
mr3.8.3.6
mr3.8.3.7
mr3.8.3.8
mr3.8.3.9
mr3.8.4.1
mr3.8.4.10
mr3.8.4.11
mr3.8.4.12
mr3.8.4.13
mr3.8.4.14
mr3.8.4.15
mr3.8.4.16
mr3.8.4.17
mr3.8.4.18
mr3.8.4.2
mr3.8.4.3
mr3.8.4.4
mr3.8.4.5
mr3.8.4.6
mr3.8.4.7
mr3.8.4.8
mr3.8.4.9
mr3.8.5.1
mr3.8.5.10
mr3.8.5.11
mr3.8.5.12
mr3.8.5.13
mr3.8.5.14
mr3.8.5.15
mr3.8.5.16
mr3.8.5.2
mr3.8.5.3
mr3.8.5.4
mr3.8.5.5
mr3.8.5.6
mr3.8.5.7
mr3.8.5.8
mr3.8.5.9
mr3.8.6.1
mr3.8.6.10
mr3.8.6.2
mr3.8.6.3
mr3.8.6.4
mr3.8.6.5
mr3.8.6.6
mr3.8.6.7
mr3.8.6.8
mr3.8.6.9
mr3.8.7.1
mr3.8.7.10
mr3.8.7.2
mr3.8.7.3
mr3.8.7.4
mr3.8.7.5
mr3.8.7.6
mr3.8.7.7
mr3.8.7.8
mr3.8.7.9
mr3.8.8.1
mr3.8.8.2
mr3.8.8.3
mr3.8.8.4
mr3.8.8.5
mr3.8.9.1
mr4.0.1.1
mr4.0.1.10
mr4.0.1.11
mr4.0.1.12
mr4.0.1.13
mr4.0.1.14
mr4.0.1.15
mr4.0.1.16
mr4.0.1.17
mr4.0.1.2
mr4.0.1.3
mr4.0.1.4
mr4.0.1.5
mr4.0.1.6
mr4.0.1.7
mr4.0.1.8
mr4.0.1.9
mr4.0.2.1
mr4.1.1.1
mr4.1.1.10
mr4.1.1.11
mr4.1.1.12
mr4.1.1.13
mr4.1.1.14
mr4.1.1.2
mr4.1.1.3
mr4.1.1.4
mr4.1.1.5
mr4.1.1.6
mr4.1.1.7
mr4.1.1.8
mr4.1.1.9
mr4.1.2.1
mr4.1.2.2
mr4.1.2.3
mr4.1.2.4
mr4.2.1.1
mr4.2.1.10
mr4.2.1.11
mr4.2.1.12
mr4.2.1.13
mr4.2.1.14
mr4.2.1.15
mr4.2.1.16
mr4.2.1.17
mr4.2.1.2
mr4.2.1.3
mr4.2.1.4
mr4.2.1.5
mr4.2.1.6
mr4.2.1.7
mr4.2.1.8
mr4.2.1.9
mr4.2.2.1
mr4.2.2.2
mr4.2.2.3
mr4.2.2.4
mr4.2.2.5
mr4.2.2.6
mr4.3.1.1
mr4.3.1.10
mr4.3.1.11
mr4.3.1.12
mr4.3.1.13
mr4.3.1.14
mr4.3.1.15
mr4.3.1.16
mr4.3.1.17
mr4.3.1.2
mr4.3.1.3
mr4.3.1.4
mr4.3.1.5
mr4.3.1.6
mr4.3.1.7
mr4.3.1.8
mr4.3.1.9
mr4.3.2.1
mr4.3.2.2
mr4.3.2.3
mr4.3.2.4
mr4.4.1.1
mr4.4.1.10
mr4.4.1.11
mr4.4.1.12
mr4.4.1.13
mr4.4.1.14
mr4.4.1.15
mr4.4.1.2
mr4.4.1.3
mr4.4.1.4
mr4.4.1.5
mr4.4.1.6
mr4.4.1.7
mr4.4.1.8
mr4.4.1.9
mr4.4.2.1
mr4.4.2.2
mr4.4.2.3
mr4.5.1.1
mr4.5.1.10
mr4.5.1.11
mr4.5.1.12
mr4.5.1.13
mr4.5.1.2
mr4.5.1.3
mr4.5.1.4
mr4.5.1.5
mr4.5.1.6
mr4.5.1.7
mr4.5.1.8
mr4.5.1.9
mr4.5.10.1
mr4.5.11.1
mr4.5.12.1
mr4.5.12.2
mr4.5.13.1
mr4.5.2.1
mr4.5.2.10
mr4.5.2.11
mr4.5.2.12
mr4.5.2.13
mr4.5.2.14
mr4.5.2.15
mr4.5.2.16
mr4.5.2.2
mr4.5.2.3
mr4.5.2.4
mr4.5.2.5
mr4.5.2.6
mr4.5.2.7
mr4.5.2.8
mr4.5.2.9
mr4.5.3.1
mr4.5.3.10
mr4.5.3.2
mr4.5.3.3
mr4.5.3.4
mr4.5.3.5
mr4.5.3.6
mr4.5.3.7
mr4.5.3.8
mr4.5.3.9
mr4.5.4.1
mr4.5.4.2
mr4.5.4.3
mr4.5.4.4
mr4.5.4.5
mr4.5.4.6
mr4.5.4.7
mr4.5.4.8
mr4.5.4.9
mr4.5.5.1
mr4.5.5.2
mr4.5.5.3
mr4.5.6.1
mr4.5.6.2
mr4.5.6.3
mr4.5.7.1
mr4.5.8.1
mr4.5.9.1
mr5.0.1.1
mr5.0.1.10
mr5.0.1.2
mr5.0.1.3
mr5.0.1.4
mr5.0.1.5
mr5.0.1.6
mr5.0.1.7
mr5.0.1.8
mr5.0.1.9
mr5.0.2.1
mr5.0.2.2
mr5.1.1.1
mr5.1.1.2
mr5.1.1.3
mr5.1.1.4
mr5.1.1.5
mr5.1.1.6
mr5.1.1.7
mr5.1.2.1
mr5.2.1.1
mr5.2.1.2
mr5.2.1.3
mr5.2.1.4
mr5.2.1.5
mr5.2.2.1
mr5.2.2.2
mr5.3.1.1
mr5.3.1.2
mr5.3.2.1
mr5.4.1.1
mr5.4.1.2
mr5.4.2.1
mr5.4.2.2
mr5.5.1.1
mr5.5.1.2
mr5.5.1.3
mr5.5.1.4
mr5.5.1.5
mr5.5.1.6
mr5.5.1.7
mr5.5.1.8
mr5.5.10.1
mr5.5.10.2
mr5.5.10.3
mr5.5.11.1
mr5.5.11.2
mr5.5.11.3
mr5.5.11.4
mr5.5.12.1
mr5.5.13.1
mr5.5.2.1
mr5.5.2.2
mr5.5.2.3
mr5.5.2.4
mr5.5.3.1
mr5.5.3.2
mr5.5.3.3
mr5.5.3.4
mr5.5.4.1
mr5.5.4.2
mr5.5.4.3
mr5.5.4.4
mr5.5.4.5
mr5.5.4.6
mr5.5.5.1
mr5.5.5.2
mr5.5.5.3
mr5.5.5.4
mr5.5.5.5
mr5.5.5.6
mr5.5.5.7
mr5.5.5.8
mr5.5.6.1
mr5.5.6.2
mr5.5.6.3
mr5.5.6.4
mr5.5.6.5
mr5.5.6.6
mr5.5.6.7
mr5.5.7.1
mr5.5.7.10
mr5.5.7.11
mr5.5.7.12
mr5.5.7.2
mr5.5.7.3
mr5.5.7.4
mr5.5.7.5
mr5.5.7.6
mr5.5.7.7
mr5.5.7.8
mr5.5.7.9
mr5.5.8.1
mr5.5.8.2
mr5.5.8.3
mr5.5.8.4
mr5.5.8.5
mr5.5.8.6
mr5.5.9.1
mr5.5.9.2
mr5.5.9.3
mr5.5.9.4
mr5.5.9.5
mr5.5.9.6
mr5.5.9.7
mr5.5.9.8
mr5.5.9.9
mr6.0.1.1
mr6.0.1.2
mr6.0.1.3
mr6.0.2.1
mr6.0.2.2
mr6.0.2.3
mr6.0.2.4
mr6.1.1.1
mr6.1.1.2
mr6.1.1.3
mr6.1.1.4
mr6.1.2.1
mr6.1.2.2
mr6.1.2.3
mr6.1.2.4
mr6.1.2.5
mr6.1.2.6
mr6.2.1.1
mr6.2.1.2
mr6.2.1.3
mr6.2.1.4
mr6.2.1.5
mr6.2.1.6
mr6.2.1.7
mr6.2.1.8
mr6.2.2.1
mr6.2.2.2
mr6.2.2.3
mr6.2.2.4
mr6.3.1.1
mr6.3.1.2
mr6.3.1.3
mr6.3.1.4
mr6.3.1.5
mr6.3.1.6
mr6.3.1.7
mr6.3.1.8
mr6.3.1.9
mr6.3.2.1
mr6.3.2.2
mr6.3.2.3
mr6.3.2.4
mr6.4.1.1
mr6.4.1.2
mr6.4.1.3
mr6.4.1.4
mr6.4.1.5
mr6.4.1.6
mr6.4.1.7
mr6.4.1.8
mr6.4.1.9
mr6.4.2.1
mr6.4.2.2
mr6.4.2.3
mr6.4.2.4
mr6.5.1.1
mr6.5.1.2
mr6.5.1.3
mr6.5.1.4
mr6.5.1.5
mr6.5.1.6
mr6.5.1.7
mr6.5.1.8
mr6.5.10.1
mr6.5.10.2
mr6.5.10.3
mr6.5.10.4
mr6.5.10.5
mr6.5.10.6
mr6.5.11.1
mr6.5.11.2
mr6.5.11.3
mr6.5.11.4
mr6.5.11.5
mr6.5.12.1
mr6.5.12.2
mr6.5.12.3
mr6.5.13.1
mr6.5.2.1
mr6.5.2.2
mr6.5.2.3
mr6.5.2.4
mr6.5.2.5
mr6.5.2.6
mr6.5.2.7
mr6.5.2.8
mr6.5.2.9
mr6.5.3.1
mr6.5.3.10
mr6.5.3.11
mr6.5.3.12
mr6.5.3.2
mr6.5.3.3
mr6.5.3.4
mr6.5.3.5
mr6.5.3.6
mr6.5.3.7
mr6.5.3.8
mr6.5.3.9
mr6.5.4.1
mr6.5.4.10
mr6.5.4.11
mr6.5.4.12
mr6.5.4.13
mr6.5.4.14
mr6.5.4.15
mr6.5.4.2
mr6.5.4.3
mr6.5.4.4
mr6.5.4.5
mr6.5.4.6
mr6.5.4.7
mr6.5.4.8
mr6.5.4.9
mr6.5.5.1
mr6.5.5.10
mr6.5.5.11
mr6.5.5.12
mr6.5.5.13
mr6.5.5.14
mr6.5.5.2
mr6.5.5.3
mr6.5.5.4
mr6.5.5.5
mr6.5.5.6
mr6.5.5.7
mr6.5.5.8
mr6.5.5.9
mr6.5.6.1
mr6.5.6.10
mr6.5.6.11
mr6.5.6.12
mr6.5.6.13
mr6.5.6.14
mr6.5.6.15
mr6.5.6.16
mr6.5.6.17
mr6.5.6.2
mr6.5.6.3
mr6.5.6.4
mr6.5.6.5
mr6.5.6.6
mr6.5.6.7
mr6.5.6.8
mr6.5.6.9
mr6.5.7.1
mr6.5.7.10
mr6.5.7.2
mr6.5.7.3
mr6.5.7.4
mr6.5.7.5
mr6.5.7.6
mr6.5.7.7
mr6.5.7.8
mr6.5.7.9
mr6.5.8.1
mr6.5.8.2
mr6.5.8.3
mr6.5.8.4
mr6.5.8.5
mr6.5.9.1
mr6.5.9.2
mr6.5.9.3
mr6.5.9.4
mr6.5.9.5
mr6.5.9.6
mr7.0.1.1
mr7.0.1.2
mr7.0.1.3
mr7.0.1.4
mr7.0.1.5
mr7.0.1.6
mr7.0.2.1
mr7.0.2.2
mr7.0.2.3
mr7.0.2.4
mr7.0.2.5
mr7.0.2.6
mr7.0.2.7
mr7.0.2.8
mr7.0.2.9
mr7.1.1.1
mr7.1.1.2
mr7.1.1.3
mr7.1.1.4
mr7.1.1.5
mr7.1.1.6
mr7.1.2.1
mr7.1.2.2
mr7.1.2.3
mr7.1.2.4
mr7.1.2.5
mr7.1.2.6
mr7.1.2.7
mr7.2.1.1
mr7.2.1.10
mr7.2.1.11
mr7.2.1.12
mr7.2.1.13
mr7.2.1.14
mr7.2.1.15
mr7.2.1.2
mr7.2.1.3
mr7.2.1.4
mr7.2.1.5
mr7.2.1.6
mr7.2.1.7
mr7.2.1.8
mr7.2.1.9
mr7.2.2.1
mr7.2.2.2
mr7.2.2.3
mr7.3.1.1
mr7.3.1.10
mr7.3.1.11
mr7.3.1.12
mr7.3.1.2
mr7.3.1.3
mr7.3.1.4
mr7.3.1.5
mr7.3.1.6
mr7.3.1.7
mr7.3.1.8
mr7.3.1.9
mr7.3.2.1
mr7.3.2.2
mr7.4.1.1
mr7.4.1.2
mr7.4.1.3
mr7.4.1.4
mr7.4.1.5
mr7.4.1.6
mr7.4.1.7
mr7.4.1.8
mr7.4.1.9
mr7.4.2.1
mr7.4.2.2
mr7.5.1.1
mr7.5.1.10
mr7.5.1.11
mr7.5.1.12
mr7.5.1.13
mr7.5.1.14
mr7.5.1.15
mr7.5.1.16
mr7.5.1.17
mr7.5.1.18
mr7.5.1.19
mr7.5.1.2
mr7.5.1.20
mr7.5.1.21
mr7.5.1.3
mr7.5.1.4
mr7.5.1.5
mr7.5.1.6
mr7.5.1.7
mr7.5.1.8
mr7.5.1.9
mr7.5.10.1
mr7.5.10.2
mr7.5.10.3
mr7.5.10.4
mr7.5.10.5
mr7.5.11.1
mr7.5.12.1
mr7.5.13.1
mr7.5.2.1
mr7.5.2.10
mr7.5.2.11
mr7.5.2.12
mr7.5.2.13
mr7.5.2.14
mr7.5.2.15
mr7.5.2.16
mr7.5.2.2
mr7.5.2.3
mr7.5.2.4
mr7.5.2.5
mr7.5.2.6
mr7.5.2.7
mr7.5.2.8
mr7.5.2.9
mr7.5.3.1
mr7.5.3.10
mr7.5.3.11
mr7.5.3.12
mr7.5.3.13
mr7.5.3.14
mr7.5.3.15
mr7.5.3.16
mr7.5.3.17
mr7.5.3.18
mr7.5.3.19
mr7.5.3.2
mr7.5.3.20
mr7.5.3.21
mr7.5.3.22
mr7.5.3.23
mr7.5.3.24
mr7.5.3.25
mr7.5.3.3
mr7.5.3.4
mr7.5.3.5
mr7.5.3.6
mr7.5.3.7
mr7.5.3.8
mr7.5.3.9
mr7.5.4.1
mr7.5.4.10
mr7.5.4.11
mr7.5.4.12
mr7.5.4.13
mr7.5.4.14
mr7.5.4.15
mr7.5.4.2
mr7.5.4.3
mr7.5.4.4
mr7.5.4.5
mr7.5.4.6
mr7.5.4.7
mr7.5.4.8
mr7.5.4.9
mr7.5.5.1
mr7.5.5.2
mr7.5.5.3
mr7.5.5.4
mr7.5.5.5
mr7.5.5.6
mr7.5.5.7
mr7.5.6.1
mr7.5.6.10
mr7.5.6.2
mr7.5.6.3
mr7.5.6.4
mr7.5.6.5
mr7.5.6.6
mr7.5.6.7
mr7.5.6.8
mr7.5.6.9
mr7.5.7.1
mr7.5.7.2
mr7.5.7.3
mr7.5.8.1
mr7.5.8.2
mr7.5.8.3
mr7.5.8.4
mr7.5.9.1
mr7.5.9.2
mr7.5.9.3
mr7.5.9.4
mr7.5.9.5
mr8.0.1.1
mr8.0.1.10
mr8.0.1.11
mr8.0.1.12
mr8.0.1.13
mr8.0.1.14
mr8.0.1.15
mr8.0.1.16
mr8.0.1.2
mr8.0.1.3
mr8.0.1.4
mr8.0.1.5
mr8.0.1.6
mr8.0.1.7
mr8.0.1.8
mr8.0.1.9
mr8.0.2.1
mr8.0.2.2
mr8.1.1.1
mr8.1.1.10
mr8.1.1.11
mr8.1.1.12
mr8.1.1.13
mr8.1.1.14
mr8.1.1.15
mr8.1.1.16
mr8.1.1.2
mr8.1.1.3
mr8.1.1.4
mr8.1.1.5
mr8.1.1.6
mr8.1.1.7
mr8.1.1.8
mr8.1.1.9
mr8.1.2.1
mr8.2.1.1
mr8.2.1.10
mr8.2.1.11
mr8.2.1.12
mr8.2.1.2
mr8.2.1.3
mr8.2.1.4
mr8.2.1.5
mr8.2.1.6
mr8.2.1.7
mr8.2.1.8
mr8.2.1.9
mr8.2.2.1
mr8.3.1.1
mr8.3.1.2
mr8.3.1.3
mr8.3.1.4
mr8.3.1.5
mr8.3.1.6
mr8.3.1.7
mr8.3.2.1
mr8.3.2.2
mr8.4.1.1
mr8.4.1.10
mr8.4.1.11
mr8.4.1.2
mr8.4.1.3
mr8.4.1.4
mr8.4.1.5
mr8.4.1.6
mr8.4.1.7
mr8.4.1.8
mr8.4.1.9
mr8.4.2.1
mr8.4.2.2
mr8.4.2.3
mr8.5.1.1
mr8.5.1.10
mr8.5.1.2
mr8.5.1.3
mr8.5.1.4
mr8.5.1.5
mr8.5.1.6
mr8.5.1.7
mr8.5.1.8
mr8.5.1.9
mr8.5.10.1
mr8.5.10.2
mr8.5.11.1
mr8.5.11.2
mr8.5.11.3
mr8.5.11.4
mr8.5.12.1
mr8.5.2.1
mr8.5.2.10
mr8.5.2.11
mr8.5.2.12
mr8.5.2.13
mr8.5.2.14
mr8.5.2.15
mr8.5.2.16
mr8.5.2.17
mr8.5.2.2
mr8.5.2.3
mr8.5.2.4
mr8.5.2.5
mr8.5.2.6
mr8.5.2.7
mr8.5.2.8
mr8.5.2.9
mr8.5.3.1
mr8.5.3.10
mr8.5.3.11
mr8.5.3.12
mr8.5.3.13
mr8.5.3.14
mr8.5.3.2
mr8.5.3.3
mr8.5.3.4
mr8.5.3.5
mr8.5.3.6
mr8.5.3.7
mr8.5.3.8
mr8.5.3.9
mr8.5.4.1
mr8.5.4.10
mr8.5.4.11
mr8.5.4.12
mr8.5.4.13
mr8.5.4.14
mr8.5.4.2
mr8.5.4.3
mr8.5.4.4
mr8.5.4.5
mr8.5.4.6
mr8.5.4.7
mr8.5.4.8
mr8.5.4.9
mr8.5.5.1
mr8.5.5.2
mr8.5.5.3
mr8.5.5.4
mr8.5.5.5
mr8.5.5.6
mr8.5.5.7
mr8.5.5.8
mr8.5.5.9
mr8.5.6.1
mr8.5.6.2
mr8.5.6.3
mr8.5.6.4
mr8.5.6.5
mr8.5.6.6
mr8.5.6.7
mr8.5.6.8
mr8.5.7.1
mr8.5.7.2
mr8.5.7.3
mr8.5.7.4
mr8.5.8.1
mr8.5.8.2
mr8.5.8.3
mr8.5.8.4
mr8.5.8.5
mr8.5.8.6
mr8.5.9.1
mr8.5.9.2
mr8.5.9.3
mr9.0.1.1
mr9.0.1.2
mr9.0.1.3
mr9.0.1.4
mr9.0.1.5
mr9.0.1.6
mr9.0.1.7
mr9.1.1.1
mr9.1.1.10
mr9.1.1.11
mr9.1.1.12
mr9.1.1.13
mr9.1.1.14
mr9.1.1.15
mr9.1.1.2
mr9.1.1.3
mr9.1.1.4
mr9.1.1.5
mr9.1.1.6
mr9.1.1.7
mr9.1.1.8
mr9.1.1.9
mr9.2.1.1
mr9.2.1.2
mr9.2.1.3
mr9.2.1.4
mr9.2.1.5
mr9.2.1.6
mr9.3.1.1
mr9.3.1.10
mr9.3.1.2
mr9.3.1.3
mr9.3.1.4
mr9.3.1.5
mr9.3.1.6
mr9.3.1.7
mr9.3.1.8
mr9.3.1.9
mr9.4.1.1
mr9.4.1.10
mr9.4.1.11
mr9.4.1.2
mr9.4.1.3
mr9.4.1.4
mr9.4.1.5
mr9.4.1.6
mr9.4.1.7
mr9.4.1.8
mr9.4.1.9
mr9.5.1.1
mr9.5.1.10
mr9.5.1.11
mr9.5.1.12
mr9.5.1.13
mr9.5.1.14
mr9.5.1.15
mr9.5.1.16
mr9.5.1.17
mr9.5.1.18
mr9.5.1.19
mr9.5.1.2
mr9.5.1.20
mr9.5.1.21
mr9.5.1.22
mr9.5.1.23
mr9.5.1.24
mr9.5.1.25
mr9.5.1.26
mr9.5.1.27
mr9.5.1.28
mr9.5.1.29
mr9.5.1.3
mr9.5.1.30
mr9.5.1.31
mr9.5.1.4
mr9.5.1.5
mr9.5.1.6
mr9.5.1.7
mr9.5.1.8
mr9.5.1.9
mr9.5.2.1
mr9.5.2.10
mr9.5.2.11
mr9.5.2.12
mr9.5.2.13
mr9.5.2.14
mr9.5.2.15
mr9.5.2.16
mr9.5.2.17
mr9.5.2.18
mr9.5.2.19
mr9.5.2.2
mr9.5.2.20
mr9.5.2.21
mr9.5.2.22
mr9.5.2.23
mr9.5.2.24
mr9.5.2.25
mr9.5.2.26
mr9.5.2.27
mr9.5.2.28
mr9.5.2.29
mr9.5.2.3
mr9.5.2.30
mr9.5.2.31
mr9.5.2.32
mr9.5.2.4
mr9.5.2.5
mr9.5.2.6
mr9.5.2.7
mr9.5.2.8
mr9.5.2.9
mr9.5.3.1
mr9.5.3.10
mr9.5.3.11
mr9.5.3.12
mr9.5.3.13
mr9.5.3.14
mr9.5.3.15
mr9.5.3.16
mr9.5.3.17
mr9.5.3.18
mr9.5.3.19
mr9.5.3.2
mr9.5.3.20
mr9.5.3.21
mr9.5.3.22
mr9.5.3.3
mr9.5.3.4
mr9.5.3.5
mr9.5.3.6
mr9.5.3.7
mr9.5.3.8
mr9.5.3.9
mr9.5.4.1
mr9.5.4.10
mr9.5.4.11
mr9.5.4.12
mr9.5.4.13
mr9.5.4.14
mr9.5.4.15
mr9.5.4.16
mr9.5.4.17
mr9.5.4.18
mr9.5.4.2
mr9.5.4.3
mr9.5.4.4
mr9.5.4.5
mr9.5.4.6
mr9.5.4.7
mr9.5.4.8
mr9.5.4.9
mr9.5.5.1
mr9.5.5.10
mr9.5.5.11
mr9.5.5.12
mr9.5.5.13
mr9.5.5.14
mr9.5.5.15
mr9.5.5.16
mr9.5.5.17
mr9.5.5.18
mr9.5.5.2
mr9.5.5.3
mr9.5.5.4
mr9.5.5.5
mr9.5.5.6
mr9.5.5.7
mr9.5.5.8
mr9.5.5.9
mr9.5.6.1
mr9.5.6.10
mr9.5.6.11
mr9.5.6.2
mr9.5.6.3
mr9.5.6.4
mr9.5.6.5
mr9.5.6.6
mr9.5.6.7
mr9.5.6.8
mr9.5.6.9
mr9.5.7.1
mr9.5.7.2
mr9.5.7.3
mr9.5.7.4
mr9.5.7.5
mr9.5.7.6
mr9.5.7.7
mr9.5.8.1
mr9.5.8.2
mr9.5.8.3
mr9.5.8.4
mr9.5.8.5
mr9.5.9.1
${ noResults }
5761 Commits (master)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
336fc70fb9 |
MT#66561 replace JE with JavaScript::QuickJS
Provisioning templates with lang "js" now run on QuickJS instead of the unmaintained pure-Perl JE engine. QuickJS is much faster, supports ES2020 syntax and is sandboxed by default (no std/os modules). The JE deprecation warning workaround and JE::Destroyer cleanup are gone. Return values keep their previous form: booleans are converted to 1/0, Date objects to epoch seconds, and null array elements and hash values are retained. split_number() now returns a plain object in JS mode, so its cc/ac/sn properties can be accessed directly, which did not work with JE. Returning functions or other JS-only objects fails with an explicit error. Change-Id: Iea8541f4e6d1e540ac54c37e2074591d7821d63c |
13 hours ago |
|
|
1abe37d0e6 |
MT#65620 provisioning templates: purge only, fix purge and recreate
* purge_existing=only (or a "purge" row field set to "only") only
terminates what a row matches and creates nothing:
- subscribers matched by the subscriber identifier, by
username/webusername in the domain, or by the primary or alias
numbers
- the contract matched by the contract identifier, once it has no
active subscribers left (contract id 1 is refused)
- the contract contact matched by its identifier, once no contract
or subscriber that is not terminated uses it anymore (same rule as
deleting a contact in the UI, but always terminating, never
deleting)
Contacts and contracts are only looked up, never created. The API
logs the purged ids, the web form reports their counts.
purge_existing=true/1 keeps purging and recreating as before.
* CSV upload form: "Purge existing" is a select (no, purge and
recreate, purge only) instead of a checkbox.
* fix purge and recreate: each subscriber create/update attempt now
runs in a savepoint, which is rolled back on a unique violation.
Previously a collision on the primary number left the half-created
subscriber in the transaction, so the retry failed on its own
username and the whole row was rolled back.
* the conflicting subscribers are terminated in a loop until the
attempt succeeds, so rows colliding with several subscribers
(e.g. number and alias) work. Previously the alias branch created
the subscriber once per conflicting subscriber.
* _get_duplicate_subs() handles all unique violations: number_idx,
user_dom_idx, webuser_dom_idx, "Subscriber already exists", quoted
and unquoted "alias ... already exists", "aliases ...", "more than
N provided aliases" and the update path's "Number(s) '...' already
exist(s)". Unquoted alias errors and collisions when updating an
identified subscriber were not purged before. Other errors are
passed through unchanged instead of being treated as a username
duplicate. The updated subscriber itself is never terminated.
* _init_subscriber_context() is split, _calculate_subscriber_context()
computes the subscriber without prepare_resource().
* document purge_existing in the API description.
* ngcp-provisioning-template: --purge takes an optional value,
--purge=only purges without recreating. Purged ids are printed.
Change-Id: Ic8e08c74d2d46413c3b2fffc6e9098931ad96dc9
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
1 day ago |
|
|
c6cf9adfa9 |
MT#66497 restrict subscriber roles in /api/subscribers
* subscriber and subscriberadmin can no longer modify fields they
are not allowed to. A changed value is rejected with 422 "Read-only
field(s) for authenticated role: <fields>", unchanged values are
accepted (clients sending the fetched values back keep working),
omitted fields keep the stored values. Invalid values (e.g.
administrative "true" or {}) are rejected with 422 as well:
- subscriber on itself: lock, status, primary_number,
alias_numbers, pbx_extension, profile_set_id, profile_id,
administrative
- subscriberadmin on itself: the same except pbx_extension, which
can be changed to an extension not used by another subscriber
or PBX group of the customer
- subscriberadmin on the pilot: lock, status, primary_number,
alias_numbers, profile_set_id, profile_id, administrative
- subscriberadmin on its other subscribers: profile_set_id,
profile_id, administrative
The rules are in Utils::Subscriber::get_readonly_fields(), checked
by get_readonly_changes() in prepare_resource(), so PUT and PATCH
behave the same. Fields a role is allowed to change keep
the existing PUT semantics. Previously e.g. a subscriber could
unlock itself or assign itself any number or subscriber profile.
* replaces the lock/status checks added in MT#66467.
* subscriberadmin on its PBX seats: primary_number is derived from
pbx_extension, a value other than the stored or the derived one
is rejected with 422 (was silently replaced).
* subscriberadmin POST with administrative set is rejected with 422
(was silently reset to 0).
* subscriberadmin can assign alias numbers to its subscribers only
from the PBX pool (non-primary numbers of the pilot), 422
otherwise. Assigned numbers are moved from the pilot, revoked ones
are moved back to the pilot via update_subadmin_sub_aliases() (as
in the web UI), for POST, PUT and PATCH. Previously any new or
unassigned number could be assigned and revoked numbers were
released from the customer. /api/numbers is unchanged.
* PUT/PATCH/DELETE of subscribers outside of the caller's scope
return 404 like GET (subscriber: other subscribers,
subscriberadmin: subscribers outside its customer) instead of 403.
403 stays for non-PBX subscriberadmin without the write privilege.
* non-PBX subscriberadmin POST returns 403 without the write
privilege instead of 500, with it the subscriber is created in
the own customer.
* SubscriberSubAdminAPI form: add the lock field, so subscriberadmin
lock changes of its subscribers are validated as in the admin form
and no longer dropped on PUT. PUT without lock/status still resets
them (lock 0, status active) as before, PATCH without lock keeps it
(previously any subscriberadmin PATCH unlocked the subscriber).
* fields visibility is unchanged.
* api-subscribers.t:
- add restricted fields, PBX pool and access tests for subscriber,
subscriberadmin (own, pilot, its subscribers, non-PBX) and admin
- fix subscriber credentials, webpassword is not returned by the
API, the subscriberadmin tests were not executed at all
- other reseller fixture uses its own domain
- adapt expectations: subscriberadmin profile changes and
subscriberadmin creation are rejected with 422
- TT#28510: re-fetch the pilot, the TT#15441 cleanup may have
deleted it (hash order dependent, failed with "Customer has no
pbx pilot subscriber yet")
* Test::FakeData: unique billing profile name/handle per creation,
the profile can be created twice per run (fails on an empty DB).
Change-Id: I637330111df278eb62edca25f3406966d8a6ebf1
|
6 days ago |
|
|
4e04e34e69 |
Revert "MT#66497 restrict subscriber roles in /api/subscribers"
This reverts commit
|
7 days ago |
|
|
0a87203254 |
MT#66497 restrict subscriber roles in /api/subscribers
* subscriber and subscriberadmin can no longer modify fields they
are not allowed to. A changed value is rejected with 422 "Read-only
field(s) for authenticated role: <fields>", unchanged values are
accepted (clients sending the fetched values back keep working),
omitted fields keep the stored values:
- subscriber on itself: lock, status, primary_number,
alias_numbers, pbx_extension, profile_set_id, profile_id,
administrative
- subscriberadmin on itself: the same except pbx_extension, which
can be changed to an extension not used by another subscriber
or PBX group of the customer
- subscriberadmin on the pilot: lock, status, primary_number,
alias_numbers, profile_set_id, profile_id, administrative
- subscriberadmin on its other subscribers: profile_set_id,
profile_id, administrative
The rules are in Utils::Subscriber::get_readonly_fields(), checked
by get_readonly_changes() in prepare_resource(), so PUT and PATCH
behave the same. Fields a role is allowed to change keep
the existing PUT semantics. Previously e.g. a subscriber could
unlock itself or assign itself any number or subscriber profile.
* replaces the lock/status checks added in MT#66467.
* subscriberadmin on its PBX seats: primary_number is derived from
pbx_extension, a value other than the stored or the derived one
is rejected with 422 (was silently replaced).
* subscriberadmin POST with administrative set is rejected with 422
(was silently reset to 0).
* subscriberadmin can assign alias numbers to its subscribers only
from the PBX pool (non-primary numbers of the pilot), 422
otherwise. Assigned numbers are moved from the pilot, revoked ones
are moved back to the pilot via update_subadmin_sub_aliases() (as
in the web UI), for POST, PUT and PATCH. Previously any new or
unassigned number could be assigned and revoked numbers were
released from the customer. /api/numbers is unchanged.
* PUT/PATCH/DELETE of subscribers outside of the caller's scope
return 404 like GET (subscriber: other subscribers,
subscriberadmin: subscribers outside its customer) instead of 403.
403 stays for non-PBX subscriberadmin without the write privilege.
* non-PBX subscriberadmin POST returns 403 without the write
privilege instead of 500, with it the subscriber is created in
the own customer.
* SubscriberSubAdminAPI form: add the lock field, so subscriberadmin
lock changes of its subscribers are validated as in the admin form
and no longer dropped on PUT. PUT without lock/status still resets
them (lock 0, status active) as before, PATCH without lock keeps it
(previously any subscriberadmin PATCH unlocked the subscriber).
* fields visibility is unchanged.
* api-subscribers.t:
- add restricted fields, PBX pool and access tests for subscriber,
subscriberadmin (own, pilot, its subscribers, non-PBX) and admin
- fix subscriber credentials, webpassword is not returned by the
API, the subscriberadmin tests were not executed at all
- other reseller fixture uses its own domain
- adapt expectations: subscriberadmin profile changes and
subscriberadmin creation are rejected with 422
* Test::FakeData: unique billing profile name/handle per creation,
the profile can be created twice per run (fails on an empty DB).
Change-Id: Iaeee0d3f8b315473abb768ae8f53ae748f151068
|
1 week ago |
|
|
de149e756b |
TT#4166 I18N dump: snapshot 2026.11.03-00.26.32
Change-Id: I926fa08d36d8c0a74a19fdd42b1fdcf748c46b31 |
1 week ago |
|
|
d2bebc800a |
MT#66449 Add 'cdr', 'csc_app_info' and 'admin_manage_only' flags
The flags are added to the profile preferences with the following meaning: * 'cdr' > hide/show PBX cdr for admin subscribers * 'csc_app_info' > hide/show the qr_code and app store links * 'admin_manage_only' > show to the user only the pbx configuration menu regardless of any other profile flag config. For example, if the fax feature is disabled but admin_manage_only is activated the personal fax page would be off, BUT the pbx seat fax tab would still be visible. Change-Id: Ie7318fb3fa44e980440e66fd68a29a3aeaf66df0 |
2 weeks ago |
|
|
da4aa427ce |
MT#66500 add PDF download of the API documentation
* swaggerui.tt: add a "Download as PDF" button to /api
* ngcp-apidoc-pdf.js: render the swagger spec (/api?swagger=1)
as PDF in the browser with pdfmake, loaded on demand
- cover page, the Introduction/Authentication chapters of
the page, TOC, resources with their operations, models
- file name: ngcp-api-1-documentation-YYYYmmddHHMMSS.pdf
* libs/pdfmake: vendor pdfmake 0.3.13 (MIT) with Roboto fonts
* Root.pm: stash is_admin_api/is_subscriber_api before the
swaggerui detach, the Authentication chapter on /api was
always rendered for subscribers (wrong realm, no SSL
client certificate or JWT sections)
Change-Id: Ia231fc80e20cc4493510d72e526f3d3453a94da7
|
2 weeks ago |
|
|
0d076aff17 |
MT#66498 t/api-rest performance improvements
* Test::Collection: reuse connections (LWP keep_alive), every
request opened a new TLS connection
- drop cached connections when the admin client cert is
regenerated (the old one gets revoked) and in new threads
(api-balanceintervals.t shares one ua between threads)
* Test::Collection: offer only X25519/prime256v1 TLS groups,
the OpenSSL 3.5 default PQ hybrid key share added ~2.3s to
every handshake. API_TLS_GROUPS overrides it.
* Test::Collection: authenticate subscribers via /login_jwt,
cached per user/password, instead of basic auth with a bcrypt
(cost 13) check on every request.
API_SUBSCRIBER_AUTH=basic restores basic auth.
* api-subscribers.t: ~38 -> ~5 min, stable set: 2.9h -> ~25 min
on a 2 vCPU NGCP VM
Change-Id: If7af312baf18d1b041d1433e9aeb0ab74e9705c9
|
2 weeks ago |
|
|
b90653f375 |
MT#66277 add /api/countries API endpoint
Add a read-only countries collection (GET /api/countries/) and item
(GET /api/countries/{code}) returning ISO 3166-1 alpha-2 code and name,
to replace the /contact/country/ajax call for the new contact page.
Supports id, name and q (code or name) filters and ordering by id/name.
The country list building is moved to NGCP::Panel::Utils::Contact and
shared with the existing ajax action.
Change-Id: I3a8b46303359d75208123132cf5ea435083228aa
|
2 weeks ago |
|
|
0700cca7aa |
TT#4166 I18N dump: snapshot 2026.10.29-23.19.32
Change-Id: I35b8135bb72ce7591efed7888779cff1f5b639a1 |
2 weeks ago |
|
|
3b89e56486 |
MT#62167 support CSV upload on vouchers API
Add the CSV bulk upload already offered by the web interface to the /api/vouchers/ collection. The vouchers are uploaded by POSTing the CSV in the request body with the "text/csv" content type, optionally together with a "purge_existing=true" parameter. The CSV has no header row and the same columns as the web interface upload, the voucher_csv element_order of the panel configuration, with reseller_id in front for an admin. As in the web interface, an admin purges the vouchers of all the resellers, while a reseller only purges its own ones. The parser of the web interface is moved to NGCP::Panel::Utils::Voucher::upload_csv and used by both, so they behave the same: lines with less than two columns are skipped, while a line which can't be parsed or a voucher refused by the database rejects the whole upload, the purge included. The API answers it with a 422 telling the reason. The shared parser also fixes: - an unterminated quoted field, which runs up to the end of the file, dropped the rest of the file silently instead of rejecting it - an impossible valid_until date failed without telling the reason - the uploaded vouchers had no created_at, now it's the upload time, as for the vouchers created one by one - the datetimes are formatted for the database explicitly, as the bulk insert doesn't deflate DateTime objects The body of a CSV upload is not logged, as it holds all the voucher codes in clear text. Change-Id: I34700cdb0d22439c2ee7e0f7d1d578f62075d8fb |
2 weeks ago |
|
|
3e1eef9861 |
MT#62167 fix voucher CSV upload columns after an admin upload
The admin upload of the vouchers CSV added "reseller_id" in front of the voucher_csv element_order list of the panel configuration itself, not in front of a copy of it. Every further upload handled by the same panel process, by an admin or by a reseller, then got one more leading reseller_id column, so its columns were shifted and the vouchers were imported wrongly or the upload failed. Copy the configured column list before adding reseller_id to it, as the billing fees upload does. Change-Id: I50b56254f73d513c3d8ca91b75771d0054baf02e |
2 weeks ago |
|
|
10ac4d8189 |
MT#66467 fix reseller_id handling for reseller/ccare roles
* reseller_id is no longer required from reseller and ccare roles, their own reseller is used instead. admin and ccareadmin still have to provide it. * emergencymappingcontainers: fix 500 on PUT/PATCH for resellers as update_item() used an undefined reseller_id. * pbxdevicemodels: fix "Reseller field is required" on POST/PUT for resellers, reseller_id is now set in pre_process_form_resource() so it is present before the form validation. * profilepackages, billingnetworks: fix "Changing the reseller ID is not allowed." on PUT for resellers if reseller_id was not provided. * customercontacts: fix 500 on POST for ccare/ccareadmin as $c->user->contract was used, which admin users do not have. ccare now uses its own reseller_id and ccareadmin the provided one. * admins: POST is no longer allowed for ccare/ccareadmin roles. Change-Id: Ibed6b4e5249436ab4fcd781ec3140bbf44190cd4 |
2 weeks ago |
|
|
1b605496cb |
MT#66370 /api/platforminfo add grafana section
* grafana config section is exposed for users with the admin role. Change-Id: Ia59eae42ca96b1aec7dc5953f6a50953842c240c |
3 weeks ago |
|
|
a7e675c691 |
Release new version 27.0.0.0+0~mr27.0.0.0
|
1 month ago |
|
|
3198cd8a38 |
MT#66165 Add libdata-uuid-perl to depends
/usr/share/perl5/NGCP/Panel/Utils/DeviceBootstrap/Snom.pm relies on Data::UUID, but doesn't expertly depend on it. Fixes: spce systemd[1]: Starting ngcp-panel.service - NGCP Panel Webapp... spce ngcp_panel_fastcgi.pl[29027]: Can't locate Data/UUID.pm in @INC (you may need to install the Data::UUID module) (@INC entries checked: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.42.3 /usr/local/share/perl/5.42.3 /usr/lib/x86_64-linux-gnu/perl> spce ngcp_panel_fastcgi.pl[29027]: BEGIN failed--compilation aborted at /usr/share/perl5/NGCP/Panel/Utils/DeviceBootstrap/Snom.pm line 16, <DATA> line 960. As observed on current Debian/forky builds. Change-Id: Ie2040c682ec3de3e416f1ec2b1e24dae6bb8d52e |
1 month ago |
|
|
5e9aeb21f2 |
MT#66071 add contact_email and billing_profile_name filters to contracts API
Add contact_email and billing_profile_name query params to GET /api/contracts/, plus order_by support for both, so the Contact Email and Billing Profile columns can be filtered and sorted. billing_profile_name resolves through the actual_billing_profile relationship, which matches the currently effective profile already reported as billing_profile_id, rather than any historical or future billing mapping. The column values themselves need no API change, as ?expand=contact_id,billing_profile_id already returns them as contact_id_expand.email and billing_profile_id_expand.name. Change-Id: I4022a602f3d1dcca15617a3da4c4950edff34ee9 |
1 month ago |
|
|
7251904014 |
MT#66160 fix 500 on contract-only provisioning templates
The API POST success path assumed a subscriber was created. Contract-only templates now log and return Location for the created contract instead. Change-Id: Ibf4990038643840f48798dff4bd518a08f7f562b |
1 month ago |
|
|
1836eaac09 |
MT#65991 add recusrive expand filters support
* it is now possible to filter by expanded object fields, recursively.
e.g.:
/api/pbxdevices/?expand=profile_id.config_id&profile_id_expand.config_id=29
* the filter logic also checks allowed_roles and skips controllers that
the user do not have access to.
* expand_field(): fix allowed_roles usage to use get_allowed_roles()
so that allowed_roles definitions that are not an array but a HASH
with method => roles are also properly used.
* get_allowed_roles(): do not delete the $roles_config->{Default} as
this method can be called multiple times per endpoint (in case
of the expand logic).
* the expand filter logic only knows about the form defined
expand => "class" and therefore tries to convert the class from
Role::API to Controller::API, assuming that the Controller::API::
has the name is the same. For cases where the name is different,
expand => "controller_class" should be explicitly defined in the form,
then the logic picks it first and only then falls back to the "class".
Change-Id: I76d1ed16f26c1a0f7e55bd421c3a51b89eb6a389
|
2 months ago |
|
|
45aafa74bb |
MT#65904 report rejected CSV rows on calllistsuppressions API
A CSV upload to /api/calllistsuppressions/ answered with a success status even when rows were rejected, so a user had no way to notice that the import was incomplete. The rejected rows are reported with a 422 now, whose message tells how many rows were imported and which line numbers were skipped, the same information the web interface shows. Change-Id: I7ab235227a3f69c8739e8ff2b199debf6fa8a304 |
2 months ago |
|
|
6ff94fced0 |
MT#66024 Report license warnings/errors even if not enforced
At the moment we are gathering the license information from /proc/ngcp/check, /proc/ngcp/valid and /prox/ngcp/flags/*. The output of those files is affected by the license enforcement: if not enforced then the outpup will be always ok, even if there are license issues. The commit fixes the issue reading the corresponding 'raw_' values that are always reporting the real status even when the license is not enforced. Change-Id: I597d2853d48d151ac6c08d25f0b1acaa2f9c1133 |
2 months ago |
|
|
ae0be66a54 |
MT#65953 add status/not_status filters to contracts API
Allow comma-separated status and not_status query params on GET /api/contracts/, matching /api/customers. Change-Id: Ic7857dd08bc04806ee8a42fcfe5c125df614578e |
2 months ago |
|
|
e4a0c7b734 |
MT#66012 add collections filter by resource ID
* all GET "collection" now can search by the resource ID as /?id=123. this is beneficial for when a filtering logic needs to filter by various params and one of them is the id, as querying by /:id also returns a different type of the response. * the id is only injected into the accepted query params if it doesn't exist there (some endpoints might have it already). * the id is also injected (on top) into the API documentation as: id => 'Filter the collection by resource ID' Change-Id: I96fa5a96e55c3b1cd38cafd7c9f05b27aaa32f7d |
2 months ago |
|
|
3966cdb484 |
MT#66009 /api/admins safeguard links for nonexisting reseller_id
* prevent a 500 errors and suppress reseller_id hal links if there is a rare scenario whree reseller_id = null for the admin user. Change-Id: Iaef880a537271ff654fbd852a0a5f3657023ce0c |
2 months ago |
|
|
16f107fafc |
TT#4166 I18N dump: snapshot 2026.09.10-22.19.00
Change-Id: Ic658caea830ef112c1a00f86a4232a78ff818736 |
2 months ago |
|
|
db77631c79 |
MT#65239 enhance /api/platforminfo with meta release info
* /api/platforminfo now returns a new 'release_info' section
that contains info about:
- latest NGCP release
- latest NGCP LTS release
- info about the current release such as expiration dates,
lts, supported flags.
- 'this' subsection contains current release version and also
a platform type
* caching support, the info is retrieved and parsed only once
after the ngcp-panel service restart and then once every hour
and only if the content is changed.
* NGCP::Panel add Catalyst::Cache and Plugin::Cache support
accessible via $c->cache
Change-Id: I50c58e2563db5962f498d3523db95b4f6372596c
|
2 months ago |
|
|
871f002b95 |
MT#65713 include contract_cnt and voucher_cnt in profilepackages
* expose already-selected contract and voucher counts on GET responses * document them as readonly PackageAPI fields and strip on write * apply the same limit+1 count cap (default 10) as billingprofiles Change-Id: If1644a3b7f9824c4ce03a68c2a8fec166e3ec3ef |
2 months ago |
|
|
d12b794b21 |
MT#65906 /api/platforminfo returns call_flow data
* call_flow ip:port info is returned for admin users Change-Id: Ie98222672beab61d2d02fc6b182f8fb3a667df55 |
2 months ago |
|
|
f7ac7d96be |
MT#65890 Fix regression on PATCH calls to CallForwardsItem api
Add missing "add" and "remove" operations for /api/callforwardsitem
PATCH
When the endpoint was refactored in commit
|
2 months ago |
|
|
5cf446e477 |
MT#65852 support wildcard search on calllistsuppressions domain
The domain query parameter of GET /api/calllistsuppressions/ now uses the wildcard query type, so "*" can be used the same way as in the pattern and label filters, e.g. domain=*word*, domain=word* and domain=*word. A value without any "*" still matches exactly, and an empty value still filters for the suppressions applying to any domain. Change-Id: Ib1b03faefdf9dba69168fb3b0a4273b5bff5756f |
3 months ago |
|
|
ed41c13926 |
MT#65799 customercontacts, systemcontacts expand terminated contacts
* when expand is used to expand a contact_id, it now expands contacts that are in any state (including terminated). * direct use of /api/customercontacts and /api/systemcontacts remains unchanged. Change-Id: I89738968fafd061d8a516aeab82c7a0fddd5c64b |
3 months ago |
|
|
eba04a32f8 |
MT#65383 add auth token validation support
* auth tokens are now validated in Credentials/JWT and rejected if an auth token is used for anything else but /login_jwt. Change-Id: I17d3c0a7418e79b0981c030ed343062bf03d6c23 |
3 months ago |
|
|
3af6080c76 |
MT#65586 add expand for profilepackages profile mapping arrays
* allow expanding initial_profiles, topup_profiles and underrun_profiles * inline billing profile and billing network resources on each mapping * return success after expanding repeatable nested id fields Change-Id: I15ec66b04931f8c9065ad5826886ee2011e3f6fc |
3 months ago |
|
|
50b518c259 |
MT#51865 support CSV upload and download on calllistsuppressions API
Add the CSV bulk import and export already offered by the web interface to the /api/calllistsuppressions/ collection. The suppressions are downloaded by requesting the collection with an "Accept: text/csv" header. The suppressions are uploaded by POSTing the CSV in the request body with the "text/csv" content type, optionally together with a "purge_existing=true" parameter. The columns are domain, direction, pattern, mode and label, without a header row. Change-Id: I000de048b95d7cba6cb38a986914c49810cf626e |
3 months ago |
|
|
6a942068be |
MT#51865 add calllistsuppressions API endpoint
Expose the global call list suppressions (billing.call_list_suppressions) via /api/calllistsuppressions/, so far only manageable through the admin web interface. Supports GET, POST, PUT, PATCH and DELETE, and is restricted to the admin role. The already existing but so far unreferenced form CallListSuppression::SuppressionAPI is reused for validation and API documentation. The domain/direction/pattern uniqueness of the table is enforced in check_duplicate, which covers both create and update. Journaling is enabled for create, update and delete operations. Change-Id: I11be61ace5c64610644b714baa45d984313f647c |
3 months ago |
|
|
b369fa37d8 |
Release new version 26.3.0.0+0~mr26.3.0.0
|
3 months ago |
|
|
8042d9f4d1 |
MT#65665 return redirect credentials on pbxdevicemodels on GET API
The bootstrap_config_redirect_*_user and _password values are stored in provisioning.autoprov_redirect_credentials, while _profile is a sync parameter in provisioning.autoprov_sync. resource_from_item only called devmod_sync_parameters_prefetch_api, so GET returned the profile but silently dropped the credentialsm. Add devmod_sync_credentials_prefetch_api, mirroring the read-back the web UI already does in Controller::Device, and call it from resource_from_item for the admin and reseller roles only, which are the roles allowed to write these fields. Subscriber and subscriberadmin GETs keep them hidden. Change-Id: I02a8975fbf9fe60796832cf281d054e634ce6c00 |
3 months ago |
|
|
f3ba2dfa02 |
MT#65652 update primary number when only cc/ac/sn split changes
Skip primary number processing only when cc/ac/sn parts match, so a resplit with the same concatenated CLI still updates voip_numbers. Change-Id: I69e1c4e69ea9fd7df111ee2d371c8e99c478c04f |
3 months ago |
|
|
d01cff87ba |
MT#65224 renumber voicemail msgnum on folder change and delete
Asterisk uses its built-in ODBC voicemail storage against
kamailio.voicemail_spool, which expects msgnum to be contiguous
0..N-1 within each (mailboxuser, dir) folder. Asterisk maintains
that invariant itself, but the panel rewrote dir (or deleted a
row) without ever touching msgnum, leaving gaps and duplicates
that make asterisk mis-play and mis-count the messages.
Add two helpers to Utils::Subscriber reproducing the asterisk
semantics:
* renumber_voicemail_folder() compacts a single folder to 0..N-1
ordered by (msgnum, id). It skips greetings, which live in the
same table with msgnum -1.
* move_voicemail_to_folder() appends the message at the end of
the target folder the way asterisk does (last_msg_index + 1),
then compacts both the source and the target folder.
Both run inside a transaction, so the web UI paths that have no
transaction guard of their own are covered as well.
Use them in all four affected paths:
* PATCH/PUT /api/voicemails/{id} (Role::API::Voicemails)
* DELETE /api/voicemails/{id} (Controller::API::VoicemailsItem)
* mark_voicemail_read() for the CSC/admin listen action
* delete_voicemail() in the subscriber web UI
The compaction is deliberately self-healing, so it also repairs
folders already corrupted by the previous behaviour.
Change-Id: I665de1966bc37c1069ff56fb30c99da85f224f71
|
3 months ago |
|
|
22623e7c2f |
MT#65618 require contract/subscriber sections in prov templates
Validate that dependent template sections only appear together with their parent contract or subscriber section. Change-Id: I3150ca1844b633ab80ffd501fcf587d08f9ebdf8 |
3 months ago |
|
|
cc34719693 |
MT#56865 Fix autoprovisioning of Grandstream devices
The autoprovisioning of Grandstream devices was not working
since a while or even never really worked.
In the SOAP request to register the new device in the GAPS
server was missing the '$query_string' parameter, thus the
server responded back with:
response=200; page={"code":7,"desc":"try to http base authorization failed","ret":null,"time":1785401492}#012;
err=try to http base authorization failed;
This change should not affect the provisioning of other
vendors because the '$query_string' parameter is set to
an empty string by default.
Change-Id: I6637ce82351c46ec631c1047ec50ccb5404228e1
|
4 months ago |
|
|
9767845c0a |
MT#65579 use JSON::Types::bool for is_devid in resource_from_item
Keep journal-safe JSON booleans after moving resource_from_item into Utils::Subscriber, matching the previous Role/API behaviour. Change-Id: I357a4f5f4a25f8a7295341dcbff80a14d3cb6f51 |
4 months ago |
|
|
e485aff6b4 |
MT#65579 fix is_devid boolean conversion in resource_from_item
Avoid the ambiguous bareword "bool" call that 500s subscriber API responses when alias is_devid is a plain DB integer. Change-Id: I8829e064ee658ae35676aa8414c58c0e16ffd5fa |
4 months ago |
|
|
a0bfa9377c |
MT#65579 support updating existing subscribers via prov templates
Reuse shared resource_from_item/update_subscriber helpers so templates can match by identifier, fill missing fields from the DB item, and update instead of only creating. Change-Id: I5fa9be12914677c3b6ef5c4c0617cb75447b45c9 |
4 months ago |
|
|
f677173e70 |
MT#65572 fix api-test2 duplicate cftimeset name
* duplicate time set names are not allowed anymore and there was a typo in the test. Change-Id: I1d6946ddbf8c9142d6389f1764418a073f8babd4 |
4 months ago |
|
|
7256474e72 |
MT#65572 fix api-test2 duplicate cfdestinationset name
* duplicate destination set names are not allowed anymore and there was a typo in the test. Change-Id: I7d0817103ece1ccbe1227498ef4634a9fae092f5 |
4 months ago |
|
|
79817b3529 |
MT#65573 change order of check_resource() and check_duplicate()
* check_duplicate() call must be after check_resource() by default as check_resource usually validates the vital values, such as subscriber_id, reseller_id whereas the duplicates check can already operate with the "trustworthy" subscriber_id for the duplicate checks part. Change-Id: I3361c143a6e00f9c168a3b02e23feb4ca57c85f0 |
4 months ago |
|
|
9470652038 |
MT#65572 rework call forward sets resource validation
* streamline the validation behaviour among all the call forward
set endpoints to be the same:
- all of them contain
process_form_resource()
check_resource()
check_duplicate()
and also update_item() calls those functions in the exact order
* subscriber_id validation is performed in check_resource only once
and removed from the other places.
* subscriberadmin role now uses the same Form as the admin users
(that contains the subscriber_id field).
* subscriberadmin role is now allowed to provide with the subscriber_id,
otherwise if undefined, the user's id is taken.
* check_resource() now checks for subscriberadmin if the subscriber_id
belongs to the same customer.
* check_duplicate() only contains the duplicate entry check.
* the following above fix inconsistent validation that produces
different results, minimises the amount of sql queries as well as
extends the functionality to enable the subscriberadmin role to
create call forward sets on behalf of the own subscribers.
Change-Id: I60ddd5aa2bd5228efeca9f8c1a593d24179b959a
|
4 months ago |
|
|
7f9af10416 |
MT#65553 add check duplicates for call forward sets
* add check_duplicates() for destination, bnumber, time sets. * adjust duplicate set error messages. Change-Id: I8ee958df97f6e53f0e64283a0a9c2f85330aa9d1 |
4 months ago |